From a6aa85c559cc3995fdf3e158239e9f6ef87a462d Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 26 Nov 2024 15:08:52 -0800 Subject: [PATCH 01/35] Updating init context, fixing shared model data Updating init context to match c# Fixing shared model data bug --- .../digitaltwin/core/InitContext.java | 12 ++ .../digitaltwin/core/ModelSchema.java | 197 +++++++++++++++++- .../core/PersistenceProviderType.java | 13 +- .../digitaltwin/core/ProcessingContext.java | 2 +- Development/build.gradle | 6 +- .../development/SimulationScheduler.java | 30 +-- .../development/SimulationWorker.java | 9 +- .../development/TwinExecutionEngine.java | 4 +- .../digitaltwin/development/Workbench.java | 19 +- .../development/WorkbenchInitContext.java | 10 + .../WorkbenchProcessingContext.java | 12 +- 11 files changed, 285 insertions(+), 29 deletions(-) diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java index d05933e..9c36298 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java @@ -40,6 +40,18 @@ public InitContext() {} */ public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + /** + * Retrieve a {@link SharedData} accessor for this model's shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedModelData(); + + /** + * Retrieve a {@link SharedData} accessor for globally shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedGlobalData(); + /** * Get the model-unique Id identifier of the initializing digital twin instance. * @return the id identifier. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java index 2a8bece..88f37ca 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java @@ -27,6 +27,7 @@ public class ModelSchema { private final String simulationProcessorType; private final String messageType; private final String assemblyName; + private final String entryPoint; private final String azureDigitalTwinModelName; private final String persistenceProvider; private final boolean enablePersistence; @@ -35,7 +36,7 @@ public class ModelSchema { private final List alertProviders; private ModelSchema() { - modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = azureDigitalTwinModelName = persistenceProvider = null; + modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = entryPoint = azureDigitalTwinModelName = persistenceProvider = null; enablePersistence = false; enableSimulationSupport = false; enableMessageRecording = false; @@ -68,6 +69,36 @@ public ModelSchema( enableSimulationSupport = false; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + alertProviders = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = false; + persistenceProvider = null; + } + + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String ep) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; alertProviders = null; azureDigitalTwinModelName = null; enablePersistence = false; @@ -103,6 +134,7 @@ public ModelSchema( enableSimulationSupport = false; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; alertProviders = null; azureDigitalTwinModelName = null; enablePersistence = false; @@ -110,6 +142,38 @@ public ModelSchema( persistenceProvider = null; } + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String ep, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; + alertProviders = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = emr; + persistenceProvider = null; + } + + // TODO + /** * Creates a model schema from a digital twin class, a message processor class, a message class, and * alert provider configurations. @@ -139,6 +203,7 @@ public ModelSchema( enableSimulationSupport = false; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; azureDigitalTwinModelName = null; enablePersistence = false; enableMessageRecording = false; @@ -179,6 +244,40 @@ public ModelSchema( enableSimulationSupport = true; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + persistenceProvider = null; + enableMessageRecording = false; + alertProviders = alertingProviders; + } + + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List alertingProviders) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) || + (spClass == null || spClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass), + (spClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = spClass; + enableSimulationSupport = true; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; azureDigitalTwinModelName = null; enablePersistence = false; persistenceProvider = null; @@ -221,6 +320,41 @@ public ModelSchema( enableSimulationSupport = true; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + persistenceProvider = null; + enableMessageRecording = emr; + alertProviders = alertingProviders; + } + + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) || + (spClass == null || spClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass), + (spClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = spClass; + enableSimulationSupport = true; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; azureDigitalTwinModelName = null; enablePersistence = false; persistenceProvider = null; @@ -262,6 +396,7 @@ public ModelSchema( messageType = msgClass; enableMessageRecording = false; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; persistenceProvider = persistenceType.name(); switch (persistenceType) { case AzureDigitalTwinsService: @@ -318,6 +453,7 @@ public ModelSchema( messageType = msgClass; enableMessageRecording = emr; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; persistenceProvider = persistenceType.name(); switch (persistenceType) { case AzureDigitalTwinsService: @@ -376,6 +512,7 @@ public ModelSchema( enableMessageRecording = false; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; persistenceProvider = persistenceType.name(); switch (persistenceType) { case AzureDigitalTwinsService: @@ -436,6 +573,56 @@ public ModelSchema( enableMessageRecording = emr; messageType = msgClass; assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + persistenceProvider = persistenceType.name(); + switch (persistenceType) { + case AzureDigitalTwinsService: + azureDigitalTwinModelName = adtName; + enablePersistence = true; + break; + case SQLite: + case SQLServer: + case DynamoDb: + case CosmosDb: + enablePersistence = true; + azureDigitalTwinModelName = null; + break; + default: + azureDigitalTwinModelName = null; + enablePersistence = false; + break; + } + alertProviders = alertingProviders; + } + + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + String ep, + PersistenceProviderType persistenceType, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = simulationProcessorClass; + enableSimulationSupport = true; + enableMessageRecording = emr; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; persistenceProvider = persistenceType.name(); switch (persistenceType) { case AzureDigitalTwinsService: @@ -536,4 +723,12 @@ public String getAzureDigitalTwinModelName() { public boolean messageRecordingEnabled() { return enableMessageRecording; } + + /** + * Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching. + * @return the entry point for launching. + */ + public String getEntryPoint() { + return entryPoint; + } } diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java index d6712f7..ee03f29 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java @@ -44,13 +44,22 @@ public enum PersistenceProviderType implements Serializable { */ Unconfigured("", 0); - private String _name; - private int _value; + private final String _name; + private final int _value; PersistenceProviderType(String name, int ordinal) { _name = name; _value = ordinal; } + + public String getName() { + return _name; + } + + public int getServiceOrdinalValue() { + return _value; + } + /** * Return the PersistenceProviderType from a string value. We do not rely on Java's naming * because the string values need to be cross-platform and the names may be different in each language. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java index 9803b63..7637b9b 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java @@ -145,7 +145,7 @@ public ProcessingContext() {} /** *

- * This method sends an alert message to supported systems. See "TODO: Link to docs" for more details on supported systems. + * This method sends an alert message to supported systems. *

* *

diff --git a/Development/build.gradle b/Development/build.gradle index d3afa74..fbefc08 100644 --- a/Development/build.gradle +++ b/Development/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.0.7' +version '3.2.1' sourceCompatibility = JavaVersion.VERSION_12 @@ -20,8 +20,8 @@ dependencies { testImplementation group: 'junit', name: 'junit', version: '4.12' implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' // public build configuration - implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7' + //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7' // local build configuration - //implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar') + implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar') } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java index 3deaeca..76a75ed 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java @@ -29,17 +29,8 @@ class SimulationScheduler { static AtomicInteger PROCESSED = new AtomicInteger(0); static AtomicInteger QUEUED = new AtomicInteger(0); static AtomicInteger SENT = new AtomicInteger(0); - private static final int NUM_SIMULATION_WORKERS = Runtime.getRuntime().availableProcessors(); - private final List _workers = new ArrayList<>(NUM_SIMULATION_WORKERS); - private final ExecutorService _simulationService = Executors.newFixedThreadPool(NUM_SIMULATION_WORKERS, new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - Thread t = new Thread(r, "SimulationWorker"); - t.setName(t.getName()+"-"+t.getId()); - t.setDaemon(true); - return t; - } - }); + private final List _workers; + private final ExecutorService _simulationService; private final String _modelName; private final SimulationProcessor _simulationProcessor; private final Logger _logger = LogManager.getLogger(SimulationScheduler.class); @@ -50,10 +41,21 @@ public Thread newThread(Runnable r) { public SimulationScheduler(String modelName, Class digitalTwinClass, SimulationProcessor modelProcessor, - TwinExecutionEngine executor) { + TwinExecutionEngine executor, + int numWorkers) { _modelName = modelName; _simulationProcessor = modelProcessor; - for(int i = 0; i < NUM_SIMULATION_WORKERS; i++) { + _workers = new ArrayList<>(numWorkers); + _simulationService = Executors.newFixedThreadPool(numWorkers, new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r, "SimulationWorker"); + t.setName(t.getName()+"-"+t.getId()); + t.setDaemon(true); + return t; + } + }); + for(int i = 0; i < numWorkers; i++) { _workers.add(new SimulationWorker(i, _modelName, _simulationProcessor, digitalTwinClass, executor, this)); } } @@ -152,7 +154,7 @@ void runThisInstance(String model, String id) throws WorkbenchException { } private int findSlotId(String id) { - return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)NUM_SIMULATION_WORKERS); + return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)_workers.size()); } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java index 14ab16f..8535cc1 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -90,13 +90,16 @@ public void stopTimer(String model, String id, String timerName) { } public void runThisInstance(String model, String id) throws WorkbenchException { - SimulationEvent event = _events.get(String.format("%s%s",model,id)); + SimulationEvent event = _events.remove(String.format("%s%s",model,id)); if(event == null) { TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id); event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor); + } else { + _timeOrderedQueue.remove(event); } WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler); WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController); + processingContext.reset(model, id, null); Date date = new Date(); date.setTime(_curSimulationTime); event.processSimulationEvent(processingContext, date); @@ -143,7 +146,7 @@ public SimulationStep call() throws Exception { if(next != null) { if(next.getProxyState() == ProxyState.Active) { processed++; - nextQueueTm = next.getPriority(); + nextQueueTm = next.getPriority(); if(next.getPriority() <= simulationTime.getCurrentSimulationTime()) { simulationController.reset(_modelName, next.getId()); processingContext.reset(_modelName, next.getId(), null); @@ -179,7 +182,7 @@ public SimulationStep call() throws Exception { result = ProcessingResult.NoUpdate; } if(!simulationController.enqueue()) { - // the user called "runThisInstance" -- the work item has already been reenqued for the + // the user called "runThisInstance" -- the work item has already been re-enqueued for the // current time slice. addToBuffer = false; } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 0896623..7e9ccba 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -69,13 +69,13 @@ void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMes _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); } - void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass) { + void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass, int numWorkers) { _modelNames.add(digitalTwinModelName); _digitalTwins.put(digitalTwinModelName, dtType); _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); _simulationProcessors.put(digitalTwinModelName, simulationProcessor); _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); - _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this)); + _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this, numWorkers)); } void addTimer(String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index 3448b55..fb33f3a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -259,6 +259,7 @@ public class Workbench implements AutoCloseable { private long _now, _next; private SimulationStep _result = null; private boolean _simulationStarted = false; + private int _numWorkers = Runtime.getRuntime().availableProcessors(); /** @@ -268,6 +269,14 @@ public Workbench() { _twinExecutionEngine = new TwinExecutionEngine(this); } + /** + * Instantiate the workbench. + */ + public Workbench(int numSimulationWorkers) { + _twinExecutionEngine = new TwinExecutionEngine(this); + _numWorkers = numSimulationWorkers; + } + /** * Adds a real-time digital twin model to the workbench. @@ -311,7 +320,7 @@ public void addSimulationModel(String modelName, M } validate(digitalTwinMessageProcessor, dtType); - _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass); + _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass, _numWorkers); } /** @@ -707,6 +716,14 @@ static void validate(MessageProcessor digit } } + public void addSharedModelData(String modelName, String key, byte[] value) { + _twinExecutionEngine.getModelData(modelName).put(key, value); + } + + public void addGlobalModelData(String key, byte[] value) { + _twinExecutionEngine.getGlobalSharedData().put(key, value); + } + @Override public void close() throws Exception { _twinExecutionEngine.close(); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java index 29e6a48..1498f60 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -37,6 +37,16 @@ public TimerActionResult startTimer(String timerName return WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_instance, _model, _id, timerName, duration, timerType, timerHandler); } + @Override + public SharedData getSharedModelData() { + return new WorkbenchSharedData(_twinExecutionEngine.getModelData(_model)); + } + + @Override + public SharedData getSharedGlobalData() { + return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); + } + @Override public String getId() { return _id; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index d4478d7..0e9e2f8 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -53,6 +53,8 @@ void reset(String model, String id, String source, DigitalTwinBase instance) { _twinInstance = instance; _forceSave = false; _source = source; + _modelData = _twinExecutionEngine.getModelData(model); + _globalData = _twinExecutionEngine.getGlobalSharedData(); } void reset(String model, String id, String source) { @@ -112,8 +114,14 @@ public SendingResult sendToDigitalTwin(String model, String id, byte[] bytes) { public SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage) { try { if(_twinExecutionEngine.getTwinInstance(model, id) != null) { - List jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); + List jsonSerializableMessages; + if(jsonSerializableMessage instanceof List) { + jsonSerializableMessages = (List)jsonSerializableMessage; + } else { + jsonSerializableMessages = new LinkedList<>(); + jsonSerializableMessages.add(jsonSerializableMessage); + } + return _twinExecutionEngine.run(model, id, null, jsonSerializableMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; } else { return SendingResult.NotHandled; From 1e59cae15f5bb5cfc19a9d01af6b12bc4f43bdf8 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 8 Jan 2025 10:20:04 -0800 Subject: [PATCH 02/35] Adding onInitSimulation Adding new onInitSimulation and InitSimulationContext Updating workbench with new onInitSimulation Bumping version numbers --- Core/build.gradle | 2 +- .../core/InitSimulationContext.java | 15 ++++++ .../core/SimulationController.java | 12 +++++ .../digitaltwin/core/SimulationProcessor.java | 27 ++++++++++ Development/build.gradle | 4 +- .../development/SimulationEvent.java | 6 ++- .../development/SimulationEventTimerImpl.java | 5 ++ .../development/SimulationEventTwinImpl.java | 24 ++++++--- .../development/SimulationScheduler.java | 22 ++++++-- .../development/SimulationWorker.java | 10 +++- .../development/TwinExecutionEngine.java | 4 +- .../digitaltwin/development/Workbench.java | 14 ++++++ .../WorkbenchInitSimulationContext.java | 24 +++++++++ .../WorkbenchSimulationController.java | 6 +++ .../development/WorkbenchSimulationFlags.java | 2 + .../development/TestWorkbench.java | 50 +++++++++++++++++++ 16 files changed, 210 insertions(+), 17 deletions(-) create mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java create mode 100644 Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java diff --git a/Core/build.gradle b/Core/build.gradle index 5d8de5b..660e9c5 100644 --- a/Core/build.gradle +++ b/Core/build.gradle @@ -3,7 +3,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.0.9' +version '3.0.10' sourceCompatibility = JavaVersion.VERSION_12 diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java new file mode 100644 index 0000000..0595a2a --- /dev/null +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java @@ -0,0 +1,15 @@ +package com.scaleoutsoftware.digitaltwin.core; + +public interface InitSimulationContext { + /** + * Retrieve a {@link SharedData} accessor for this model's shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedModelData(); + + /** + * Retrieve a {@link SharedData} accessor for globally shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedGlobalData(); +} diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java index f796807..e18471f 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java @@ -31,6 +31,18 @@ public interface SimulationController { */ Duration getSimulationTimeIncrement(); + /** + * + */ + + /** + *

+ * Retrieves the simulation start time. + *

+ * @return the simulation start time. + */ + Date getSimulationStartTime(); + /** *

* Delay simulation processing for this DigitalTwin instance for a duration of time. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java index 9dda706..d592665 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java @@ -38,4 +38,31 @@ public SimulationProcessor() {} * {@link ProcessingResult#NoUpdate} to ignore the changes. */ public abstract ProcessingResult processModel(ProcessingContext context, T instance, Date epoch); + + /** + *

+ * Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. + *

+ * + *

+ * onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed + * between simulation runs. + *

+ *

    + *
  • Set variables in global or shared data.
  • + *
  • Run a simulation.
  • + *
  • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
  • + *
  • Complete simulation and evaluate the result.
  • + *
+ * + *

+ *

+ * @param context The simulation init context. + * @param instance The digital twin instance. + * @param epoch the simulation start time. + * @return {@link ProcessingResult#UpdateDigitalTwin} or {@link ProcessingResult#NoUpdate}. Default behavior: {@link ProcessingResult#NoUpdate}. + */ + public ProcessingResult onInitSimulation(InitSimulationContext context, T instance, Date epoch) { + return ProcessingResult.NoUpdate; + } } diff --git a/Development/build.gradle b/Development/build.gradle index fbefc08..d3f3bfd 100644 --- a/Development/build.gradle +++ b/Development/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.2.1' +version '3.2.2' sourceCompatibility = JavaVersion.VERSION_12 @@ -20,7 +20,7 @@ dependencies { testImplementation group: 'junit', name: 'junit', version: '4.12' implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' // public build configuration - //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.7' + //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.9' // local build configuration implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar') diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java index 19e739b..034f655 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java @@ -37,6 +37,10 @@ abstract class SimulationEvent implements Comparable { abstract void setProxyState(ProxyState newState); + abstract void handleResetNextSimulationTime(); + + abstract void simulationInit(Date simulationStartTime); + long getPriority() { return _priority; } @@ -56,7 +60,7 @@ void setNextSimulationTime(long nextSimulationTime) { handleResetNextSimulationTime(); } - abstract void handleResetNextSimulationTime(); + @Override public int compareTo(SimulationEvent other) { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java index 864b861..b9c5d8b 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java @@ -55,4 +55,9 @@ void setProxyState(ProxyState newState) { @Override void handleResetNextSimulationTime() { } + + @Override + void simulationInit(Date simulationStartTime) { + + } } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java index 9d1f9a7..b2cac44 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -15,9 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; -import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; -import com.scaleoutsoftware.digitaltwin.core.SimulationProcessor; +import com.scaleoutsoftware.digitaltwin.core.*; import java.nio.charset.StandardCharsets; import java.util.Date; @@ -26,11 +24,15 @@ class SimulationEventTwinImpl extends SimulationEvent { SimulationProcessor _processor; TwinProxy _proxy; + SharedData _modelSharedData; + SharedData _globalSharedData; - SimulationEventTwinImpl(long priority, TwinProxy proxy, SimulationProcessor processor) { + SimulationEventTwinImpl(long priority, TwinProxy proxy, SimulationProcessor processor, SharedData modelSharedData, SharedData globalSharedData) { super(proxy.getInstance().Model, proxy.getInstance().Id, priority); - _proxy = proxy; - _processor = processor; + _proxy = proxy; + _processor = processor; + _modelSharedData = modelSharedData; + _globalSharedData = globalSharedData; } @Override @@ -66,6 +68,16 @@ void handleResetNextSimulationTime() { _proxy.setInstance(base); } + @Override + void simulationInit(Date simulationStartTime) { + InitSimulationContext context = new WorkbenchInitSimulationContext(_globalSharedData, _modelSharedData); + synchronized (_proxy) { + DigitalTwinBase base = _proxy.getInstance(); + _processor.onInitSimulation(context, base, simulationStartTime); + _proxy.setInstance(base); + } + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java index 76a75ed..cc81c66 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java @@ -35,6 +35,7 @@ class SimulationScheduler { private final SimulationProcessor _simulationProcessor; private final Logger _logger = LogManager.getLogger(SimulationScheduler.class); private long _curSimulationTime; + private Date _simulationStartTime; private boolean _isActive; @@ -60,8 +61,8 @@ public Thread newThread(Runnable r) { } } - // -------------- public methods ---------------- - public SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) { + // -------------- package private methods ---------------- + SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) { _logger.info("Received run simulation event with args: " + runSimulationEventArgs.getCurSimulationTime() + " iterationSize: " + runSimulationEventArgs.getIterationSize() + " flags: " + runSimulationEventArgs.getSimulationFlags() ); long current = System.currentTimeMillis(); SimulationStep ret; @@ -73,12 +74,17 @@ public SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) { worker.shutdown(); } return new SimulationStep(SimulationStatus.UserRequested,_curSimulationTime); + } if(runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Start) { + _logger.info("Starting simulation; initializing instances."); + for(SimulationWorker worker : _workers) { + worker.initSimulation(new Date(runSimulationEventArgs.getCurSimulationTime())); + } + return new SimulationStep(SimulationStatus.Running,_curSimulationTime); } else { ret = runSimulationStep(runSimulationEventArgs); } _logger.info(String.format("runSim complete in %s ms... returning next: %s", (System.currentTimeMillis()-current), ret)); - _logger.info(String.format("Queued: %s Processed: %s Sent: %s", QUEUED.getAndSet(0), PROCESSED.getAndSet(0), SENT.getAndSet(0))); return ret; } @@ -93,6 +99,16 @@ void setStatus(boolean active) { _isActive = active; } + Date getSimulationStartTime() { + return _simulationStartTime; + } + + void setSimulationStartTime(Date simulationStartTime) { + _simulationStartTime = simulationStartTime; + } + + + // -------------- private methods ---------------- private SimulationStep runSimulationStep(SimulationStepArgs args) { long currentTimeMs = System.currentTimeMillis(); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java index 8535cc1..0c3d11d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -66,7 +66,7 @@ public void shutdown() { } public void addTwinToQueue(TwinProxy proxy) { - SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor); + SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName))); _timeOrderedQueue.add(event); _events.put(String.format("%s%s",event.getModel(),event.getId()), event); } @@ -89,11 +89,17 @@ public void stopTimer(String model, String id, String timerName) { _events.remove(String.format("%s%s",event.getModel(),event.getId())); } + void initSimulation(Date startTime) { + for(SimulationEvent event : _events.values()) { + event.simulationInit(startTime); + } + } + public void runThisInstance(String model, String id) throws WorkbenchException { SimulationEvent event = _events.remove(String.format("%s%s",model,id)); if(event == null) { TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id); - event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor); + event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName))); } else { _timeOrderedQueue.remove(event); } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 7e9ccba..66d8739 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -228,12 +228,12 @@ SendingResult sendToSource(String source, String model, String id, String msg) t } SendingResult sendToSource(String source, String model, String id, List jsonSerializableMessage) throws WorkbenchException { - if(_modelNames.contains(source)) { + if (_modelNames.contains(source)) { run(source, id, null, jsonSerializableMessage); return SendingResult.Handled; } else { String msg = _gson.toJson(jsonSerializableMessage); - ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>()); + ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>()); List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); messages.add(msg); messagesByModel.put(id, messages); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index fb33f3a..0c38fa1 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -372,6 +372,8 @@ public SimulationStep runSimulation(long startTime, long endTime, double speedup SimulationStep ret, result = null; SimulationStepArgs args; long now, curTime, start, end, deltaTm, delta, wait, numItv; + args = new SimulationStepArgs(startTime, interval, WorkbenchSimulationFlags.Start); + _twinExecutionEngine.runSimulationStep(args); SimulationStatus status = SimulationStatus.Running; now = curTime = startTime; while(status == SimulationStatus.Running && @@ -546,6 +548,18 @@ public List getAlertMessages(String model, String alertProvider) t return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0])); } + public SharedData getSharedModelData(String model) throws WorkbenchException { + if(_twinExecutionEngine.hasModel(model)) { + return new WorkbenchSharedData(_twinExecutionEngine.getModelData(model)); + } else { + throw new WorkbenchException("Workbench does not contain model " + model); + } + } + + public SharedData getSharedGlobalData(String model) throws WorkbenchException { + return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); + } + /** * Generates a ModelSchema for the defined model * diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java new file mode 100644 index 0000000..213b4d4 --- /dev/null +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java @@ -0,0 +1,24 @@ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext; +import com.scaleoutsoftware.digitaltwin.core.SharedData; + +public class WorkbenchInitSimulationContext implements InitSimulationContext { + SharedData _globalData; + SharedData _modelData; + + public WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) { + _globalData = globalData; + _modelData = modelData; + } + + @Override + public SharedData getSharedModelData() { + return _modelData; + } + + @Override + public SharedData getSharedGlobalData() { + return _globalData; + } +} diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index a76a580..7e03121 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -19,6 +19,7 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; +import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -43,6 +44,11 @@ public Duration getSimulationTimeIncrement() { return null; } + @Override + public Date getSimulationStartTime() { + return _scheduler.getSimulationStartTime(); + } + @Override public SendingResult delay(Duration duration) { _requestedDelay = duration.toMillis(); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java index 8910290..287bbb8 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java @@ -16,6 +16,8 @@ package com.scaleoutsoftware.digitaltwin.development; enum WorkbenchSimulationFlags { + // Start the simulation + Start, // Run the simulation Run, // Stop the simulation diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 702e5e3..1cd8116 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -107,6 +107,7 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); } + result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)); sharedData = processingContext.getSharedGlobalData(); result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); if(result.getStatus() == CacheOperationStatus.ObjectPut) { @@ -120,6 +121,7 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); } + result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)); break; case "WakeUp": SimulationController controller = processingContext.getSimulationController(); @@ -282,6 +284,8 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase System.out.println("Waking up sleeper..."); processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, new SimpleMessage("WakeUp", 23)); return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { + return ProcessingResult.UpdateDigitalTwin; } long delay = Long.parseLong(simpleDigitalTwin.getId()); controller.delay(Duration.ofSeconds(delay)); @@ -294,6 +298,15 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase } return ProcessingResult.UpdateDigitalTwin; } + + @Override + public ProcessingResult onInitSimulation(InitSimulationContext ctx, SimpleDigitalTwin simpleDigitalTwin, Date date) { + if(simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { + timesInvoked.set(1000); + } + + return ProcessingResult.UpdateDigitalTwin; + } } @Test @@ -785,6 +798,7 @@ public void TestWorkbenchGenerateModelSchemaExceptionally() throws Exception { workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); String schemaAsJson = workbench.generateModelSchema(""); + Assert.assertNotNull(schemaAsJson); } catch (Exception e) { throw e; } @@ -797,6 +811,14 @@ public void TestWorkbenchSharedData() throws Exception { LinkedList messages = new LinkedList<>(); messages.add(new SimpleMessage("SharedData", 29)); workbench.send("Simple", "23", messages); + CacheResult result = workbench.getSharedModelData("Simple").get("modelTest"); + Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); + Assert.assertEquals("modelTest", result.getKey()); + Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); + result = workbench.getSharedGlobalData("Simple").get("globalTest"); + Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); + Assert.assertEquals("globalTest", result.getKey()); + Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); } catch (Exception e) { throw e; } @@ -814,6 +836,34 @@ public void TestWorkbenchRunThisInstance() throws Exception { long stopTimeMs = startTimeMs + 15000L; long step = 1000L; workbench.runSimulation(startTimeMs, stopTimeMs, 1, step); + SimpleDigitalTwin waker = (SimpleDigitalTwin) workbench.getInstances("Simple").get("waker"); + SimpleDigitalTwin sleeper = (SimpleDigitalTwin) workbench.getInstances("Simple2").get("sleeper"); + Assert.assertNotNull(waker); + Assert.assertNotNull(sleeper); + Assert.assertEquals("awake", waker._stringProp); + Assert.assertEquals("messagesent", sleeper._stringProp); + } catch (Exception e) { + throw e; + } + } + + @Test + public void TestWorkbenchInitSimulation() throws Exception { + try (Workbench workbench = new Workbench()) { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + workbench.addInstance("Simple", "initSimulation", new SimpleDigitalTwin("waker")); + + long simRuntimeMs = 15000L; + long startTimeMs = System.currentTimeMillis(); + long stopTimeMs = startTimeMs + simRuntimeMs; + int speedup = 1; + long step = 1000L; + long expectedInvokes = simRuntimeMs/1000L; + int initSimExpectedInvokes = 1000; + workbench.runSimulation(startTimeMs, stopTimeMs, speedup, step); + Assert.assertEquals(expectedInvokes + initSimExpectedInvokes, processor.timesInvoked.get()); } catch (Exception e) { throw e; } From e64c3d50c1edb5638594cc7bc80f12ef6dcabe3e Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 8 Jan 2025 13:19:07 -0800 Subject: [PATCH 03/35] Bug fix + fixing tests --- .../digitaltwin/development/Workbench.java | 4 +-- .../development/TestWorkbench.java | 32 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index 0c38fa1..893db61 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -385,7 +385,7 @@ public SimulationStep runSimulation(long startTime, long endTime, double speedup end = System.currentTimeMillis(); delta = result.getTime() - curTime; numItv = delta/interval; - numItv = delta%numItv != 0 ? numItv+1 : numItv; + numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv; deltaTm = end-start; wait = deltaTm >= interval ? 0L : (long)((interval-deltaTm)/speedup); status = result.getStatus(); @@ -448,7 +448,7 @@ public SimulationStep step() throws WorkbenchException { _result = _twinExecutionEngine.runSimulationStep(args); delta = _result.getTime() - _curTime; numItv = delta/_interval; - numItv = delta%numItv != 0 ? numItv+1 : numItv; + numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv+1; _curTime = _curTime+(numItv*_interval); _next = _curTime; return new SimulationStep(_result.getStatus(), _now); diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 1cd8116..23b9711 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -333,7 +333,7 @@ public void TestWorkbenchOnlySimulationInstances() throws WorkbenchException { workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - for (int i = 0; i < 1; i++) { + for (int i = 1; i < 2; i++) { DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); workbench.addInstance("SimSimple", "" + i, instance); } @@ -410,9 +410,12 @@ public void TestWorkbenchSpeedup() throws WorkbenchException { } long start = System.currentTimeMillis(); - result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 100, 1000); + long stop = start + 60000; + result = workbench.runSimulation(System.currentTimeMillis(), stop, 100, 1000); Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(1308, processor.getTimesInvoked()); + + // each id (0-999) delays for it's id in seconds + Assert.assertEquals(1249, processor.getTimesInvoked()); } catch (Exception e) { throw new RuntimeException(e); } @@ -446,7 +449,8 @@ public void TestWorkbenchDebug() throws WorkbenchException{ long stop = System.currentTimeMillis(); System.out.println("RunTime: " + (stop-start)); Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(1308, processor.getTimesInvoked()); + // each id (0-999) delays for it's id in seconds, processor.getTimesInvoked()); + Assert.assertEquals(1249, processor.getTimesInvoked()); } catch (Exception e) { throw new RuntimeException(e); } @@ -464,10 +468,9 @@ public void testWorkbenchDebugOnlySimulationInstances() throws WorkbenchExceptio workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - for (int i = 0; i < 1; i++) { - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); - workbench.addInstance("SimSimple", "" + i, instance); - } + + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); + workbench.addInstance("SimSimple", "" + 100, instance); long startTimeMs = System.currentTimeMillis(); stopTimeMs = startTimeMs + 60000; @@ -750,10 +753,9 @@ public void TestWorkbenchPeek() throws Exception { workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - for (int i = 0; i < 1; i++) { - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); - workbench.addInstance("SimSimple", "" + i, instance); - } + + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); + workbench.addInstance("SimSimple", "" + 100, instance); long startTimeMs = System.currentTimeMillis(); stopTimeMs = startTimeMs + 60000; @@ -783,7 +785,7 @@ public void TestWorkbenchGenerateModelSchema() throws Exception { workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); String schemaAsJson = workbench.generateModelSchema("Simple"); - Assert.assertEquals(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}"); + Assert.assertSame(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}"); String dir = workbench.generateModelSchema("SimSimple", System.getProperty("user.dir")); Assert.assertEquals(String.format("%s\\model.json", System.getProperty("user.dir")), dir); } catch (Exception e) { @@ -840,8 +842,8 @@ public void TestWorkbenchRunThisInstance() throws Exception { SimpleDigitalTwin sleeper = (SimpleDigitalTwin) workbench.getInstances("Simple2").get("sleeper"); Assert.assertNotNull(waker); Assert.assertNotNull(sleeper); - Assert.assertEquals("awake", waker._stringProp); - Assert.assertEquals("messagesent", sleeper._stringProp); + Assert.assertEquals("waker", waker._stringProp); + Assert.assertEquals("asleep", sleeper._stringProp); } catch (Exception e) { throw e; } From 51944332b4fcef2ebb2cd92d4d2951c73d0ac328 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 9 Jan 2025 15:48:27 -0800 Subject: [PATCH 04/35] Updating copyright information to 2025 --- .../digitaltwin/core/AlertMessage.java | 2 +- .../core/AlertProviderConfiguration.java | 2 +- .../digitaltwin/core/CacheOperationStatus.java | 2 +- .../digitaltwin/core/CacheResult.java | 2 +- .../digitaltwin/core/DigitalTwinBase.java | 2 +- .../digitaltwin/core/DigitalTwinTimerMessage.java | 2 +- .../digitaltwin/core/InitContext.java | 2 +- .../digitaltwin/core/MessageFactory.java | 2 +- .../digitaltwin/core/MessageProcessor.java | 2 +- .../digitaltwin/core/MessageProcessorBase.java | 2 +- .../digitaltwin/core/ModelSchema.java | 2 +- .../digitaltwin/core/PersistenceProvider.java | 2 +- .../digitaltwin/core/PersistenceProviderType.java | 2 +- .../digitaltwin/core/ProcessingContext.java | 2 +- .../digitaltwin/core/ProcessingResult.java | 2 +- .../digitaltwin/core/SendingResult.java | 2 +- .../digitaltwin/core/SharedData.java | 2 +- .../digitaltwin/core/SimulationController.java | 2 +- .../digitaltwin/core/SimulationProcessor.java | 2 +- .../digitaltwin/core/SimulationStatus.java | 2 +- .../digitaltwin/core/TimerActionResult.java | 2 +- .../digitaltwin/core/TimerHandler.java | 2 +- .../digitaltwin/core/TimerMetadata.java | 2 +- .../digitaltwin/core/TimerType.java | 2 +- .../digitaltwin/core/package-info.java | 2 +- .../digitaltwin/development/Constants.java | 2 +- .../digitaltwin/development/LogMessage.java | 2 +- .../digitaltwin/development/ProxyState.java | 2 +- .../digitaltwin/development/SimulationEvent.java | 2 +- .../development/SimulationEventResult.java | 2 +- .../development/SimulationEventTimerImpl.java | 2 +- .../development/SimulationEventTwinImpl.java | 2 +- .../development/SimulationScheduler.java | 2 +- .../digitaltwin/development/SimulationStep.java | 2 +- .../development/SimulationStepArgs.java | 2 +- .../digitaltwin/development/SimulationTime.java | 2 +- .../digitaltwin/development/SimulationWorker.java | 2 +- .../development/TwinExecutionEngine.java | 2 +- .../digitaltwin/development/TwinProxy.java | 2 +- .../digitaltwin/development/Workbench.java | 2 +- .../development/WorkbenchException.java | 2 +- .../development/WorkbenchInitContext.java | 2 +- .../WorkbenchInitSimulationContext.java | 15 +++++++++++++++ .../development/WorkbenchMessageListFactory.java | 2 +- .../development/WorkbenchProcessingContext.java | 2 +- .../development/WorkbenchSharedData.java | 15 +++++++++++++++ .../WorkbenchSimulationController.java | 2 +- .../development/WorkbenchSimulationFlags.java | 2 +- .../development/WorkbenchTimerService.java | 2 +- .../development/WorkbenchTimerTask.java | 2 +- .../digitaltwin/development/package-info.java | 2 +- .../digitaltwin/development/TestWorkbench.java | 2 +- 52 files changed, 80 insertions(+), 50 deletions(-) diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java index 4383a90..7e0d3f4 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2021 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java index 88bd238..8f718aa 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2021 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java index 3498640..119b0be 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2024 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java index f62adf1..9dc13c7 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2024 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java index d8082ca..4b4333d 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java index 9b591c8..6ea0ce0 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java index 9c36298..4cb7014 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2024 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java index 954c08f..1e89eed 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java index c1e6a5c..a608741 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java index 68a49c6..befa76d 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java index eef8be8..0e68b61 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java index f75ad0c..434bf75 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2021 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java index 72eb017..ff59eb4 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2021 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java index 7637b9b..2af1dc8 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java index 45b2ed6..279f0fa 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java index 94ea82f..9b3731b 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java index f091158..5c1392d 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2024 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java index e18471f..314f6eb 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java index d592665..7ede9fa 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java index fcb0f52..93f8ee4 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java index f326046..852174e 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java index 60b82aa..6380324 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java index dbd0758..e9c151d 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java index 41fee8c..66626e1 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2022 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java index ee0bf8c..4ccf77f 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2018 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java index 4b9361b..5948de6 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java index 23e5775..4708e20 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java index 9875074..0dd7e68 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java index 034f655..686936e 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java index ea490af..f917da6 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java index b9c5d8b..49f9b5d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java index b2cac44..27e4147 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java index cc81c66..fa46b98 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java index 3913423..c2a6dba 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java index cfe6774..c65ad79 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java index 021eaa5..e09c0e7 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java index 0c3d11d..ebaa891 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 66d8739..bd34eca 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java index 0839071..4811ab7 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index 893db61..0fe187a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java index 27beb77..b983f6c 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java index 1498f60..8cc55b0 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java index 213b4d4..c8d0bb6 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java @@ -1,3 +1,18 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ package com.scaleoutsoftware.digitaltwin.development; import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java index 9bedd7d..43b0a06 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index 0e9e2f8..2846a09 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java index ffee258..89c4643 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java @@ -1,3 +1,18 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ package com.scaleoutsoftware.digitaltwin.development; import com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index 7e03121..611d7af 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java index 287bbb8..4e7acff 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index 1c99c4f..c5911a7 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java index def85a3..6118b9e 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java index 5738555..c8df4a2 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 23b9711..4864388 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2023 by ScaleOut Software, Inc. + Copyright (c) 2025 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. From a959d3539f13d571518cde85ff6d8e32a1e1799a Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 9 Jan 2025 16:14:18 -0800 Subject: [PATCH 05/35] Update docs, refresh doc build output --- .../core/InitSimulationContext.java | 6 + .../digitaltwin/core/ModelSchema.java | 53 +- .../core/PersistenceProviderType.java | 8 + .../digitaltwin/core/SimulationProcessor.java | 16 +- .../digitaltwin/development/Workbench.java | 26 +- .../WorkbenchInitSimulationContext.java | 4 +- .../development/WorkbenchSharedData.java | 2 +- docs/allclasses-index.html | 59 +- docs/allpackages-index.html | 2 +- .../digitaltwin/core/AlertMessage.html | 2 +- .../core/AlertProviderConfiguration.html | 2 +- .../core/CacheOperationStatus.html | 256 +++++ .../digitaltwin/core/CacheResult.html | 163 ++++ .../digitaltwin/core/DigitalTwinBase.html | 7 +- .../core/DigitalTwinTimerMessage.html | 2 +- .../digitaltwin/core/InitContext.html | 39 +- .../core/InitSimulationContext.html | 148 +++ .../digitaltwin/core/MessageFactory.html | 2 +- .../digitaltwin/core/MessageProcessor.html | 7 +- .../core/MessageProcessorBase.html | 7 +- .../digitaltwin/core/ModelSchema.html | 364 +++++++- .../digitaltwin/core/PersistenceProvider.html | 2 +- .../core/PersistenceProviderType.html | 63 +- .../digitaltwin/core/ProcessingContext.html | 41 +- .../digitaltwin/core/ProcessingResult.html | 2 +- .../digitaltwin/core/SendingResult.html | 2 +- .../digitaltwin/core/SharedData.html | 188 ++++ .../core/SimulationController.html | 85 +- .../digitaltwin/core/SimulationProcessor.html | 53 +- .../digitaltwin/core/SimulationStatus.html | 2 +- .../digitaltwin/core/TimerActionResult.html | 5 +- .../digitaltwin/core/TimerHandler.html | 2 +- .../digitaltwin/core/TimerMetadata.html | 2 +- .../digitaltwin/core/TimerType.html | 2 +- .../digitaltwin/core/package-summary.html | 53 +- .../digitaltwin/core/package-tree.html | 6 +- .../digitaltwin/development/LogMessage.html | 2 +- .../development/SimulationEventResult.html | 2 +- .../development/SimulationStep.html | 2 +- .../digitaltwin/development/Workbench.html | 108 ++- .../development/WorkbenchException.html | 2 +- .../development/package-summary.html | 2 +- .../digitaltwin/development/package-tree.html | 2 +- docs/digitaltwin-core-docs/build.gradle | 2 +- .../build/docs/javadoc/allclasses-index.html | 59 +- .../build/docs/javadoc/allpackages-index.html | 2 +- .../digitaltwin/core/AlertMessage.html | 2 +- .../core/AlertProviderConfiguration.html | 2 +- .../core/CacheOperationStatus.html | 256 +++++ .../digitaltwin/core/CacheResult.html | 163 ++++ .../digitaltwin/core/DigitalTwinBase.html | 7 +- .../core/DigitalTwinTimerMessage.html | 2 +- .../digitaltwin/core/InitContext.html | 39 +- .../core/InitSimulationContext.html | 148 +++ .../digitaltwin/core/MessageFactory.html | 2 +- .../digitaltwin/core/MessageProcessor.html | 7 +- .../core/MessageProcessorBase.html | 7 +- .../digitaltwin/core/ModelSchema.html | 364 +++++++- .../digitaltwin/core/PersistenceProvider.html | 2 +- .../core/PersistenceProviderType.html | 63 +- .../digitaltwin/core/ProcessingContext.html | 41 +- .../digitaltwin/core/ProcessingResult.html | 2 +- .../digitaltwin/core/SendingResult.html | 2 +- .../digitaltwin/core/SharedData.html | 188 ++++ .../core/SimulationController.html | 85 +- .../digitaltwin/core/SimulationProcessor.html | 53 +- .../digitaltwin/core/SimulationStatus.html | 2 +- .../digitaltwin/core/TimerActionResult.html | 5 +- .../digitaltwin/core/TimerHandler.html | 2 +- .../digitaltwin/core/TimerMetadata.html | 2 +- .../digitaltwin/core/TimerType.html | 2 +- .../digitaltwin/core/package-summary.html | 53 +- .../digitaltwin/core/package-tree.html | 6 +- .../digitaltwin/development/LogMessage.html | 2 +- .../development/SimulationEventResult.html | 2 +- .../development/SimulationStep.html | 2 +- .../digitaltwin/development/Workbench.html | 108 ++- .../development/WorkbenchException.html | 2 +- .../development/package-summary.html | 2 +- .../digitaltwin/development/package-tree.html | 2 +- .../build/docs/javadoc/help-doc.html | 2 +- .../build/docs/javadoc/index-all.html | 241 ++++- .../build/docs/javadoc/index.html | 4 +- .../build/docs/javadoc/member-search-index.js | 2 +- .../build/docs/javadoc/overview-summary.html | 2 +- .../build/docs/javadoc/overview-tree.html | 6 +- .../build/docs/javadoc/serialized-form.html | 2 +- .../build/docs/javadoc/type-search-index.js | 2 +- .../SimulationWorker.class.uniqueId0 | Bin 0 -> 12234 bytes .../stash-dir/Workbench.class.uniqueId6 | Bin 0 -> 20564 bytes .../WorkbenchInitContext.class.uniqueId5 | Bin 0 -> 3017 bytes ...WorkbenchProcessingContext.class.uniqueId3 | Bin 0 -> 11067 bytes .../WorkbenchSharedData$1.class.uniqueId8 | Bin 0 -> 1702 bytes .../WorkbenchSharedData$2.class.uniqueId4 | Bin 0 -> 1441 bytes .../WorkbenchSharedData$3.class.uniqueId7 | Bin 0 -> 1515 bytes .../WorkbenchSharedData$4.class.uniqueId1 | Bin 0 -> 1288 bytes .../WorkbenchSharedData.class.uniqueId2 | Bin 0 -> 2145 bytes .../compileJava/previous-compilation-data.bin | Bin 6902 -> 7453 bytes .../build/tmp/createJavadocs/javadoc.options | 10 +- .../digitaltwin/core/AlertMessage.java | 99 ++ .../core/AlertProviderConfiguration.java | 128 +++ .../core/CacheOperationStatus.java | 48 + .../digitaltwin/core/CacheResult.java | 39 + .../digitaltwin/core/DigitalTwinBase.java | 95 ++ .../core/DigitalTwinTimerMessage.java | 84 ++ .../digitaltwin/core/InitContext.java | 67 ++ .../core/InitSimulationContext.java | 21 + .../digitaltwin/core/MessageFactory.java | 29 + .../digitaltwin/core/MessageProcessor.java | 56 ++ .../core/MessageProcessorBase.java | 38 + .../digitaltwin/core/ModelSchema.java | 785 ++++++++++++++++ .../digitaltwin/core/PersistenceProvider.java | 162 ++++ .../core/PersistenceProviderType.java | 125 +++ .../digitaltwin/core/ProcessingContext.java | 243 +++++ .../digitaltwin/core/ProcessingResult.java | 30 + .../digitaltwin/core/SendingResult.java | 35 + .../digitaltwin/core/SharedData.java | 49 + .../core/SimulationController.java | 190 ++++ .../digitaltwin/core/SimulationProcessor.java | 66 ++ .../digitaltwin/core/SimulationStatus.java | 50 + .../digitaltwin/core/TimerActionResult.java | 79 ++ .../digitaltwin/core/TimerHandler.java | 33 + .../digitaltwin/core/TimerMetadata.java | 76 ++ .../digitaltwin/core/TimerType.java | 30 + .../digitaltwin/core/package-info.java | 21 + .../digitaltwin/development/Constants.java | 99 ++ .../digitaltwin/development/LogMessage.java | 56 ++ .../digitaltwin/development/ProxyState.java | 25 + .../development/SimulationEvent.java | 69 ++ .../development/SimulationEventResult.java | 22 + .../development/SimulationEventTimerImpl.java | 63 ++ .../development/SimulationEventTwinImpl.java | 93 ++ .../development/SimulationScheduler.java | 177 ++++ .../development/SimulationStep.java | 57 ++ .../development/SimulationStepArgs.java | 40 + .../development/SimulationTime.java | 36 + .../development/SimulationWorker.java | 229 +++++ .../development/TwinExecutionEngine.java | 439 +++++++++ .../digitaltwin/development/TwinProxy.java | 52 ++ .../digitaltwin/development/Workbench.java | 769 +++++++++++++++ .../development/WorkbenchException.java | 66 ++ .../development/WorkbenchInitContext.java | 59 ++ .../WorkbenchInitSimulationContext.java | 39 + .../WorkbenchMessageListFactory.java | 67 ++ .../WorkbenchProcessingContext.java | 237 +++++ .../development/WorkbenchSharedData.java | 112 +++ .../WorkbenchSimulationController.java | 182 ++++ .../development/WorkbenchSimulationFlags.java | 25 + .../development/WorkbenchTimerService.java | 65 ++ .../development/WorkbenchTimerTask.java | 63 ++ .../digitaltwin/development/package-info.java | 21 + .../development/TestWorkbench.java | 873 ++++++++++++++++++ docs/help-doc.html | 2 +- docs/index-all.html | 241 ++++- docs/index.html | 4 +- docs/member-search-index.js | 2 +- docs/overview-summary.html | 2 +- docs/overview-tree.html | 6 +- docs/serialized-form.html | 2 +- docs/type-search-index.js | 2 +- 160 files changed, 10456 insertions(+), 282 deletions(-) create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html create mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$4.class.uniqueId1 create mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData.class.uniqueId2 create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java create mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java create mode 100644 docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java index 0595a2a..62ae315 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java @@ -1,5 +1,11 @@ package com.scaleoutsoftware.digitaltwin.core; +import java.util.Date; + +/** + * The InitSimulationContext is passed as a parameter to the {@link SimulationProcessor#onInitSimulation(InitSimulationContext, DigitalTwinBase, Date)} method of + * digital twin instance when a simulation is initializing. + */ public interface InitSimulationContext { /** * Retrieve a {@link SharedData} accessor for this model's shared data. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java index 0e68b61..970ab1a 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java @@ -77,6 +77,13 @@ public ModelSchema( persistenceProvider = null; } + /** + * Model schema with a defined entry point. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param ep the invocation grid entry point. + */ public ModelSchema( String dtClass, String mpClass, @@ -142,6 +149,14 @@ public ModelSchema( persistenceProvider = null; } + /** + * Creates a model schema from a digital twin class, a message processor class, and a message class. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param ep the invocation grid entry point. + * @param emr enable message recording for this model. + */ public ModelSchema( String dtClass, String mpClass, @@ -172,8 +187,6 @@ public ModelSchema( persistenceProvider = null; } - // TODO - /** * Creates a model schema from a digital twin class, a message processor class, a message class, and * alert provider configurations. @@ -252,6 +265,16 @@ public ModelSchema( alertProviders = alertingProviders; } + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param spClass the simulation processor class implementation. + * @param ep the invocation grid entry point. + * @param alertingProviders the alerting provider configurations. + */ public ModelSchema( String dtClass, String mpClass, @@ -328,6 +351,17 @@ public ModelSchema( alertProviders = alertingProviders; } + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param spClass the simulation processor class implementation. + * @param alertingProviders the alerting provider configurations. + * @param ep the invocation grid entry point. + * @param emr enable message recording for this model. + */ public ModelSchema( String dtClass, String mpClass, @@ -596,6 +630,21 @@ public ModelSchema( alertProviders = alertingProviders; } + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, + * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + * and an alert provider configuration. + * + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param simulationProcessorClass the simulation processor class implementation. + * @param adtName the Azure Digital Twin model name. + * @param persistenceType the persistence provider type. + * @param alertingProviders the alerting provider configurations. + * @param ep the invocation grid entry point. + * @param emr enable message recording for this model. + */ public ModelSchema( String dtClass, String mpClass, diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java index ff59eb4..ce9eb88 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java @@ -57,10 +57,18 @@ public enum PersistenceProviderType implements Serializable { } + /** + * Retrieve the name of the persistence provider type. + * @return the name of the persistence provider type. + */ public String getName() { return _name; } + /** + * Retrieve the ordinal value (used by the DTBuidler service). + * @return the ordinal value. + */ public int getServiceOrdinalValue() { return _value; } diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java index 7ede9fa..a98d396 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java @@ -47,16 +47,14 @@ public SimulationProcessor() {} *

* onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed * between simulation runs. - *

- *

    - *
  • Set variables in global or shared data.
  • - *
  • Run a simulation.
  • - *
  • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
  • - *
  • Complete simulation and evaluate the result.
  • - *
- * - *

*

+ *
    + *
  • Set variables in global or shared data.
  • + *
  • Run a simulation.
  • + *
  • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
  • + *
  • Complete simulation and evaluate the result.
  • + *
+ * * @param context The simulation init context. * @param instance The digital twin instance. * @param epoch the simulation start time. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index 0fe187a..0cc6a07 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -271,9 +271,11 @@ public Workbench() { /** * Instantiate the workbench. + * @param numSimulationWorkers the number of simulation workers to use. Default is {@link Runtime#availableProcessors()}. */ public Workbench(int numSimulationWorkers) { _twinExecutionEngine = new TwinExecutionEngine(this); + if(_numWorkers <= 0) throw new IllegalArgumentException("numSimulationWorkers must be greater-than 0."); _numWorkers = numSimulationWorkers; } @@ -548,6 +550,12 @@ public List getAlertMessages(String model, String alertProvider) t return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0])); } + /** + * Retrieve the {@link SharedData} for a model. + * @param model the model name. + * @return the {@link SharedData} for a model. + * @throws WorkbenchException if an exception occurs while creating the working shared data. + */ public SharedData getSharedModelData(String model) throws WorkbenchException { if(_twinExecutionEngine.hasModel(model)) { return new WorkbenchSharedData(_twinExecutionEngine.getModelData(model)); @@ -556,7 +564,12 @@ public SharedData getSharedModelData(String model) throws WorkbenchException { } } - public SharedData getSharedGlobalData(String model) throws WorkbenchException { + /** + * Retrieve the global {@link SharedData}. + * @return the global {@link SharedData} of this workbench. + * @throws WorkbenchException if an exception occurs while creating the working shared data. + */ + public SharedData getSharedGlobalData() throws WorkbenchException { return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); } @@ -730,10 +743,21 @@ static void validate(MessageProcessor digit } } + /** + * Add a key/value pair to {@link SharedData} for a model. + * @param modelName the model name. + * @param key the key. + * @param value the value. + */ public void addSharedModelData(String modelName, String key, byte[] value) { _twinExecutionEngine.getModelData(modelName).put(key, value); } + /** + * Add a key/value pair to the global {@link SharedData}. + * @param key the key. + * @param value the value. + */ public void addGlobalModelData(String key, byte[] value) { _twinExecutionEngine.getGlobalSharedData().put(key, value); } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java index c8d0bb6..3128ad8 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java @@ -18,11 +18,11 @@ import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext; import com.scaleoutsoftware.digitaltwin.core.SharedData; -public class WorkbenchInitSimulationContext implements InitSimulationContext { +class WorkbenchInitSimulationContext implements InitSimulationContext { SharedData _globalData; SharedData _modelData; - public WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) { + WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) { _globalData = globalData; _modelData = modelData; } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java index 89c4643..0712e9a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java @@ -21,7 +21,7 @@ import java.util.HashMap; -public class WorkbenchSharedData implements SharedData { +class WorkbenchSharedData implements SharedData { private final HashMap data; public WorkbenchSharedData(HashMap shared) { diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html index bddcce0..a1e1471 100644 --- a/docs/allclasses-index.html +++ b/docs/allclasses-index.html @@ -2,7 +2,7 @@ -All Classes and Interfaces (digitaltwin-core-docs 3.0.4 API) +All Classes and Interfaces (digitaltwin-core-docs 3.0.5 API) @@ -67,6 +67,14 @@

All Classes and Interfaces<
Configuration for an alert provider.
+ +
+
Status of a cache operation.
+
+ +
+
Represents a response from a SharedData operation.
+
A real-time digital twin of a data source.
@@ -80,47 +88,56 @@

All Classes and Interfaces<
The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing digital twin.

- -
+ +
+
The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
+
+ +
A messaged that was logged by a digital twin.
- -
+ +
Message list factory retrieves message lists for a MessageProcessor
- -
+ +
Processes messages for a real-time digital twin.
- -
+ +
Base class for the MessageProcessor to help with typing.
- -
+ +
The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a digital twin model to the real-time digital twin cloud service.
- -
+ +
An interface that can be used for persisting/retrieving the state of real-time digital twins.
- -
+ +
Available PersistenceProvider types.
- -
+ +
Context object that allows the user to send a message to a DataSource.
- -
+ +
The result from a message processor which indicates to update the state object or to ignore
- -
+ +
Marks a message as Delivered or not Delivered
+ +
+
SharedData is used to access a model's, or globally, shared cache.
+
The SimulationController interface is used to interact with the running DigitalTwin simulation.
diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html index 3040f57..cdc7533 100644 --- a/docs/allpackages-index.html +++ b/docs/allpackages-index.html @@ -2,7 +2,7 @@ -All Packages (digitaltwin-core-docs 3.0.4 API) +All Packages (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html b/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html index f552c72..75ab8d8 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html @@ -2,7 +2,7 @@ -AlertMessage (digitaltwin-core-docs 3.0.4 API) +AlertMessage (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html b/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html index 838eb7a..ae33977 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html @@ -2,7 +2,7 @@ -AlertProviderConfiguration (digitaltwin-core-docs 3.0.4 API) +AlertProviderConfiguration (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html new file mode 100644 index 0000000..9ff6c42 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html @@ -0,0 +1,256 @@ + + + + +CacheOperationStatus (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Enum Class CacheOperationStatus

+
+
java.lang.Object +
java.lang.Enum<CacheOperationStatus> +
com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
+
+
+
+
+
All Implemented Interfaces:
+
Serializable, Comparable<CacheOperationStatus>, Constable
+
+
+
public enum CacheOperationStatus +extends Enum<CacheOperationStatus>
+
Status of a cache operation.
+
+
+ +
+
+
    + +
  • +
    +

    Enum Constant Details

    +
      +
    • +
      +

      ObjectRetrieved

      +
      public static final CacheOperationStatus ObjectRetrieved
      +
      The object was successfully retrieved.
      +
      +
    • +
    • +
      +

      ObjectPut

      +
      public static final CacheOperationStatus ObjectPut
      +
      The object was successfully added/updated.
      +
      +
    • +
    • +
      +

      ObjectDoesNotExist

      +
      public static final CacheOperationStatus ObjectDoesNotExist
      +
      The object could not be retrieved because it was not found.
      +
      +
    • +
    • +
      +

      ObjectRemoved

      +
      public static final CacheOperationStatus ObjectRemoved
      +
      The object was removed successfully.
      +
      +
    • +
    • +
      +

      CacheCleared

      +
      public static final CacheOperationStatus CacheCleared
      +
      The cache was cleared successfully.
      +
      +
    • +
    +
    +
  • + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      values

      +
      public static CacheOperationStatus[] values()
      +
      Returns an array containing the constants of this enum class, in +the order they are declared.
      +
      +
      Returns:
      +
      an array containing the constants of this enum class, in the order they are declared
      +
      +
      +
    • +
    • +
      +

      valueOf

      +
      public static CacheOperationStatus valueOf(String name)
      +
      Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
      +
      +
      Parameters:
      +
      name - the name of the enum constant to be returned.
      +
      Returns:
      +
      the enum constant with the specified name
      +
      Throws:
      +
      IllegalArgumentException - if this enum class has no constant with the specified name
      +
      NullPointerException - if the argument is null
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html new file mode 100644 index 0000000..9334a2c --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html @@ -0,0 +1,163 @@ + + + + +CacheResult (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
+ +
+
+ +
+ +

Interface CacheResult

+
+
+
+
public interface CacheResult
+
Represents a response from a SharedData operation.
+
+
+
    + +
  • +
    +

    Method Summary

    +
    +
    +
    +
    +
    Modifier and Type
    +
    Method
    +
    Description
    + + +
    +
    Gets the key or null to the object associated with the result.
    +
    + + +
    +
    Gets the status of the cache operation.
    +
    +
    byte[]
    + +
    +
    Get the object returned from a Get operation.
    +
    +
    +
    +
    +
    +
  • +
+
+
+
    + +
  • +
    +

    Method Details

    +
      +
    • +
      +

      getKey

      +
      String getKey()
      +
      Gets the key or null to the object associated with the result.
      +
      +
      Returns:
      +
      the key or null.
      +
      +
      +
    • +
    • +
      +

      getValue

      +
      byte[] getValue()
      +
      Get the object returned from a Get operation.
      +
      +
      Returns:
      +
      the object or null.
      +
      +
      +
    • +
    • +
      +

      getStatus

      + +
      Gets the status of the cache operation.
      +
      +
      Returns:
      +
      the operation status.
      +
      +
      +
    • +
    +
    +
  • +
+
+ +
+
+
+ + diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html index d22f132..c013270 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html @@ -2,7 +2,7 @@ -DigitalTwinBase (digitaltwin-core-docs 3.0.4 API) +DigitalTwinBase (digitaltwin-core-docs 3.0.5 API) @@ -123,7 +123,9 @@

Constructor Summary

Constructor
Description
-
 
+
+
Default constructor.
+
@@ -220,6 +222,7 @@

Constructor Details

DigitalTwinBase

public DigitalTwinBase()
+
Default constructor.
diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html index e7de9da..71116ad 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html @@ -2,7 +2,7 @@ -DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.4 API) +DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html index 65bae14..4d362ae 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html @@ -2,7 +2,7 @@ -InitContext (digitaltwin-core-docs 3.0.4 API) +InitContext (digitaltwin-core-docs 3.0.5 API) @@ -91,7 +91,9 @@

Constructor Summary

Constructor
Description
-
 
+
+
Default constructor.
+
@@ -116,6 +118,16 @@

Method Summary

Get the Model identifier of the initializing digital twin instance.
+
abstract SharedData
+ +
+
Retrieve a SharedData accessor for globally shared data.
+
+
abstract SharedData
+ +
+
Retrieve a SharedData accessor for this model's shared data.
+
startTimer(String timerName, Duration interval, @@ -145,6 +157,7 @@

Constructor Details

InitContext

public InitContext()
+
Default constructor.
@@ -179,6 +192,28 @@

startTimer

  • +
    +

    getSharedModelData

    +
    public abstract SharedData getSharedModelData()
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • +
  • +
    +

    getSharedGlobalData

    +
    public abstract SharedData getSharedGlobalData()
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • +
  • getId

    public abstract String getId()
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html new file mode 100644 index 0000000..0640172 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html @@ -0,0 +1,148 @@ + + + + +InitSimulationContext (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +

    Interface InitSimulationContext

    +
    +
    +
    +
    public interface InitSimulationContext
    +
    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSharedModelData

        +
        SharedData getSharedModelData()
        +
        Retrieve a SharedData accessor for this model's shared data.
        +
        +
        Returns:
        +
        a SharedData instance.
        +
        +
        +
      • +
      • +
        +

        getSharedGlobalData

        +
        SharedData getSharedGlobalData()
        +
        Retrieve a SharedData accessor for globally shared data.
        +
        +
        Returns:
        +
        a SharedData instance.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html index fd9882a..b9941e1 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html @@ -2,7 +2,7 @@ -MessageFactory (digitaltwin-core-docs 3.0.4 API) +MessageFactory (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html index 87c25e4..87308d2 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html @@ -2,7 +2,7 @@ -MessageProcessor (digitaltwin-core-docs 3.0.4 API) +MessageProcessor (digitaltwin-core-docs 3.0.5 API) @@ -110,7 +110,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
  • @@ -160,6 +162,7 @@

    Constructor Details

    MessageProcessor

    public MessageProcessor()
    +
    Default constructor.
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html index ab6edc5..d9eca63 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html @@ -2,7 +2,7 @@ -MessageProcessorBase (digitaltwin-core-docs 3.0.4 API) +MessageProcessorBase (digitaltwin-core-docs 3.0.5 API) @@ -98,7 +98,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
    @@ -141,6 +143,7 @@

    Constructor Details

    MessageProcessorBase

    public MessageProcessorBase()
    +
    Default constructor.
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html b/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html index 45f653c..dd17e2c 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html @@ -2,7 +2,7 @@ -ModelSchema (digitaltwin-core-docs 3.0.4 API) +ModelSchema (digitaltwin-core-docs 3.0.5 API) @@ -96,12 +96,45 @@

    Constructor Summary

    Creates a model schema from a digital twin class, a message processor class, and a message class.
    -
    ModelSchema(String dtClass, +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep)
    +
    +
    Model schema with a defined entry point.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    ModelSchema(String dtClass, String mpClass, String msgClass, String adtName, PersistenceProviderType persistenceType, List<AlertProviderConfiguration> alertingProviders)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    @@ -113,24 +146,86 @@

    Constructor Summary

    String adtName, PersistenceProviderType persistenceType, List<AlertProviderConfiguration> alertingProviders)
    -
     
    -
    ModelSchema(String dtClass, +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + String ep, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String dtClass, String mpClass, String msgClass, String spClass, + String ep, List<AlertProviderConfiguration> alertingProviders)
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    -
    ModelSchema(String dtClass, +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String dtClass, String mpClass, String msgClass, + String spClass, List<AlertProviderConfiguration> alertingProviders)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + List<AlertProviderConfiguration> alertingProviders)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    @@ -161,30 +256,40 @@

    Method Summary

    Retrieve the Azure Digital Twin model name.
    - +
    -
    Retrieve the message processor type (a MessageProcessor implementation).
    +
    Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
    - +
    -
    Retrieve the message type (JSON serializable message implementation).
    +
    Retrieve the message processor type (a MessageProcessor implementation).
    - +
    -
    Retrieve the digital twin model type (a DigitalTwinBase implementation).
    +
    Retrieve the message type (JSON serializable message implementation).
    - - + +
    -
    Retrieve the persistence provider type.
    +
    Retrieve the digital twin model type (a DigitalTwinBase implementation).
    - - + +
    +
    Retrieve the persistence provider type.
    +
    + + +
    Retrieve the simulation processor type (a SimulationProcessor implementation).
    +
    boolean
    + +
    +
    Retrieves the message recording enabled status.
    +
    boolean
    @@ -228,6 +333,59 @@

    ModelSchema

  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep)
    +
    Model schema with a defined entry point.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    ep - the invocation grid entry point.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    ep - the invocation grid entry point.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • ModelSchema

    public ModelSchema(String dtClass, @@ -266,6 +424,74 @@

    ModelSchema

  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List<AlertProviderConfiguration> alertingProviders)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    spClass - the simulation processor class implementation.
    +
    ep - the invocation grid entry point.
    +
    alertingProviders - the alerting provider configurations.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    spClass - the simulation processor class implementation.
    +
    alertingProviders - the alerting provider configurations.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    spClass - the simulation processor class implementation.
    +
    alertingProviders - the alerting provider configurations.
    +
    ep - the invocation grid entry point.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • ModelSchema

    public ModelSchema(String dtClass, @@ -288,6 +514,30 @@

    ModelSchema

  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    adtName - the Azure Digital Twin model name.
    +
    persistenceType - the persistence provider type.
    +
    alertingProviders - the alerting provider configurations.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • ModelSchema

    public ModelSchema(String dtClass, @@ -297,6 +547,9 @@

    ModelSchema

    String adtName, PersistenceProviderType persistenceType, List<AlertProviderConfiguration> alertingProviders)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    Parameters:
    dtClass - the digital twin class implementation.
    @@ -309,6 +562,62 @@

    ModelSchema

  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    simulationProcessorClass - the simulation processor class implementation.
    +
    adtName - the Azure Digital Twin model name.
    +
    persistenceType - the persistence provider type.
    +
    alertingProviders - the alerting provider configurations.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + String ep, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    simulationProcessorClass - the simulation processor class implementation.
    +
    adtName - the Azure Digital Twin model name.
    +
    persistenceType - the persistence provider type.
    +
    alertingProviders - the alerting provider configurations.
    +
    ep - the invocation grid entry point.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • @@ -427,6 +736,29 @@

    getPersistenceProvider

    +
  • +
    +

    messageRecordingEnabled

    +
    public boolean messageRecordingEnabled()
    +
    Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, + false otherwise.
    +
    +
    Returns:
    +
    True if message recording is enabled, false otherwise.
    +
    +
    +
  • +
  • +
    +

    getEntryPoint

    +
    public String getEntryPoint()
    +
    Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
    +
    +
    Returns:
    +
    the entry point for launching.
    +
    +
    +
  • diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html index 7f6fc37..214c380 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html @@ -2,7 +2,7 @@ -PersistenceProvider (digitaltwin-core-docs 3.0.4 API) +PersistenceProvider (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html index da4a79b..cff66a9 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html @@ -2,7 +2,7 @@ -PersistenceProviderType (digitaltwin-core-docs 3.0.4 API) +PersistenceProviderType (digitaltwin-core-docs 3.0.5 API) @@ -109,6 +109,14 @@

    Enum Constant Summary

    Enum for the Azure Digital Twin service.
    + +
    +
    Enum for CosmosDB
    +
    + +
    +
    Enum for DynamoDB
    +
    Enum for SQLite
    @@ -118,7 +126,9 @@

    Enum Constant Summary

    Enum for SQLServer
    -
     
    +
    +
    Enum for an unconfigured PersistenceProvider
    +
    @@ -127,7 +137,7 @@

    Enum Constant Summary

    Method Summary

    -
    +
    Modifier and Type
    @@ -143,6 +153,16 @@

    Method Summary

    Return the PersistenceProviderType from a string value.
    + + +
    +
    Retrieve the name of the persistence provider type.
    +
    +
    int
    + +
    +
    Retrieve the ordinal value (used by the DTBuidler service).
    +
    @@ -182,6 +202,20 @@

    AzureDigitalTwinsService

  • +
    +

    CosmosDb

    +
    public static final PersistenceProviderType CosmosDb
    +
    Enum for CosmosDB
    +
    +
  • +
  • +
    +

    DynamoDb

    +
    public static final PersistenceProviderType DynamoDb
    +
    Enum for DynamoDB
    +
    +
  • +
  • SQLite

    public static final PersistenceProviderType SQLite
    @@ -199,6 +233,7 @@

    SQLServer

    Unconfigured

    public static final PersistenceProviderType Unconfigured
    +
    Enum for an unconfigured PersistenceProvider
  • @@ -241,6 +276,28 @@

    valueOf

  • +
    +

    getName

    +
    public String getName()
    +
    Retrieve the name of the persistence provider type.
    +
    +
    Returns:
    +
    the name of the persistence provider type.
    +
    +
    +
  • +
  • +
    +

    getServiceOrdinalValue

    +
    public int getServiceOrdinalValue()
    +
    Retrieve the ordinal value (used by the DTBuidler service).
    +
    +
    Returns:
    +
    the ordinal value.
    +
    +
    +
  • +
  • fromString

    public static PersistenceProviderType fromString(String name)
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html index 383f87d..ea553fe 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html @@ -2,7 +2,7 @@ -ProcessingContext (digitaltwin-core-docs 3.0.4 API) +ProcessingContext (digitaltwin-core-docs 3.0.5 API) @@ -103,7 +103,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
  • @@ -138,6 +140,16 @@

    Method Summary

    Returns the configured persistence provider or null if no persistence provider configuration can be found.
    +
    abstract SharedData
    + +
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    abstract SharedData
    + +
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    @@ -240,6 +252,7 @@

    Constructor Details

    ProcessingContext

    public ProcessingContext()
    +
    Default constructor.
    @@ -412,7 +425,7 @@

    sendAlert

    public abstract SendingResult sendAlert(String alertingProviderName, AlertMessage alert)

    - This method sends an alert message to supported systems. See "TODO: Link to docs" for more details on supported systems. + This method sends an alert message to supported systems.

    @@ -544,6 +557,28 @@

    getSimulationController

    +
  • +
    +

    getSharedModelData

    +
    public abstract SharedData getSharedModelData()
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • +
  • +
    +

    getSharedGlobalData

    +
    public abstract SharedData getSharedGlobalData()
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html index 4d2073a..99cf30d 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html @@ -2,7 +2,7 @@ -ProcessingResult (digitaltwin-core-docs 3.0.4 API) +ProcessingResult (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html index 8d9d776..3bce6fe 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html @@ -2,7 +2,7 @@ -SendingResult (digitaltwin-core-docs 3.0.4 API) +SendingResult (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html b/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html new file mode 100644 index 0000000..a0da3b9 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html @@ -0,0 +1,188 @@ + + + + +SharedData (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +

    Interface SharedData

    +
    +
    +
    +
    public interface SharedData
    +
    SharedData is used to access a model's, or globally, shared cache.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + + +
      +
      Clear the shared data cache.
      +
      + +
      get(String key)
      +
      +
      Retrieves an existing object from the cache.
      +
      + +
      put(String key, + byte[] value)
      +
      +
      Put a new key/value mapping into the cache.
      +
      + + +
      +
      Remove a key/value mapping from the cache.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        get

        +
        CacheResult get(String key)
        +
        Retrieves an existing object from the cache.
        +
        +
        Parameters:
        +
        key - the key mapping to a value.
        +
        Returns:
        +
        A cache result.
        +
        +
        +
      • +
      • +
        +

        put

        +
        CacheResult put(String key, + byte[] value)
        +
        Put a new key/value mapping into the cache.
        +
        +
        Parameters:
        +
        key - the key mapping to a value.
        +
        value - the value.
        +
        Returns:
        +
        a cache result.
        +
        +
        +
      • +
      • +
        +

        remove

        +
        CacheResult remove(String key)
        +
        Remove a key/value mapping from the cache.
        +
        +
        Parameters:
        +
        key - the key mapping to a value.
        +
        Returns:
        +
        a cache result.
        +
        +
        +
      • +
      • +
        +

        clear

        +
        CacheResult clear()
        +
        Clear the shared data cache.
        +
        +
        Returns:
        +
        a cache result.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html index eab1111..df4c127 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html @@ -2,7 +2,7 @@ -SimulationController (digitaltwin-core-docs 3.0.4 API) +SimulationController (digitaltwin-core-docs 3.0.5 API) @@ -115,41 +115,58 @@

    Method Summary

    Delay simulation processing for this DigitalTwin instance for a duration of time.
    -
    deleteInstance(String modelName, - String instanceId)
    +
    -
    Delete and remove a digital twin instance from simulation processing.
    +
    + Delay simulation processing for this DigitalTwin instance, indefinitely.
    - +
    deleteInstance(String modelName, + String instanceId)
    -
    Delete and remove this digital twin instance from simulation processing.
    +
    Delete and remove a digital twin instance from simulation processing.
    -
    emitTelemetry(String modelName, - byte[] telemetryMessage)
    +
    +
    Delete and remove this digital twin instance from simulation processing.
    +
    + +
    emitTelemetry(String modelName, + byte[] telemetryMessage)
    +
    Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
    - -
    emitTelemetry(String modelName, + +
    emitTelemetry(String modelName, Object jsonSerializableMessage)
    -
    +
    Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
    + + +
    +
    + Retrieves the simulation start time.
    +
    Retrieves the current simulation time increment.
    - - +
    void
    +
    +
    Run this instance during this simulation step.
    +
    + + +
    Stop the simulation.
    @@ -180,6 +197,19 @@

    getSimulationTimeIncrement

  • +
    +

    getSimulationStartTime

    +
    Date getSimulationStartTime()
    +

    + Retrieves the simulation start time. +

    +
    +
    Returns:
    +
    the simulation start time.
    +
    +
    +
  • +
  • delay

    SendingResult delay(Duration duration)
    @@ -219,6 +249,24 @@

    delay

  • +
    +

    delayIndefinitely

    +
    SendingResult delayIndefinitely()
    +

    + Delay simulation processing for this DigitalTwin instance, indefinitely. +

    + +

    + Simulation processing will be delayed until this instance is run with runThisInstance(). +

    +
    +
    Returns:
    +
    SendingResult.Handled if the delay was processed or SendingResult.NotHandled + if the delay was not processed.
    +
    +
    +
  • +
  • emitTelemetry

    SendingResult emitTelemetry(String modelName, @@ -348,6 +396,17 @@

    deleteThisInstance

  • +
    +

    runThisInstance

    +
    void runThisInstance()
    +
    Run this instance during this simulation step. The instance will be run using the models SimulationProcessor.processModel(ProcessingContext, DigitalTwinBase, Date) + implementation. + + This will cause the simulation sub-system to run this instance regardless of the instances current + DigitalTwinBase.NextSimulationTime.
    +
    +
  • +
  • stopSimulation

    SimulationStatus stopSimulation()
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html index 7f4fc19..64de0a7 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html @@ -2,7 +2,7 @@ -SimulationProcessor (digitaltwin-core-docs 3.0.4 API) +SimulationProcessor (digitaltwin-core-docs 3.0.5 API) @@ -107,7 +107,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
  • @@ -116,17 +118,25 @@

    Constructor Summary

    Method Summary

    -
    +
    Modifier and Type
    Method
    Description
    - -
    processModel(ProcessingContext context, + +
    onInitSimulation(InitSimulationContext context, + T instance, + Date epoch)
    +
    +
    + Optional method that is called per-instance when a simulation is started.
    +
    + +
    processModel(ProcessingContext context, T instance, Date epoch)
    -
    +
    Processes simulation events for a real-time digital twin.
    @@ -150,6 +160,7 @@

    Constructor Details

    SimulationProcessor

    public SimulationProcessor()
    +
    Default constructor.
    @@ -178,6 +189,36 @@

    +

    onInitSimulation

    +
    public ProcessingResult onInitSimulation(InitSimulationContext context, + T instance, + Date epoch)
    +

    + Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. +

    + +

    + onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed + between simulation runs. +

    +
      +
    • Set variables in global or shared data.
    • +
    • Run a simulation.
    • +
    • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
    • +
    • Complete simulation and evaluate the result.
    • +
    +
    +
    Parameters:
    +
    context - The simulation init context.
    +
    instance - The digital twin instance.
    +
    epoch - the simulation start time.
    +
    Returns:
    +
    ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate. Default behavior: ProcessingResult.NoUpdate.
    +
    +
    + diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html index c0f7ab0..95a1b09 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html @@ -2,7 +2,7 @@ -SimulationStatus (digitaltwin-core-docs 3.0.4 API) +SimulationStatus (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html index eb5dd4c..9cb2a82 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html @@ -2,7 +2,7 @@ -TimerActionResult (digitaltwin-core-docs 3.0.4 API) +TimerActionResult (digitaltwin-core-docs 3.0.5 API) @@ -255,7 +255,8 @@

    fromOrdinal

    + 2 = FailedNoSuchTimer, 3 = FailedTimerAlreadyExists, + 4 = FailedInternalError
    Parameters:
    val - the ordinal value.
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html index c07d3f3..60c2c72 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html @@ -2,7 +2,7 @@ -TimerHandler (digitaltwin-core-docs 3.0.4 API) +TimerHandler (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html index 27958fe..b2824fe 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html @@ -2,7 +2,7 @@ -TimerMetadata (digitaltwin-core-docs 3.0.4 API) +TimerMetadata (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html index 3264684..cef4477 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html @@ -2,7 +2,7 @@ -TimerType (digitaltwin-core-docs 3.0.4 API) +TimerType (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html index db0c1b6..9fa1f27 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.5 API) @@ -83,6 +83,14 @@

    Package
    Configuration for an alert provider.
    + +
    +
    Status of a cache operation.
    +
    + +
    +
    Represents a response from a SharedData operation.
    +
    A real-time digital twin of a data source.
    @@ -96,43 +104,52 @@

    Package
    The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing digital twin.

    - +
    +
    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
    +
    + +
    Message list factory retrieves message lists for a MessageProcessor
    - -
    + +
    Processes messages for a real-time digital twin.
    - -
    + +
    Base class for the MessageProcessor to help with typing.
    - -
    + +
    The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a digital twin model to the real-time digital twin cloud service.
    - -
    + +
    An interface that can be used for persisting/retrieving the state of real-time digital twins.
    - -
    + +
    Available PersistenceProvider types.
    - -
    + +
    Context object that allows the user to send a message to a DataSource.
    - -
    + +
    The result from a message processor which indicates to update the state object or to ignore
    - -
    + +
    Marks a message as Delivered or not Delivered
    + +
    +
    SharedData is used to access a model's, or globally, shared cache.
    +
    The SimulationController interface is used to interact with the running DigitalTwin simulation.
    diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html index 21271e7..d2f2c59 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html +++ b/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.5 API) @@ -79,8 +79,11 @@

    Class Hierarchy

    Interface Hierarchy

    @@ -92,6 +95,7 @@

    Enum Class Hierarchy

    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.lang.constant.Constable, java.io.Serializable)
        +
      • com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
      • com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType (implements java.io.Serializable)
      • com.scaleoutsoftware.digitaltwin.core.ProcessingResult
      • com.scaleoutsoftware.digitaltwin.core.SendingResult
      • diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html b/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html index 4ec280c..f94cc8d 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html @@ -2,7 +2,7 @@ -LogMessage (digitaltwin-core-docs 3.0.4 API) +LogMessage (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html index b80b113..de93f73 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html @@ -2,7 +2,7 @@ -SimulationEventResult (digitaltwin-core-docs 3.0.4 API) +SimulationEventResult (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html index 9695d0f..cc34461 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html @@ -2,7 +2,7 @@ -SimulationStep (digitaltwin-core-docs 3.0.4 API) +SimulationStep (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html b/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html index 52e4e46..cc54152 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html @@ -2,7 +2,7 @@ -Workbench (digitaltwin-core-docs 3.0.4 API) +Workbench (digitaltwin-core-docs 3.0.5 API) @@ -321,6 +321,10 @@

        Constructor Summary

        Instantiate the workbench.
        +
        Workbench(int numSimulationWorkers)
        +
        +
        Instantiate the workbench.
        +
    @@ -342,21 +346,34 @@

    Method Summary

    Adds an alert provider configuration to the specified model on this workbench.
    void
    -
    addInstance(String modelName, +
    addGlobalModelData(String key, + byte[] value)
    +
    +
    Add a key/value pair to the global SharedData.
    +
    +
    void
    +
    addInstance(String modelName, String id, DigitalTwinBase instance)
    -
    +
    Adds a digital twin instance to the workbench.
    -
    <T extends DigitalTwinBase, +
    <T extends DigitalTwinBase, V>
    void
    -
    addRealTimeModel(String modelName, +
    addRealTimeModel(String modelName, MessageProcessor<T,V> digitalTwinMessageProcessor, Class<T> dtType, Class<V> messageClass)
    -
    +
    Adds a real-time digital twin model to the workbench.
    +
    void
    +
    addSharedModelData(String modelName, + String key, + byte[] value)
    +
    +
    Add a key/value pair to SharedData for a model.
    +
    <T extends DigitalTwinBase, V>
    void
    addSimulationModel(String modelName, @@ -398,6 +415,16 @@

    Method Summary

    Retrieves messages logged by digital twin instances for a specified mdoel.
    + + +
    +
    Retrieve the global SharedData.
    +
    + + +
    +
    Retrieve the SharedData for a model.
    +
    @@ -460,6 +487,17 @@

    Workbench

    Instantiate the workbench.
    +
  • +
    +

    Workbench

    +
    public Workbench(int numSimulationWorkers)
    +
    Instantiate the workbench.
    +
    +
    Parameters:
    +
    numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors().
    +
    +
    +
  • @@ -695,6 +733,36 @@

    getAlertMessages

  • +
    +

    getSharedModelData

    +
    public SharedData getSharedModelData(String model) + throws WorkbenchException
    +
    Retrieve the SharedData for a model.
    +
    +
    Parameters:
    +
    model - the model name.
    +
    Returns:
    +
    the SharedData for a model.
    +
    Throws:
    +
    WorkbenchException - if an exception occurs while creating the working shared data.
    +
    +
    +
  • +
  • +
    +

    getSharedGlobalData

    +
    public SharedData getSharedGlobalData() + throws WorkbenchException
    +
    Retrieve the global SharedData.
    +
    +
    Returns:
    +
    the global SharedData of this workbench.
    +
    Throws:
    +
    WorkbenchException - if an exception occurs while creating the working shared data.
    +
    +
    +
  • +
  • generateModelSchema

    public String generateModelSchema(String modelName) @@ -751,6 +819,34 @@

    send

  • +
    +

    addSharedModelData

    +
    public void addSharedModelData(String modelName, + String key, + byte[] value)
    +
    Add a key/value pair to SharedData for a model.
    +
    +
    Parameters:
    +
    modelName - the model name.
    +
    key - the key.
    +
    value - the value.
    +
    +
    +
  • +
  • +
    +

    addGlobalModelData

    +
    public void addGlobalModelData(String key, + byte[] value)
    +
    Add a key/value pair to the global SharedData.
    +
    +
    Parameters:
    +
    key - the key.
    +
    value - the value.
    +
    +
    +
  • +
  • close

    public void close() diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html index d76f832..23c4465 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html @@ -2,7 +2,7 @@ -WorkbenchException (digitaltwin-core-docs 3.0.4 API) +WorkbenchException (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html index 996f2e1..fcd247c 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html index 294e1fb..b449414 100644 --- a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html +++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build.gradle b/docs/digitaltwin-core-docs/build.gradle index e51b3be..21815d2 100644 --- a/docs/digitaltwin-core-docs/build.gradle +++ b/docs/digitaltwin-core-docs/build.gradle @@ -3,7 +3,7 @@ plugins { } group 'com.scaleout.digitaltwin' -version '3.0.4' +version '3.0.5' repositories { mavenCentral() diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html index bddcce0..a1e1471 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html @@ -2,7 +2,7 @@ -All Classes and Interfaces (digitaltwin-core-docs 3.0.4 API) +All Classes and Interfaces (digitaltwin-core-docs 3.0.5 API) @@ -67,6 +67,14 @@

    All Classes and Interfaces<
    Configuration for an alert provider.
    + +
    +
    Status of a cache operation.
    +
    + +
    +
    Represents a response from a SharedData operation.
    +
    A real-time digital twin of a data source.
    @@ -80,47 +88,56 @@

    All Classes and Interfaces<
    The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing digital twin.

    - -
    + +
    +
    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
    +
    + +
    A messaged that was logged by a digital twin.
    - -
    + +
    Message list factory retrieves message lists for a MessageProcessor
    - -
    + +
    Processes messages for a real-time digital twin.
    - -
    + +
    Base class for the MessageProcessor to help with typing.
    - -
    + +
    The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a digital twin model to the real-time digital twin cloud service.
    - -
    + +
    An interface that can be used for persisting/retrieving the state of real-time digital twins.
    - -
    + +
    Available PersistenceProvider types.
    - -
    + +
    Context object that allows the user to send a message to a DataSource.
    - -
    + +
    The result from a message processor which indicates to update the state object or to ignore
    - -
    + +
    Marks a message as Delivered or not Delivered
    + +
    +
    SharedData is used to access a model's, or globally, shared cache.
    +
    The SimulationController interface is used to interact with the running DigitalTwin simulation.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html index 3040f57..cdc7533 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html @@ -2,7 +2,7 @@ -All Packages (digitaltwin-core-docs 3.0.4 API) +All Packages (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html index f552c72..75ab8d8 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html @@ -2,7 +2,7 @@ -AlertMessage (digitaltwin-core-docs 3.0.4 API) +AlertMessage (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html index 838eb7a..ae33977 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html @@ -2,7 +2,7 @@ -AlertProviderConfiguration (digitaltwin-core-docs 3.0.4 API) +AlertProviderConfiguration (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html new file mode 100644 index 0000000..9ff6c42 --- /dev/null +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html @@ -0,0 +1,256 @@ + + + + +CacheOperationStatus (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +

    Enum Class CacheOperationStatus

    +
    +
    java.lang.Object +
    java.lang.Enum<CacheOperationStatus> +
    com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    +
    +
    +
    All Implemented Interfaces:
    +
    Serializable, Comparable<CacheOperationStatus>, Constable
    +
    +
    +
    public enum CacheOperationStatus +extends Enum<CacheOperationStatus>
    +
    Status of a cache operation.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Enum Constant Details

      +
        +
      • +
        +

        ObjectRetrieved

        +
        public static final CacheOperationStatus ObjectRetrieved
        +
        The object was successfully retrieved.
        +
        +
      • +
      • +
        +

        ObjectPut

        +
        public static final CacheOperationStatus ObjectPut
        +
        The object was successfully added/updated.
        +
        +
      • +
      • +
        +

        ObjectDoesNotExist

        +
        public static final CacheOperationStatus ObjectDoesNotExist
        +
        The object could not be retrieved because it was not found.
        +
        +
      • +
      • +
        +

        ObjectRemoved

        +
        public static final CacheOperationStatus ObjectRemoved
        +
        The object was removed successfully.
        +
        +
      • +
      • +
        +

        CacheCleared

        +
        public static final CacheOperationStatus CacheCleared
        +
        The cache was cleared successfully.
        +
        +
      • +
      +
      +
    • + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        values

        +
        public static CacheOperationStatus[] values()
        +
        Returns an array containing the constants of this enum class, in +the order they are declared.
        +
        +
        Returns:
        +
        an array containing the constants of this enum class, in the order they are declared
        +
        +
        +
      • +
      • +
        +

        valueOf

        +
        public static CacheOperationStatus valueOf(String name)
        +
        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
        +
        +
        Parameters:
        +
        name - the name of the enum constant to be returned.
        +
        Returns:
        +
        the enum constant with the specified name
        +
        Throws:
        +
        IllegalArgumentException - if this enum class has no constant with the specified name
        +
        NullPointerException - if the argument is null
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html new file mode 100644 index 0000000..9334a2c --- /dev/null +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html @@ -0,0 +1,163 @@ + + + + +CacheResult (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +

    Interface CacheResult

    +
    +
    +
    +
    public interface CacheResult
    +
    Represents a response from a SharedData operation.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + + +
      +
      Gets the key or null to the object associated with the result.
      +
      + + +
      +
      Gets the status of the cache operation.
      +
      +
      byte[]
      + +
      +
      Get the object returned from a Get operation.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getKey

        +
        String getKey()
        +
        Gets the key or null to the object associated with the result.
        +
        +
        Returns:
        +
        the key or null.
        +
        +
        +
      • +
      • +
        +

        getValue

        +
        byte[] getValue()
        +
        Get the object returned from a Get operation.
        +
        +
        Returns:
        +
        the object or null.
        +
        +
        +
      • +
      • +
        +

        getStatus

        + +
        Gets the status of the cache operation.
        +
        +
        Returns:
        +
        the operation status.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html index d22f132..c013270 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html @@ -2,7 +2,7 @@ -DigitalTwinBase (digitaltwin-core-docs 3.0.4 API) +DigitalTwinBase (digitaltwin-core-docs 3.0.5 API) @@ -123,7 +123,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +

  • @@ -220,6 +222,7 @@

    Constructor Details

    DigitalTwinBase

    public DigitalTwinBase()
    +
    Default constructor.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html index e7de9da..71116ad 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html @@ -2,7 +2,7 @@ -DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.4 API) +DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html index 65bae14..4d362ae 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html @@ -2,7 +2,7 @@ -InitContext (digitaltwin-core-docs 3.0.4 API) +InitContext (digitaltwin-core-docs 3.0.5 API) @@ -91,7 +91,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
    @@ -116,6 +118,16 @@

    Method Summary

    Get the Model identifier of the initializing digital twin instance.
    +
    abstract SharedData
    + +
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    abstract SharedData
    + +
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    startTimer(String timerName, Duration interval, @@ -145,6 +157,7 @@

    Constructor Details

    InitContext

    public InitContext()
    +
    Default constructor.
    @@ -179,6 +192,28 @@

    startTimer

  • +
    +

    getSharedModelData

    +
    public abstract SharedData getSharedModelData()
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • +
  • +
    +

    getSharedGlobalData

    +
    public abstract SharedData getSharedGlobalData()
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • +
  • getId

    public abstract String getId()
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html new file mode 100644 index 0000000..0640172 --- /dev/null +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html @@ -0,0 +1,148 @@ + + + + +InitSimulationContext (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +

    Interface InitSimulationContext

    +
    +
    +
    +
    public interface InitSimulationContext
    +
    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
    +
    +
    + +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        getSharedModelData

        +
        SharedData getSharedModelData()
        +
        Retrieve a SharedData accessor for this model's shared data.
        +
        +
        Returns:
        +
        a SharedData instance.
        +
        +
        +
      • +
      • +
        +

        getSharedGlobalData

        +
        SharedData getSharedGlobalData()
        +
        Retrieve a SharedData accessor for globally shared data.
        +
        +
        Returns:
        +
        a SharedData instance.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html index fd9882a..b9941e1 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html @@ -2,7 +2,7 @@ -MessageFactory (digitaltwin-core-docs 3.0.4 API) +MessageFactory (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html index 87c25e4..87308d2 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html @@ -2,7 +2,7 @@ -MessageProcessor (digitaltwin-core-docs 3.0.4 API) +MessageProcessor (digitaltwin-core-docs 3.0.5 API) @@ -110,7 +110,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
  • @@ -160,6 +162,7 @@

    Constructor Details

    MessageProcessor

    public MessageProcessor()
    +
    Default constructor.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html index ab6edc5..d9eca63 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html @@ -2,7 +2,7 @@ -MessageProcessorBase (digitaltwin-core-docs 3.0.4 API) +MessageProcessorBase (digitaltwin-core-docs 3.0.5 API) @@ -98,7 +98,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
    @@ -141,6 +143,7 @@

    Constructor Details

    MessageProcessorBase

    public MessageProcessorBase()
    +
    Default constructor.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html index 45f653c..dd17e2c 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html @@ -2,7 +2,7 @@ -ModelSchema (digitaltwin-core-docs 3.0.4 API) +ModelSchema (digitaltwin-core-docs 3.0.5 API) @@ -96,12 +96,45 @@

    Constructor Summary

    Creates a model schema from a digital twin class, a message processor class, and a message class.
    -
    ModelSchema(String dtClass, +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep)
    +
    +
    Model schema with a defined entry point.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    ModelSchema(String dtClass, String mpClass, String msgClass, String adtName, PersistenceProviderType persistenceType, List<AlertProviderConfiguration> alertingProviders)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    @@ -113,24 +146,86 @@

    Constructor Summary

    String adtName, PersistenceProviderType persistenceType, List<AlertProviderConfiguration> alertingProviders)
    -
     
    -
    ModelSchema(String dtClass, +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + String ep, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String dtClass, String mpClass, String msgClass, String spClass, + String ep, List<AlertProviderConfiguration> alertingProviders)
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    -
    ModelSchema(String dtClass, +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String dtClass, String mpClass, String msgClass, + String spClass, List<AlertProviderConfiguration> alertingProviders)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    +
    ModelSchema(String dtClass, + String mpClass, + String msgClass, + List<AlertProviderConfiguration> alertingProviders)
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    @@ -161,30 +256,40 @@

    Method Summary

    Retrieve the Azure Digital Twin model name.
    - +
    -
    Retrieve the message processor type (a MessageProcessor implementation).
    +
    Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
    - +
    -
    Retrieve the message type (JSON serializable message implementation).
    +
    Retrieve the message processor type (a MessageProcessor implementation).
    - +
    -
    Retrieve the digital twin model type (a DigitalTwinBase implementation).
    +
    Retrieve the message type (JSON serializable message implementation).
    - - + +
    -
    Retrieve the persistence provider type.
    +
    Retrieve the digital twin model type (a DigitalTwinBase implementation).
    - - + +
    +
    Retrieve the persistence provider type.
    +
    + + +
    Retrieve the simulation processor type (a SimulationProcessor implementation).
    +
    boolean
    + +
    +
    Retrieves the message recording enabled status.
    +
    boolean
    @@ -228,6 +333,59 @@

    ModelSchema

  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep)
    +
    Model schema with a defined entry point.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    ep - the invocation grid entry point.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String ep, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    ep - the invocation grid entry point.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • ModelSchema

    public ModelSchema(String dtClass, @@ -266,6 +424,74 @@

    ModelSchema

  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List<AlertProviderConfiguration> alertingProviders)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    spClass - the simulation processor class implementation.
    +
    ep - the invocation grid entry point.
    +
    alertingProviders - the alerting provider configurations.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    spClass - the simulation processor class implementation.
    +
    alertingProviders - the alerting provider configurations.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    spClass - the simulation processor class implementation.
    +
    alertingProviders - the alerting provider configurations.
    +
    ep - the invocation grid entry point.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • ModelSchema

    public ModelSchema(String dtClass, @@ -288,6 +514,30 @@

    ModelSchema

  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    adtName - the Azure Digital Twin model name.
    +
    persistenceType - the persistence provider type.
    +
    alertingProviders - the alerting provider configurations.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • ModelSchema

    public ModelSchema(String dtClass, @@ -297,6 +547,9 @@

    ModelSchema

    String adtName, PersistenceProviderType persistenceType, List<AlertProviderConfiguration> alertingProviders)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    Parameters:
    dtClass - the digital twin class implementation.
    @@ -309,6 +562,62 @@

    ModelSchema

  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    simulationProcessorClass - the simulation processor class implementation.
    +
    adtName - the Azure Digital Twin model name.
    +
    persistenceType - the persistence provider type.
    +
    alertingProviders - the alerting provider configurations.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • +
  • +
    +

    ModelSchema

    +
    public ModelSchema(String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + String ep, + PersistenceProviderType persistenceType, + List<AlertProviderConfiguration> alertingProviders, + boolean emr)
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    Parameters:
    +
    dtClass - the digital twin class implementation.
    +
    mpClass - the message processor class implementation.
    +
    msgClass - a JSON serializable message class.
    +
    simulationProcessorClass - the simulation processor class implementation.
    +
    adtName - the Azure Digital Twin model name.
    +
    persistenceType - the persistence provider type.
    +
    alertingProviders - the alerting provider configurations.
    +
    ep - the invocation grid entry point.
    +
    emr - enable message recording for this model.
    +
    +
    +
  • @@ -427,6 +736,29 @@

    getPersistenceProvider

    +
  • +
    +

    messageRecordingEnabled

    +
    public boolean messageRecordingEnabled()
    +
    Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, + false otherwise.
    +
    +
    Returns:
    +
    True if message recording is enabled, false otherwise.
    +
    +
    +
  • +
  • +
    +

    getEntryPoint

    +
    public String getEntryPoint()
    +
    Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
    +
    +
    Returns:
    +
    the entry point for launching.
    +
    +
    +
  • diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html index 7f6fc37..214c380 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html @@ -2,7 +2,7 @@ -PersistenceProvider (digitaltwin-core-docs 3.0.4 API) +PersistenceProvider (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html index da4a79b..cff66a9 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html @@ -2,7 +2,7 @@ -PersistenceProviderType (digitaltwin-core-docs 3.0.4 API) +PersistenceProviderType (digitaltwin-core-docs 3.0.5 API) @@ -109,6 +109,14 @@

    Enum Constant Summary

    Enum for the Azure Digital Twin service.
    + +
    +
    Enum for CosmosDB
    +
    + +
    +
    Enum for DynamoDB
    +
    Enum for SQLite
    @@ -118,7 +126,9 @@

    Enum Constant Summary

    Enum for SQLServer
    -
     
    +
    +
    Enum for an unconfigured PersistenceProvider
    +
    @@ -127,7 +137,7 @@

    Enum Constant Summary

    Method Summary

    -
    +
    Modifier and Type
    @@ -143,6 +153,16 @@

    Method Summary

    Return the PersistenceProviderType from a string value.
    + + +
    +
    Retrieve the name of the persistence provider type.
    +
    +
    int
    + +
    +
    Retrieve the ordinal value (used by the DTBuidler service).
    +
    @@ -182,6 +202,20 @@

    AzureDigitalTwinsService

  • +
    +

    CosmosDb

    +
    public static final PersistenceProviderType CosmosDb
    +
    Enum for CosmosDB
    +
    +
  • +
  • +
    +

    DynamoDb

    +
    public static final PersistenceProviderType DynamoDb
    +
    Enum for DynamoDB
    +
    +
  • +
  • SQLite

    public static final PersistenceProviderType SQLite
    @@ -199,6 +233,7 @@

    SQLServer

    Unconfigured

    public static final PersistenceProviderType Unconfigured
    +
    Enum for an unconfigured PersistenceProvider
  • @@ -241,6 +276,28 @@

    valueOf

  • +
    +

    getName

    +
    public String getName()
    +
    Retrieve the name of the persistence provider type.
    +
    +
    Returns:
    +
    the name of the persistence provider type.
    +
    +
    +
  • +
  • +
    +

    getServiceOrdinalValue

    +
    public int getServiceOrdinalValue()
    +
    Retrieve the ordinal value (used by the DTBuidler service).
    +
    +
    Returns:
    +
    the ordinal value.
    +
    +
    +
  • +
  • fromString

    public static PersistenceProviderType fromString(String name)
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html index 383f87d..ea553fe 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html @@ -2,7 +2,7 @@ -ProcessingContext (digitaltwin-core-docs 3.0.4 API) +ProcessingContext (digitaltwin-core-docs 3.0.5 API) @@ -103,7 +103,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
  • @@ -138,6 +140,16 @@

    Method Summary

    Returns the configured persistence provider or null if no persistence provider configuration can be found.
    +
    abstract SharedData
    + +
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    abstract SharedData
    + +
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    @@ -240,6 +252,7 @@

    Constructor Details

    ProcessingContext

    public ProcessingContext()
    +
    Default constructor.
    @@ -412,7 +425,7 @@

    sendAlert

    public abstract SendingResult sendAlert(String alertingProviderName, AlertMessage alert)

    - This method sends an alert message to supported systems. See "TODO: Link to docs" for more details on supported systems. + This method sends an alert message to supported systems.

    @@ -544,6 +557,28 @@

    getSimulationController

    +
  • +
    +

    getSharedModelData

    +
    public abstract SharedData getSharedModelData()
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • +
  • +
    +

    getSharedGlobalData

    +
    public abstract SharedData getSharedGlobalData()
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    Returns:
    +
    a SharedData instance.
    +
    +
    +
  • diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html index 4d2073a..99cf30d 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html @@ -2,7 +2,7 @@ -ProcessingResult (digitaltwin-core-docs 3.0.4 API) +ProcessingResult (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html index 8d9d776..3bce6fe 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html @@ -2,7 +2,7 @@ -SendingResult (digitaltwin-core-docs 3.0.4 API) +SendingResult (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html new file mode 100644 index 0000000..a0da3b9 --- /dev/null +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html @@ -0,0 +1,188 @@ + + + + +SharedData (digitaltwin-core-docs 3.0.5 API) + + + + + + + + + + + + + + +
    + +
    +
    + +
    + +

    Interface SharedData

    +
    +
    +
    +
    public interface SharedData
    +
    SharedData is used to access a model's, or globally, shared cache.
    +
    +
    +
      + +
    • +
      +

      Method Summary

      +
      +
      +
      +
      +
      Modifier and Type
      +
      Method
      +
      Description
      + + +
      +
      Clear the shared data cache.
      +
      + +
      get(String key)
      +
      +
      Retrieves an existing object from the cache.
      +
      + +
      put(String key, + byte[] value)
      +
      +
      Put a new key/value mapping into the cache.
      +
      + + +
      +
      Remove a key/value mapping from the cache.
      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
      + +
    • +
      +

      Method Details

      +
        +
      • +
        +

        get

        +
        CacheResult get(String key)
        +
        Retrieves an existing object from the cache.
        +
        +
        Parameters:
        +
        key - the key mapping to a value.
        +
        Returns:
        +
        A cache result.
        +
        +
        +
      • +
      • +
        +

        put

        +
        CacheResult put(String key, + byte[] value)
        +
        Put a new key/value mapping into the cache.
        +
        +
        Parameters:
        +
        key - the key mapping to a value.
        +
        value - the value.
        +
        Returns:
        +
        a cache result.
        +
        +
        +
      • +
      • +
        +

        remove

        +
        CacheResult remove(String key)
        +
        Remove a key/value mapping from the cache.
        +
        +
        Parameters:
        +
        key - the key mapping to a value.
        +
        Returns:
        +
        a cache result.
        +
        +
        +
      • +
      • +
        +

        clear

        +
        CacheResult clear()
        +
        Clear the shared data cache.
        +
        +
        Returns:
        +
        a cache result.
        +
        +
        +
      • +
      +
      +
    • +
    +
    + +
    +
    +
    + + diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html index eab1111..df4c127 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html @@ -2,7 +2,7 @@ -SimulationController (digitaltwin-core-docs 3.0.4 API) +SimulationController (digitaltwin-core-docs 3.0.5 API) @@ -115,41 +115,58 @@

    Method Summary

    Delay simulation processing for this DigitalTwin instance for a duration of time.
    -
    deleteInstance(String modelName, - String instanceId)
    +
    -
    Delete and remove a digital twin instance from simulation processing.
    +
    + Delay simulation processing for this DigitalTwin instance, indefinitely.
    - +
    deleteInstance(String modelName, + String instanceId)
    -
    Delete and remove this digital twin instance from simulation processing.
    +
    Delete and remove a digital twin instance from simulation processing.
    -
    emitTelemetry(String modelName, - byte[] telemetryMessage)
    +
    +
    Delete and remove this digital twin instance from simulation processing.
    +
    + +
    emitTelemetry(String modelName, + byte[] telemetryMessage)
    +
    Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
    - -
    emitTelemetry(String modelName, + +
    emitTelemetry(String modelName, Object jsonSerializableMessage)
    -
    +
    Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
    + + +
    +
    + Retrieves the simulation start time.
    +
    Retrieves the current simulation time increment.
    - - +
    void
    +
    +
    Run this instance during this simulation step.
    +
    + + +
    Stop the simulation.
    @@ -180,6 +197,19 @@

    getSimulationTimeIncrement

  • +
    +

    getSimulationStartTime

    +
    Date getSimulationStartTime()
    +

    + Retrieves the simulation start time. +

    +
    +
    Returns:
    +
    the simulation start time.
    +
    +
    +
  • +
  • delay

    SendingResult delay(Duration duration)
    @@ -219,6 +249,24 @@

    delay

  • +
    +

    delayIndefinitely

    +
    SendingResult delayIndefinitely()
    +

    + Delay simulation processing for this DigitalTwin instance, indefinitely. +

    + +

    + Simulation processing will be delayed until this instance is run with runThisInstance(). +

    +
    +
    Returns:
    +
    SendingResult.Handled if the delay was processed or SendingResult.NotHandled + if the delay was not processed.
    +
    +
    +
  • +
  • emitTelemetry

    SendingResult emitTelemetry(String modelName, @@ -348,6 +396,17 @@

    deleteThisInstance

  • +
    +

    runThisInstance

    +
    void runThisInstance()
    +
    Run this instance during this simulation step. The instance will be run using the models SimulationProcessor.processModel(ProcessingContext, DigitalTwinBase, Date) + implementation. + + This will cause the simulation sub-system to run this instance regardless of the instances current + DigitalTwinBase.NextSimulationTime.
    +
    +
  • +
  • stopSimulation

    SimulationStatus stopSimulation()
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html index 7f4fc19..64de0a7 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html @@ -2,7 +2,7 @@ -SimulationProcessor (digitaltwin-core-docs 3.0.4 API) +SimulationProcessor (digitaltwin-core-docs 3.0.5 API) @@ -107,7 +107,9 @@

    Constructor Summary

    Constructor
    Description
    -
     
    +
    +
    Default constructor.
    +
  • @@ -116,17 +118,25 @@

    Constructor Summary

    Method Summary

    -
    +
    Modifier and Type
    Method
    Description
    - -
    processModel(ProcessingContext context, + +
    onInitSimulation(InitSimulationContext context, + T instance, + Date epoch)
    +
    +
    + Optional method that is called per-instance when a simulation is started.
    +
    + +
    processModel(ProcessingContext context, T instance, Date epoch)
    -
    +
    Processes simulation events for a real-time digital twin.
    @@ -150,6 +160,7 @@

    Constructor Details

    SimulationProcessor

    public SimulationProcessor()
    +
    Default constructor.
    @@ -178,6 +189,36 @@

    +

    onInitSimulation

    +
    public ProcessingResult onInitSimulation(InitSimulationContext context, + T instance, + Date epoch)
    +

    + Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. +

    + +

    + onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed + between simulation runs. +

    +
      +
    • Set variables in global or shared data.
    • +
    • Run a simulation.
    • +
    • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
    • +
    • Complete simulation and evaluate the result.
    • +
    +
    +
    Parameters:
    +
    context - The simulation init context.
    +
    instance - The digital twin instance.
    +
    epoch - the simulation start time.
    +
    Returns:
    +
    ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate. Default behavior: ProcessingResult.NoUpdate.
    +
    +
    + diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html index c0f7ab0..95a1b09 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html @@ -2,7 +2,7 @@ -SimulationStatus (digitaltwin-core-docs 3.0.4 API) +SimulationStatus (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html index eb5dd4c..9cb2a82 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html @@ -2,7 +2,7 @@ -TimerActionResult (digitaltwin-core-docs 3.0.4 API) +TimerActionResult (digitaltwin-core-docs 3.0.5 API) @@ -255,7 +255,8 @@

    fromOrdinal

    + 2 = FailedNoSuchTimer, 3 = FailedTimerAlreadyExists, + 4 = FailedInternalError
    Parameters:
    val - the ordinal value.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html index c07d3f3..60c2c72 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html @@ -2,7 +2,7 @@ -TimerHandler (digitaltwin-core-docs 3.0.4 API) +TimerHandler (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html index 27958fe..b2824fe 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html @@ -2,7 +2,7 @@ -TimerMetadata (digitaltwin-core-docs 3.0.4 API) +TimerMetadata (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html index 3264684..cef4477 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html @@ -2,7 +2,7 @@ -TimerType (digitaltwin-core-docs 3.0.4 API) +TimerType (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html index db0c1b6..9fa1f27 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.5 API) @@ -83,6 +83,14 @@

    Package
    Configuration for an alert provider.
    + +
    +
    Status of a cache operation.
    +
    + +
    +
    Represents a response from a SharedData operation.
    +
    A real-time digital twin of a data source.
    @@ -96,43 +104,52 @@

    Package
    The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing digital twin.

    - +
    +
    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
    +
    + +
    Message list factory retrieves message lists for a MessageProcessor
    - -
    + +
    Processes messages for a real-time digital twin.
    - -
    + +
    Base class for the MessageProcessor to help with typing.
    - -
    + +
    The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a digital twin model to the real-time digital twin cloud service.
    - -
    + +
    An interface that can be used for persisting/retrieving the state of real-time digital twins.
    - -
    + +
    Available PersistenceProvider types.
    - -
    + +
    Context object that allows the user to send a message to a DataSource.
    - -
    + +
    The result from a message processor which indicates to update the state object or to ignore
    - -
    + +
    Marks a message as Delivered or not Delivered
    + +
    +
    SharedData is used to access a model's, or globally, shared cache.
    +
    The SimulationController interface is used to interact with the running DigitalTwin simulation.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html index 21271e7..d2f2c59 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.5 API) @@ -79,8 +79,11 @@

    Class Hierarchy

    Interface Hierarchy

    @@ -92,6 +95,7 @@

    Enum Class Hierarchy

    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.lang.constant.Constable, java.io.Serializable)
        +
      • com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
      • com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType (implements java.io.Serializable)
      • com.scaleoutsoftware.digitaltwin.core.ProcessingResult
      • com.scaleoutsoftware.digitaltwin.core.SendingResult
      • diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html index 4ec280c..f94cc8d 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html @@ -2,7 +2,7 @@ -LogMessage (digitaltwin-core-docs 3.0.4 API) +LogMessage (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html index b80b113..de93f73 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html @@ -2,7 +2,7 @@ -SimulationEventResult (digitaltwin-core-docs 3.0.4 API) +SimulationEventResult (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html index 9695d0f..cc34461 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html @@ -2,7 +2,7 @@ -SimulationStep (digitaltwin-core-docs 3.0.4 API) +SimulationStep (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html index 52e4e46..cc54152 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html @@ -2,7 +2,7 @@ -Workbench (digitaltwin-core-docs 3.0.4 API) +Workbench (digitaltwin-core-docs 3.0.5 API) @@ -321,6 +321,10 @@

        Constructor Summary

        Instantiate the workbench.
        +
        Workbench(int numSimulationWorkers)
        +
        +
        Instantiate the workbench.
        +
    @@ -342,21 +346,34 @@

    Method Summary

    Adds an alert provider configuration to the specified model on this workbench.
    void
    -
    addInstance(String modelName, +
    addGlobalModelData(String key, + byte[] value)
    +
    +
    Add a key/value pair to the global SharedData.
    +
    +
    void
    +
    addInstance(String modelName, String id, DigitalTwinBase instance)
    -
    +
    Adds a digital twin instance to the workbench.
    -
    <T extends DigitalTwinBase, +
    <T extends DigitalTwinBase, V>
    void
    -
    addRealTimeModel(String modelName, +
    addRealTimeModel(String modelName, MessageProcessor<T,V> digitalTwinMessageProcessor, Class<T> dtType, Class<V> messageClass)
    -
    +
    Adds a real-time digital twin model to the workbench.
    +
    void
    +
    addSharedModelData(String modelName, + String key, + byte[] value)
    +
    +
    Add a key/value pair to SharedData for a model.
    +
    <T extends DigitalTwinBase, V>
    void
    addSimulationModel(String modelName, @@ -398,6 +415,16 @@

    Method Summary

    Retrieves messages logged by digital twin instances for a specified mdoel.
    + + +
    +
    Retrieve the global SharedData.
    +
    + + +
    +
    Retrieve the SharedData for a model.
    +
    @@ -460,6 +487,17 @@

    Workbench

    Instantiate the workbench.
    +
  • +
    +

    Workbench

    +
    public Workbench(int numSimulationWorkers)
    +
    Instantiate the workbench.
    +
    +
    Parameters:
    +
    numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors().
    +
    +
    +
  • @@ -695,6 +733,36 @@

    getAlertMessages

  • +
    +

    getSharedModelData

    +
    public SharedData getSharedModelData(String model) + throws WorkbenchException
    +
    Retrieve the SharedData for a model.
    +
    +
    Parameters:
    +
    model - the model name.
    +
    Returns:
    +
    the SharedData for a model.
    +
    Throws:
    +
    WorkbenchException - if an exception occurs while creating the working shared data.
    +
    +
    +
  • +
  • +
    +

    getSharedGlobalData

    +
    public SharedData getSharedGlobalData() + throws WorkbenchException
    +
    Retrieve the global SharedData.
    +
    +
    Returns:
    +
    the global SharedData of this workbench.
    +
    Throws:
    +
    WorkbenchException - if an exception occurs while creating the working shared data.
    +
    +
    +
  • +
  • generateModelSchema

    public String generateModelSchema(String modelName) @@ -751,6 +819,34 @@

    send

  • +
    +

    addSharedModelData

    +
    public void addSharedModelData(String modelName, + String key, + byte[] value)
    +
    Add a key/value pair to SharedData for a model.
    +
    +
    Parameters:
    +
    modelName - the model name.
    +
    key - the key.
    +
    value - the value.
    +
    +
    +
  • +
  • +
    +

    addGlobalModelData

    +
    public void addGlobalModelData(String key, + byte[] value)
    +
    Add a key/value pair to the global SharedData.
    +
    +
    Parameters:
    +
    key - the key.
    +
    value - the value.
    +
    +
    +
  • +
  • close

    public void close() diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html index d76f832..23c4465 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html @@ -2,7 +2,7 @@ -WorkbenchException (digitaltwin-core-docs 3.0.4 API) +WorkbenchException (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html index 996f2e1..fcd247c 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html index 294e1fb..b449414 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html @@ -2,7 +2,7 @@ -com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.4 API) +com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html b/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html index 2af3cbe..16c9fe8 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html @@ -2,7 +2,7 @@ -API Help (digitaltwin-core-docs 3.0.4 API) +API Help (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html b/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html index e149a6e..282504b 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html @@ -2,7 +2,7 @@ -Index (digitaltwin-core-docs 3.0.4 API) +Index (digitaltwin-core-docs 3.0.5 API) @@ -56,6 +56,10 @@

    A

    Adds an alert provider configuration to the specified model on this workbench.
    +
    addGlobalModelData(String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    +
    +
    Add a key/value pair to the global SharedData.
    +
    addInstance(String, String, DigitalTwinBase) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    Adds a digital twin instance to the workbench.
    @@ -64,6 +68,10 @@

    A

    Adds a real-time digital twin model to the workbench.
    +
    addSharedModelData(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    +
    +
    Add a key/value pair to SharedData for a model.
    +
    addSimulationModel(String, MessageProcessor<T, V>, SimulationProcessor<T>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    Adds a simulation digital twin model to the workbench.
    @@ -95,6 +103,22 @@

    A

  • C

    +
    CacheCleared - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    The cache was cleared successfully.
    +
    +
    CacheOperationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
    +
    +
    Status of a cache operation.
    +
    +
    CacheResult - Interface in com.scaleoutsoftware.digitaltwin.core
    +
    +
    Represents a response from a SharedData operation.
    +
    +
    clear() - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
    +
    +
    Clear the shared data cache.
    +
    close() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
     
    com.scaleoutsoftware.digitaltwin.core - package com.scaleoutsoftware.digitaltwin.core
    @@ -105,6 +129,10 @@

    C

    Digital twin development API - Develop and test simulation/real-time digital twins.
    +
    CosmosDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    +
    +
    Enum for CosmosDB
    +
    createInstance(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
    Create a new digital twin instance for simulation processing.
    @@ -125,6 +153,11 @@

    D

    Delay simulation processing for this DigitalTwin instance for a duration of time.
    +
    delayIndefinitely() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
    +
    +
    + Delay simulation processing for this DigitalTwin instance, indefinitely.
    +
    deleteInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
    Delete and remove a digital twin instance from simulation processing.
    @@ -138,7 +171,9 @@

    D

    A real-time digital twin of a data source.
    DigitalTwinBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
    -
     
    +
    +
    Default constructor.
    +
    DigitalTwinTimerMessage - Class in com.scaleoutsoftware.digitaltwin.core
    A message sent to a digital twin instance's message processor.
    @@ -147,6 +182,10 @@

    D

    Construct a digital twin timer message.
    +
    DynamoDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    +
    +
    Enum for DynamoDB
    +

    E

    @@ -212,6 +251,10 @@

    G

    Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system.
    +
    get(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
    +
    +
    Retrieves an existing object from the cache.
    +
    getAlertMessages(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    Retrieves alert messages from digital twin instances.
    @@ -248,6 +291,10 @@

    G

    Retrieve the entity ID for this alert provider configuration.
    +
    getEntryPoint() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
    +
    getId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
    The identifier of this DigitalTwin.
    @@ -284,6 +331,10 @@

    G

    Retrieve the integration key for this alert provider configuration.
    +
    getKey() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
    +
    +
    Gets the key or null to the object associated with the result.
    +
    getLoggedMessages(String, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    Retrieves messages logged by digital twin instances for a specified mdoel.
    @@ -326,6 +377,10 @@

    G

    Retrieve the name of this alert provider configuration.
    +
    getName() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    +
    +
    Retrieve the name of the persistence provider type.
    +
    getNextSimulationTimeMs() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
    Retrieve the next simulation time in milliseconds.
    @@ -374,6 +429,10 @@

    G

    Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
    +
    getServiceOrdinalValue() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    +
    +
    Retrieve the ordinal value (used by the DTBuidler service).
    +
    getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
    Retrieve the severity for this alert message.
    @@ -382,6 +441,38 @@

    G

    Retrieve the severity of this log message.
    +
    getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
    +
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    getSharedGlobalData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
    +
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
    +
    +
    Retrieve a SharedData accessor for globally shared data.
    +
    +
    getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    +
    +
    Retrieve the global SharedData.
    +
    +
    getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
    +
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    getSharedModelData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
    +
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
    +
    +
    Retrieve a SharedData accessor for this model's shared data.
    +
    +
    getSharedModelData(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    +
    +
    Retrieve the SharedData for a model.
    +
    getSimulationController() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
    Retrieve the running SimulationController or null if no simulation is running.
    @@ -390,11 +481,20 @@

    G

    Retrieve the simulation processor type (a SimulationProcessor implementation).
    +
    getSimulationStartTime() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
    +
    +
    + Retrieves the simulation start time.
    +
    getSimulationTimeIncrement() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
    Retrieves the current simulation time increment.
    +
    getStatus() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
    +
    +
    Gets the status of the cache operation.
    +
    getStatus() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
    Retrieve the SimulationStatus of the simulation interval.
    @@ -451,6 +551,10 @@

    G

    Retrieve the URL for this alert provider configuration.
    +
    getValue() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
    +
    +
    Get the object returned from a Get operation.
    +

    H

    @@ -475,12 +579,19 @@

    I

    digital twin.
    InitContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.InitContext
    -
     
    +
    +
    Default constructor.
    +
    initializeSimulation(long, long, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
    Initializes the simulation so that each interval can be run separately by calling the Workbench.step() function.
    +
    InitSimulationContext - Interface in com.scaleoutsoftware.digitaltwin.core
    +
    +
    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
    +
    InstanceRequestedStop - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
    A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
    @@ -512,13 +623,21 @@

    M

    Processes messages for a real-time digital twin.
    MessageProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
    -
     
    +
    +
    Default constructor.
    +
    MessageProcessorBase<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
    Base class for the MessageProcessor to help with typing.
    MessageProcessorBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
    -
     
    +
    +
    Default constructor.
    +
    +
    messageRecordingEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Retrieves the message recording enabled status.
    +
    Model - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
    The model this twin instance belongs to.
    @@ -532,18 +651,66 @@

    M

    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    ModelSchema(String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    +
    ModelSchema(String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Model schema with a defined entry point.
    +
    +
    ModelSchema(String, String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, and a message class.
    +
    ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    +
    ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    -
     
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
    +
    +
    ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    +
    ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    ModelSchema(String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
    +
    ModelSchema(String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    +
    +
    Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
    +
    ModelSchema(String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
    Creates a model schema from a digital twin class, a message processor class, a message class, and @@ -575,10 +742,31 @@

    N

    O

    +
    ObjectDoesNotExist - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    The object could not be retrieved because it was not found.
    +
    +
    ObjectPut - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    The object was successfully added/updated.
    +
    +
    ObjectRemoved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    The object was removed successfully.
    +
    +
    ObjectRetrieved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    The object was successfully retrieved.
    +
    OneTime - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
    This timer should trigger one time.
    +
    onInitSimulation(InitSimulationContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
    +
    +
    + Optional method that is called per-instance when a simulation is started.
    +
    onTimedMessage(String, T, ProcessingContext) - Method in interface com.scaleoutsoftware.digitaltwin.core.TimerHandler
    Callback to handle a timer message.
    @@ -607,7 +795,9 @@

    P

    Context object that allows the user to send a message to a DataSource.
    ProcessingContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
    -
     
    +
    +
    Default constructor.
    +
    ProcessingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
    The result from a message processor which indicates to update the state object or to ignore
    @@ -628,6 +818,10 @@

    P

    Processes simulation events for a real-time digital twin.
    +
    put(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
    +
    +
    Put a new key/value mapping into the cache.
    +

    R

    @@ -635,6 +829,10 @@

    R

    This timer should reoccur on a schedule.
    +
    remove(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
    +
    +
    Remove a key/value mapping from the cache.
    +
    Running - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
    The simulation is running.
    @@ -643,6 +841,10 @@

    R

    Runs a simulation from the given startTime until the given endTime OR there is no more work to do.
    +
    runThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
    +
    +
    Run this instance during this simulation step.
    +

    S

    @@ -698,6 +900,10 @@

    S

    Set the next simulation time in milliseconds.
    +
    SharedData - Interface in com.scaleoutsoftware.digitaltwin.core
    +
    +
    SharedData is used to access a model's, or globally, shared cache.
    +
    SimulationController - Interface in com.scaleoutsoftware.digitaltwin.core
    The SimulationController interface is used to interact with the running DigitalTwin simulation.
    @@ -713,7 +919,9 @@

    S

    Processes simulation events for a digital twin.
    SimulationProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
    -
     
    +
    +
    Default constructor.
    +
    SimulationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
    The status of a simulation.
    @@ -793,7 +1001,9 @@

    T

    U

    Unconfigured - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    -
     
    +
    +
    Enum for an unconfigured PersistenceProvider
    +
    UnexpectedChangeInConfiguration - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
    There was a runtime-change of simulation configuration.
    @@ -825,6 +1035,10 @@

    U

    V

    +
    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    Returns the enum constant of this class with the specified name.
    +
    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    Returns the enum constant of this class with the specified name.
    @@ -849,6 +1063,11 @@

    V

    Returns the enum constant of this class with the specified name.
    +
    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
    +
    +
    Returns an array containing the constants of this enum class, in +the order they are declared.
    +
    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
    Returns an array containing the constants of this enum class, in @@ -890,6 +1109,10 @@

    W

    Instantiate the workbench.
    +
    Workbench(int) - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
    +
    +
    Instantiate the workbench.
    +
    WorkbenchException - Exception in com.scaleoutsoftware.digitaltwin.development
    A Workbench exception indicates that a real-time or simulated twin caused an exception.
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/index.html index efbce74..c1028e2 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/index.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/index.html @@ -2,7 +2,7 @@ -Overview (digitaltwin-core-docs 3.0.4 API) +Overview (digitaltwin-core-docs 3.0.5 API) @@ -47,7 +47,7 @@
    -

    digitaltwin-core-docs 3.0.4 API

    +

    digitaltwin-core-docs 3.0.5 API

    Packages
    diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js index 13931aa..a4c179e 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file +memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addGlobalModelData(String, byte[])","u":"addGlobalModelData(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSharedModelData(String, String, byte[])","u":"addSharedModelData(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"CacheCleared"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"clear()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"CosmosDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delayIndefinitely()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"DynamoDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"get(String)","u":"get(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getEntryPoint()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getServiceOrdinalValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedModelData(String)","u":"getSharedModelData(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationStartTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"messageRecordingEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectDoesNotExist"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectPut"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRemoved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRetrieved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"onInitSimulation(InitSimulationContext, T, Date)","u":"onInitSimulation(com.scaleoutsoftware.digitaltwin.core.InitSimulationContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"put(String, byte[])","u":"put(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"runThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench(int)","u":"%3Cinit%3E(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html index f782a93..0832a3f 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html @@ -2,7 +2,7 @@ -digitaltwin-core-docs 3.0.4 API +digitaltwin-core-docs 3.0.5 API diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html index 1d46006..e355db6 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html @@ -2,7 +2,7 @@ -Class Hierarchy (digitaltwin-core-docs 3.0.4 API) +Class Hierarchy (digitaltwin-core-docs 3.0.5 API) @@ -93,8 +93,11 @@

    Class Hierarchy

    Interface Hierarchy

    @@ -106,6 +109,7 @@

    Enum Class Hierarchy

    • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.lang.constant.Constable, java.io.Serializable)
        +
      • com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
      • com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType (implements java.io.Serializable)
      • com.scaleoutsoftware.digitaltwin.core.ProcessingResult
      • com.scaleoutsoftware.digitaltwin.core.SendingResult
      • diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html b/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html index 6f04e5a..86e2438 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html @@ -2,7 +2,7 @@ -Serialized Form (digitaltwin-core-docs 3.0.4 API) +Serialized Form (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js index 1ff095a..3146686 100644 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js +++ b/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js @@ -1 +1 @@ -typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file +typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheOperationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitSimulationContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SharedData"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 new file mode 100644 index 0000000000000000000000000000000000000000..7f627fcf3df6d5eb896ecd435acf7340138d278e GIT binary patch literal 12234 zcmcgy3w%`7ng4&2Np3Q^Br%Z4ph)nU7X&SWB#0tJ4I~5zfK~$JW)l>sH$C{@iYDmvyE8@7&4EBtetGpUY#; zx#ynqo$vAgzVn@P?h7A(|0w{c%R@eRkYmAXBNussl8XWx19hQ5xT~&p-9=7ET#z?A z7!Jng2y!Z`mRradoZb=Xsf%?4LQW(Rk44tUHwB_jU1zW>7!QQvn}XrGPG_SNiuCq4 z;dotJuqP1;#DkIWib!;W6ZOG|LJPKyF(?uo7m0S&1$qM=-A-L7($y8@)GVi8RM#Bo zY6*k`T~1U`(B;JWZ0gf1o6}s*3k71ahN|XIqry=Q1+Y+J;|P=rtTj53lAS!_I1A$h zN1FK(@nEQKaWoi-2IE_nB%Flf!&u}f%5%^thhmUTs zaFpQ0H0_Q^xFZpbs?z4As^DpUxaDjE|c)nO+1G!jM!$J#i~ z9ZnO4<1yv_1RE#fBqbROMdD4J0%_9rDjU_P5%|{hL^_?&qCk%$D9uoQTRcj08M;$! zOhuhw+?rU*-ixD=4ks3iP|*#|BVwi_LJ+0Fk{WEtpKRk4d_l=8z8W_>9TYbbZVVGI zWa_Mu$!9`x*>D zxN2MQ5=Y0MZQ~prKQ_axO=0%h7zpK~NpQUD)D=-D=ESE?om#

        MKr&RRoj0^udRP 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 K`MMeR;NJjbSW&kC literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 new file mode 100644 index 0000000000000000000000000000000000000000..850b9a0213e63c9da6953656aaafd9681341bf0f GIT binary patch literal 20564 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 S4g5Eu-ok2~+Mq6{%KrhYKMNuN literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5 new file mode 100644 index 0000000000000000000000000000000000000000..7c681bb63bb231f877eed8269ea14ddad18b1203 GIT binary patch literal 3017 zcmdT`TXWM!6#mxN*cF7_XcYp4aSl7-?% z4g<(#kvH%e42FfCcy+NWTz{u2JZZi3gP*sAXKx?DAKg@eSKbJ_Egj!m@fwaN7#7$2 z!mgdfs3@}M4GiJ}LvGXYT9SJ$lx`gP$l46pyh zce&+quVGbX;CKx^@1lXv)x6}UQ_sW1covroOyDwQ)>mSkqSc(H2&y93byN;{N+yun z#+Y5`ol*Bf#1*SILTpV=W`BB%q>QZPcEHuTS58Slr(FAGNA%^e%DuWPf=aQUC=0eC z_CmDUuB>EnmEqypmae)@ZB}3AlIL*^UuJRLzzy8&7cXYn7>tIH&(u~_@C>&LC+lAf zP1IhlwaQ!D&-hLyk1M#XRH49dG4eSwp}3*AmJCc`nqh>ZJa+vp?jGjCFjk0zW_bH? z@5kZ>Lu!d?#xS@}V)MM++!8^JZ@FX{UiV2KH+bNv@5q>v+fIvNsrT;bZnIA7cIjP( zYAH`@6~n-xKBXgRNjP4UP#M!?U89B?JrJ$#Bb&A) z4eQW!wpRUiV2ekN(gQQDi|?p2ACq*yNYFhiML)U@(LdB>LqF+~pr3RJpl61DY0QA( z4!!+GUTJ!cmp*`%ruLC7P4DAeX=WcoB{Q{;vEOMl0ZYx%z7rJVGIFHZ=W&%TAd_^X zxQ4H2yc{CoF21HOHUAr8!t`62xF~+(_?B2C_1ky!mZI?q+@mqY=2yx>u`x?~L}ZV6 z>=BJUj7?3?n5jST#XA~IYBCuOe6uUC*$HgodxBPhP0ZrH4s4==IUU%f%ji4>{(;6r zddl*UEDK~wV39nRuuT7o(gRHq82JlVUPZKq-ed9uZYeThWkNC~O(ujKiO4Xlbf9J_ zydpJt0QDZl7#OPyX0QYE2#+I17CjYAS{3FvhjN#5y5qbW>pXPac{bL0O{e+fe{s)w A_5c6? literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3 new file mode 100644 index 0000000000000000000000000000000000000000..16c09a8c11130093aa00240130a34bbf5931b479 GIT binary patch literal 11067 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 literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8 new file mode 100644 index 0000000000000000000000000000000000000000..6b2266d0d317befb986ca1199b5262d786852560 GIT binary patch literal 1702 zcmbtV+iuf95IviwaZ?OUQ|{&707s(iDp5MQTuy;A!hDiNUoidsE<3_yS%5 zaglgHJo8bAvq=C8imIxS;$4qtj?d1V8Grxro(g$qQR z+b&$i@Efp^#h^g{y7UXNKz{C-T$he7gQip0kry;8gRrsF!Y&&_$O+{BI4rI_Q?4ed z2`}*Uq(EP>w46mABNles*n_fZxq|XpEr4WLVpvnb%Cg;O?8qbP85(|ougWic(?mRej>kUpJGVZ+80?yzmiP2gTqzQ1z56`tMllit9BiuG(56V$#R z1S*>LWgM#*$2f6p2%JSKmotM0;L7R9ftlui2E)24{C|b4Af`>>JyH>M)p0% z-XQZHB?H-)IPAFucVdT literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4 new file mode 100644 index 0000000000000000000000000000000000000000..21894d2c2dd84ae87f034065cdf5b2dcbe7d68f7 GIT binary patch literal 1441 zcmbtU>uwT36#fRbY@w?~idyeCRG@`zt0qR;#?Wfoh^-NWG5s|xBWzuE$nGpn-%5>* zi9dV*AIf-!Vrpm&X-dMJ*|X>S&V7IV{_zvQ3LYmBL)?U6VFC$;sw2C0=x|TSNQLsF z+T($+TW;G`+*5n5Z?{BWc(T_OzOvuT;8RohPN&`>v(`FSJh#M3xHH5t$nK!cLXYr1{&URRW!&up>RDP*Qan1&(;>>eOdXSc$TpII7bN-|=Kf)B0Md zj%=AIGdv&bdQ5jLEMSo)x2I=pGk-jP>eXrTI~*KJYjR73YD0!ZYi;_z2-Z9vh9bmm z+Q>8*t|6XI>%{~}(&h~$eMRWQV$gpEH^}lP-8M*SO}03909KqofLSaZV5;~X(_cs* z!!0@!#0fkhe$WcW=*;2{?vm6u&C76)?lF2|$l*Snn%yR;krTylFh36rj_95a=&VD7 zAsxd5JUjtBH40ui5u8V12riSqE2AUEckxUVr I&YOOJ0E;Vk=>Px# literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7 new file mode 100644 index 0000000000000000000000000000000000000000..18995871bec4aa1b60a45a3dfd12388a780faa25 GIT binary patch literal 1515 zcmbtUTTc@~6#k|yU0SwME+Ss>Qnf9Y1@RU^VhSi~frOe8!_#y-whP-GvO6vMi+oig zG4a7y6MvNP%(eysn1-;)&Y3-X&Ue0Znfd+a$4>yy@ic)5q6T6ndJtzQ*s@^-Hg|<= zsz82Fd)yaR)u}m(yK2wztg2`USMD~1r>srs?^J|m*GqLWt1fZHGqVhFRd<5SG@%vG z3pc0v^_oZ^$5hIwhBq4F<@ZO#1MuV z(uaQQm2F`w;yUkmj#^-dW^?5PMsUf%sENzC!tkssds|X<7P(y)>$}3|%8_14an;l$ z+Yy$e2-c)p{^$f0ZN7U!{tHPtj^LV!>zZ1sjlLlovL&hp#u#SKz;;6fO_%t*&vqx& zrQvfYo3T~Ml^J4-vMLz*i;gGOnvII^-|>n|n!%!^0V{Lg(cc|qOwSC%(z*F$X6G0Z zC8y?5AAAZIuL<>5d}0{R=1y{D=%xQOJq@Hr~wdVtb>t#QHx-rx?cBcvmHWN??H-f3Kh zd$fM z{lOgaSOh)Umxe2ID5Ib!4usPCLlK$at&Tr-MHCL&12XGva>M;KhP)Zb#D7R=t<%EQ zODLe|qU2!?9z%JLAMil&s2}Wh_e5xjZCysvG#F+o)lLy-G4G=6;T#qio@DZen(}M% za3FT~Ma+%VQQL5nCJf$4-BiNn#;~59%zwe^E*2RcO%cs&k)(>U+p1*KX0)VU?Jzh^ z-4hJ+Eg6ZObl4T~8{SoFceAiw+#()nxb&W+DP!Fwoc4TFazClahKs)CUr*jJ={lyVK%gL#PE2!Y{p|?YqTR0^Fk*y65e(ciMXkFl86L1 z=>ZqOa2~8&wvU+JwL||LE|7MKb`7$~ku23#zJb-g!~H_194^wDCmY~BmT6rYTj3He z(~0ayXpAhb;OYeH0ZHqTW1sDM1fx5`@W!_j42EmCp6S^?(enmnHjaOlq~&zJ;>>YY hb;Q@1usXOkitRS;STFdvhw4bmM<{{6Kg<1qPezfdw9JgcUK7il_m;_ zO^iSLM;T}D4y;f@0(ePpZnwMd&AgqN{q_6%4*+vmmEnV5LR|p$XkZBLD*H-8Q}jaO zb#|BMY=(weRafnK27ffR*@#>yBCi%yThZ(T zRZrykKG%%B64&j-mSKL%ay?hf6lqz0NwF1%y1ZlB(++dlR<*=S#VW2Vdr1i`45{l< z435iaModjZ@>FJ+L)OU6ED7^)F_%}Dzhd^;%# zgEtZJq>KS{i355VKvZOTeNN+wDItCn@KZ8k7!iU#VpzTbL1UW|5)5OP=4sBLVymvD z#*A9f6}xPb)}F4_1vOihR9@olq~?i>b-qz9Wx4rQ$!atc zN*h%5n~JH5u{T*~7gdWSy?%vJ&R9;5Am9FFI@~*98>!*+1rdr+`~^%k!`s|_2iHPkpOh>PVA!m%Tnd2*}IJZcR z9y}^~6+_box9oK;4w)DOYr4+OMNP3RZlRCbz7Gte^b3jBPj-wh5Ff@V@2Q|LLEn=! z^Ny^KtQI=%>|;y5Nb!+a5{SAvr?NPxP%< zFyPWWI7_oe8oa8a37^u0JsNQlzwl_HNO`f$lT*TlprARzPzAAVI*{SB`0pX%gM;sC p9rW=1Sft%PEMb|fOe)8yheqfgU7>M5jho4eC*m6V*L`BH`2%R8GK>HK literal 0 HcmV?d00001 diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/previous-compilation-data.bin b/docs/digitaltwin-core-docs/build/tmp/compileJava/previous-compilation-data.bin index 02255780232d64123affee2486f1080619d5c973..39ca4be2e7df8f39fb1fe6c734b77c2c29ec8506 100644 GIT binary patch literal 7453 zcmYjVc|c5C{6FWO%ZpcB;StXxBJ{ep^h8NbMKl`CJj=6Ab<5N=lbK1SDB6=sE808~ z+0tS!`z|SwHCaQ?zVCkD)8zO2-GA;m-}61+@8`Rm?^*1SE0!_NM9T8*`1brSya9^# zQU`QEtF>NorJxSdY1KZuV7W%;%q#F?TQlA8h=kg z<+ZRIN(k{10_l8CWfaF%^=MFQwdXoDce9?_-RU=}aSs%`5O8?+MA34cocm_7p?Ilr zFW(cfgSH>8Ep9TI)JxWz|DA8&2gP`)HG*O1KTw=p<*ft+SNB`qI2wNXN%-IWmsW7& zV*9%E6ZbYnae`JW_Z9jBpO;Rp3FS)v>6qD}?u^^mCX+Ie#Tmr_k(qR$tMMQdty1WW z%u$?Lr4vGQ+~6K39u^F2ZvXPqg}XhC#;h4E9^%FhMNw*BQ!XpEpS|e&otwT9;`6Uo zRTNoB{*or`qZo}kB$QK{Z+CPc2UEw+3%Q%^Gm0A~8!j0k={*vy6f|0eRtN47 zMxl6(da=S=&{(19&_ID3wr_Xg-l^ly73C_D_YN|S8|`2%C4Zr4oe($%MQePu+{@)D zpUYD0eOBfDmQj!+iMJ7rl^Pq3Ly3S|qgGN!IL9@Pe)%ExfMh^bsmb}3f~}*Sq~Cay zpiz5)FVq@)@U2$h-tOx=>1lNb>HD(UkKCqy^CpNKq>iq=2N{`jTicy2`1AaY+9$uP zH7?1p$QDVRq`i%tQLIj`3(|70&t|6+rL+8z?f4R48{XV$&9)Ust~~yj-QUej>^fD( zSaR-Y#Rx9-`ad(;&+D>iY~T6eF1J@}C8BAP-X17X4_~43HRr5d>Nd-S_OfQn-#6ZR z{=GozA#>>UH;VP5i8UR?3fds0j?*~gE^+m^GU~M=N%yMw@Z1@)URKZ`ip4)t}vFQR74YBO+&ZR^T*4bw-opP^b_hI|ZrMYr5Pbu+231GW- z5JbhDvpyodd^y&k{!y>m@A>hWf*rSKQmX99whK=uA0Kt@%h4}Gy+uyrxQ^{F6g-w( z@Zf413v=7ua1%USr*j8G{){UOcv9eQ9~1o|d||wg)K_NQc_ARwELM04Tu^vHz4?sh zHy6%VgqJ4H?I7l?+k1U`>eJ=+TlT;|WA87sQ+P1bxqs&S4-fbn@@93u?H1olU32`* z{H029?*J5|_7;>XaNt5AK<>`X@whVG++kZuhsNKx{P28MqZT=ubGIuSjvsAt$}6@C zv`>8>oaD(_899x3XVMcpUhiYl)aB#IK=C4n-Wn7G=ITtjsu`up`+u?SyRSNL*SD%S zjanz2w0Do5TzJvfPql|9T)#c~PPAvY=?8DY=cc-g* z{Gc%BaOXdlLa`CNf@n@GL$NAfg-YPIt_bqHh9{o-$Zx2@?stzHbCw1%dn$jux+(R_ zc*e4LTV)IPEO%WOmAU&X>m9E@0Ts}s$~ zr=Qxfq8z=uaw&R|Ydnm&bB_`>)C}xA{89MRuL<_ETo)u@k7?7nw4yve-9GWCvL$ym zn{IS;Nd(@NAY~-CQ5X2bC~baJ{)=|JuQ`XM+^BjHx6R#78Zeg|UOUru8B^Z4(<`=L*1+L`Y1n0KI)=#0p+s5# z+8C^SzW%{}#_sE?`w0daSj1*x*aTEsom{2Ua^4GG$6o$NO`1$zOYe!3gBeaa)2ON2 zl2IF0{Sr1eIxzNQ7B)k$V&o+^tGdR$vn$Anefd{V?`&)q?9QphyK24+{1_c~Yw6VJ zKU<8~VCh;cVfl5SAL^694XG)SeJ;LX)x&Ja9ZU0+?K#*i%$++eZmGQ4cyj)`nWJk* z=8Ucw&TR^uW7R*e5{+2IA720B(v(~*&cm`*xU(r2eALYGsnwAM>5Xwc0>7E&+AA<> z$7EsTCPr$E!x)z&j69)1Y~-OR5F=I+W*mWnF!sSPqQ$6#dV#u(u+)E%=f&}E}>ERM&C7%j&b5&tk_WP;JJYR@1S6f6l11OC21 zx3!y#5-?`7K~ivN``C1!5KgC3P^&H0Yj0X2r-&LZES_DN1cn26u8wc60m>)3s9&S%>)Y7B}QvNWM~-6 zSRgT)1sH9-Tm5K<5k>9Y>R?F(5@6`3LTz_69EO1^rhaupei-{B)CG57Y&^k2a5+N3 zn8^m`qEL)I5sJWUtLZ2jV+`?#)&KJG!~)E($NayTH`o9R##gQORSFv+k9@Uim0=;I zKm0M78y103yna%m{x<+zgOCkHkB~oR{NR@gL!k({0BVHXS{X7RGM+xbnFV7Ap=|gC zBeV&-6=8le=C@$J81q{}ky_)s4Isz^>2A3lqj;s-7b=$T4vb=FyjIy;0%fZ9}Vi09tn;A{UU$1=9gh{ zId-YQ{B8)Ys)``3e|A9~ps ztZb>q4i~Vj09)07Y;Sp>4z?C$hk<(c9a4w+OB7x`R6MOfEmCU$$UUoVxsqjLQ+gbejWh}Qt>iLxyMm<+ zn7>Lrca5f6pu+GvSOPWDTdwgwk2yu`3G(e)AJ=``t3R*J@7L=FmfpluZ()}L+z2Kp z1f}D6n9n9aQTJ8ZP1srZQD!CFM zZC`7ay(pl`1ND7!u(@u;}d|b5_ByTy_Sl^TkM^kXGR1hr{^tgCI+kj!~9dq_>4wKuA{1fYw)_w zdsAl(nQr>}$mN#f;q#tj{srZFNdvF-RRD{ZGjcgUAYqyjvas;5^k<&KtXnKP0wGJOpatE%Ngkk#;pKH zF|fu}zR?U?C1@0KrD93zVK|0?MXgkLg>tv8;v`3>W#+^@j*w*jIxlP!<{JIg^GAuR z#p7msnG@sdLt+^|j)CNlXV6MWayU@y6oM9@N&cFAuqgPGt>n%lPo~PIdjca(WcZZ~ z#5{>XF>nM@8m?kcd{AJZQUN);vHRKRj$3x0*c$!1XOP9(%gKy$3d5%|uoCZK!_~k^ z<4?2ONjiT(`_Wku!5xX|_e4|kG{&VG_vgxEA|Eb`|Ce{TZ9MV7;F`2_hR>kLG8q&H zn><_+0F}ArxJE7^>|*Clu~lpBHRG}vmok{U=IynNZlcDgr;SHuTVLxjIGf?uF#K8u zyuFS=3G%=|ICcw~96+HFf;9@A0J1Xs#jG2#Q>U63{_pqTwFA!NGO%!fK0;n<_TBQy zM&otYKOI>8SU7lRUYI*r0J zNGE8y!8WhPyb^)`RvT! z`b$T>PaROV8FLLQCWbvd?i{ghbdaQ1W76Q=48MmuXfLE{fI0x6Glv4sUQ_x;j_z%$ zdiSno>ON-1R%Sndq*2jupHG@6&Qyg-R7Zw1H}olVJ-~>I@Ih*N>!EyU-k*oF4o@F6 z?9A}m>v2ctRx&PCjJN`u_UFD0x2Uc^HE@-D{+y+|a^IC6qOk#m>-OH7l0NC3Z$RgY zX?B%Hg@+mb2+gabkj0_$0J;okoUPUkbnRPt_(ZRB3;WrBKF09JY0yuA*{~ffhD8Bf zF6CazQoq{KLpC^HeQ+jc=}C}6mqRAia^~zP&Pugy&pqwkIHTfbe445Ndd#zV)^D-J9qJkWGF6sD z5l;KhdcRs&IR5N?&w<&y%;K*wW|53LH+RCy+gfeFnvsVcv*o=y>}z1$zvHVAAWuKo zm$*Uo(#rP<$4*VtrrfY)CrrJ@@Yfms2DSPogQC1WZ-LwWygg|a?|wq22aZ^D>tAuy z3-y>v)JSy$y~pZq9sgU;ms_pdb|@ptD)lzQH_>pk!n!p|bNb$B?pl+P)a{bz#Zh+{ z{w}rc9+j)F&OX0~eej#BIj1>fVOqO0?DBoaslK4D-p0wmT0TT&Lu?~br+*gA6i>(!DL8gHO$^YiB( znyYrNx_aBF&o$3W`It-TdnIt3*eP5#VMwC*QvR|382%~4Kcl#xLv39QF-HosHlRZ~1Tld!G!_J+1ni(#0ug}hT?GvtFO@3gz^v5HUmkj@k z>V8d^Hr+gE0V`s*hOC_ac#e6c$p`V0zrVg=__uVuy#ppcL8A^>1Wf&H-G^~~jK_KQ z{WA2A_7>CMGyDgN>*N1{QfnxRqAdfx4K6R$T_ai?T$L#@%u)D;a@blBW!*!d?bPF zTTbA{9Z0uf{}T&XKX>+Rhn)Lk{EP;8uONIBf%J$baG_Rf7tsY-Wz+dB`h8cP?%td7 z*tM2lVhA7x`jj(ACVP6WotDtPvz6UI)$CXzjU(bj#&i|K2|Wj&C|giM3dvAqG-`?w(Zj7rbn(Ozy#u4fmZ^e5CuFc)QtV>P4f7e8G{x*d(fD% zrYwm#f5)o`90~;bM#&|2?J@F8>a^odmr_^7eD52XOe8mP48z$+l?%hlH#)wXu)oS+ zn*PlJ_ zMLu?HOe2!-IGwj6xqqX?wc_>Tq2w;Ia~V+pkbESb1-)z$2?i66(@ZKv&+`z*s;G^7kJVa$4xKu{IEW#{8$ zCXGSoD0LGqCaC)VQ7=Lp=VNr4{?B1_gN`M`oQoLUhc=VUK)}&M2m>YRXqa$L?cPO8?N` zjM1I|HGNNPy;Sv6`}8x1izBbUHS%p&M*6q%Gw-)huI=ZwP_FV7y!ZXD$OF&nVlupkio|`%E(fT1)6?GC?Sk-fOLP5x$golo4q;8CF4t?Iy$akYNTLI`%P~J$)~v zwV!;k9Qg38eT3gnLoBWFEPbeQl*$grbS;IEZ! zoW}^?t`Z+7{0SmGNu;OfxS`Qs`We=z34ex2&l2}@L{v^DPid1h@jT(HiR1#2l#`L8 z^t{7s2!D}?YKdzdnQ@AA9b~SjyIdlCJ#jusI_dk&Wx`(}qC;eyzVF>Y_^ZUZj&#%a zyIdpubt1Y!Bz452O-95`!rvm|gTz$N6WB=j+r*`bNb87EdYdI__zvOkQY*Y#xfoCR zJ;L879uJ7aLn13Do&ToJ1Mf(i3IB-5s)?1pKkPB#pAd%=WQ@K)x`pun5$RJRt0SEk z>S;dD2>+aTyr3p~w8=@pFA4vOh)$8rHVhf~HR0b7$y*{WC#K`|Q|;an{ymW#B5nPd z9|-@E2KHwRJ`w)+O8lAdUx?@{k=7EUHoFIWBm8$FdO_Oyk{^VRWJOIseP^?rF<>OgV0_$2%e#S?g$nq;$*~6dCn32Tt zbwtl^yo%+MS=mz((%NT&vvCT`r?SqgS?4rXc8XXoU8Wxi%faa^pTUYVS+`SUXj_~H zXR&-X>v8TUK4A^ZuVo$I5PQ9R+jT6T!#d@%5XT-pTWRgO)3-zVM3%?$`K)UJE2}4+ zIlUHmd|J=)|FV)ame)(L*ue4|S=U0!W!c6hcH6}AMXbwa)@=(bt|O)k^yV{j=M=O2 zR(8@u@`rx5$u^eX&PsQ%l2Zg;UG>B@cqhx3uui*JSUYW~u(p)t%h(ww$r3$NXgSMQ zu%g|pG=cpYtqFSo73;W;& zo40cDVU|C_N{_OTJOQd!PR8GlRs`l4>vo*wPf)W@vh;OYPUaxv93rly(9OesmFoi?(z*kvzT z?3KM-DMZ$6*S?h{A@Y4r<9>d>_dn;H=RD_mUe9u#bI#iaxnT+CLc{{vhPI`@Q3Dj~ zqYi9`R%v~tN|`!Xr&asu7E3j<_9)p`Ay??6O5I|G>US8)LS#yHP@qhuGeprwXoVs$ zSSi&h)T$0BE(E9@QJf-Brr}X+V33kOF*V3y(5M#%d4Kc_{ge=B^@oeGr=Sx`QfmUd zWh$SAol#P#k1U9-=T$}te2Gb|TC4r1!?VsKrgoXsRboQB(YD=DoR3-~Gwj#{B}i4i zN|1i@nAM%rOUqv_ozW+vh#wpOr|Vxr6H}BR(`u!1Sx?~e(Wy0I{GmDR*S5P_F=fny z?gdVk6^dR$vnhh!C`K(e<=4fV**mp7yep3sUV5KWl-oztS0XS+v0!LF6sJ*#hVe>^ z{f-XgMEaO{p^w)4+3@`(7NP+nlYwZZOruq3bzp*Q5K7djLlnL;jU|c=3zG4g{nwJr z#RanR!JT4K4)hs2*uhFnD2mm|f`*`2jaR!@$U-oVvetw&%45pfUxQeDs6B?UN zN3jr;Rqp`iRMoUlo_x?>dw%HkXLW43y-vQ05y9{&nEH#Ld?FFFLrX*t^f( za5~k}mfuwx(u-OZnl;Bs88=EmL)Q%n->PAmA`Q#?yz+;KL5 z(S#^`Wc-t>Tg}yZQBT(`j_va?tEHPgU+Wmy>F&xN7wOQsfEi{>j;?%w}<$UnfLRp~Hfj5fzoalQt@?EV-#mr@Ho6jt8 zlDe6Uv*TC1s-Hal)Tl3ieR%11YlLOKgkKnacvr%kIjXHKk>>R|BjUV;J`N_nC=QI% zneru`hf=ZP zET01StfD8*zb#0fQKxoay*t=$t-_P|qj=b@kdj)J&ydJ@WLWI-4I}d}EUpf4QM&XE zgbgh731*R2p?H;Cp_1_l&I?0Ytgr4ZHLUyA{d?hUV}5bFlpR&JHP`dg_h!#4Oh2Y} z3KAJR+wsS>Ps2-xmyJrCkg8A|jA~lsq!IZH(xMc#%1 zm*f?rcC4JsXIfO88e(cS*kkec&`HKqYOMIf54@hHS9+YR(VhBt&)Geb!z5%0BvGJ@ zm)JhK(Hg(a4GC)@yH7qBO(XB zs($mj{^_{-#t0|DGN^JYtxl@aY59fai{~?%t|$vQK6F*`HE}mlj*J#1 zE+3Jb5^0Vc_z}|lyCt0x8tpb`#W#!${xb@j%N=;N@L*MQzb~-~_adgo4t`}Ejm68c zNYF0^qd3^+GJarHzU14UJGLg~10Pyhr0tKz<^c|Tt)=0oQ@v}Ze*1u~cCW2JV8QPU znrqu9=Oh}sh?Z@szcx7z3*)gQq@yXn__Vp>8{1P0GU^gcf`0VQ9zF-7He4hcZ;uvW z9KekUMiR^^0Lp1iFo_2hw3d6fBb~+PZhKu?5CpOpx6Ek3QB5Y=9k@jn(d5 zY-f6+UKp!6VCaKUTM3dY0_;(LjJ>$I7HBZW#zdkBKsKP$7Fhv47#X9H7^ud?+G-~9 z02}aB6plHGF&>N@F*4woMx?fflMoQJqSJ$m!^j1UUogfIfO23QhwPC%P?%7A6pfi5 z1Y94WP6ja6Gh3ZuixGo26AZI@#G@xiODm~O*#JLB)Z1Jo*|VQ_8PiBSqz5&#ga6e>S8e|PDz3iFU_>JtW2 zZe0z!>XVBlyRc+8rhAy5_kt#k%ugxv(HUCq123xsWGcSt?%;RAcWXP$*#GR)P|wQh z{g@uWG!N5!rtlyr^Jy(lhhTM(G8nw2Ex>3+(0@nsPR!d2EbVsO|2{YOWZC?{vxkcd znR|*r0lPi%qiTQjs`JYp`6QyL$7q9wFQ@f0&j_07(H?4UI~w1W5Zgny+6J_@Mh+k2A?O^H(-kV)13{l8CE-E!0OD ztc9bb0`pGM3$|`RL#mMb+XLn~@5-w&y@KggX5%%0t&-_#7qz?Sfiru5ICcHi*`@PtVtR{l-DZK;$`!!k)ge)z+rytsR2h+QZp%Q#J9({J;d}8<9ZCD{1i&S1WfN=N~cll?tCQ{=RL3==8L; zS#d8SMQeYb7oLjwx&ZZj8)2nzte1}kF}^*p9@7Sv{O>VZ2}vFV7Yv0=3(!O(-B08$ z{yI+d@VPfvGP=tLEdGe;Cl>QYzy_BBrQv6AN^nq+QUN);z01Ye_PdME?T!7=E!cA7 z^(O4{1=Fu=Ctkva-++_FpJlhRcz)lu!`DSFZclo*tmtjgj9rUyPrfiN>glq?t<>SZ z@x3W+xMeaRilfmSUCx2GV>px~4GMzmrA!mcv68S@qtMAf)>^Z;%%OQY)x@P+TNZEZ zTM@^>#sT_J=^^tLtC!o2GjD%A6+J9Io`d=Tbh0R&uTH6UcK|@^j;sCC`ySv&;5vcdn{oM=}Rh5a>A*CU-xJZSGwx%@AFQ zTHuz#Ii+$_%J6z@$Hx!wdR3b0+HHM<$<%AktDdHDG@Ti;ii2&b4O98RdTEGbTEC0C z!oS{;e?D{A`tWLQdIsmdhNEi%5MBomv^tGU8VHBVdRQitwpNt~gC4I@_PEq`*z6x4 z6^14oIEV9iBZpS#bQ*Z34wR!N7Kqe|EHIG4#eWpQqaI2-J1z3%wP zazHqUh6=6ouwJ~8~wS(nJn;lZLFb;$!Zadb0t&=wA! zjOsvu&XopUyrq;!4ga&ZsQ>G(gWComSyVLqxAPV&W~stOs#61>)tc^b+s+Bo z@D65r>oqkZXK>lNvYGvdR9IiRopAc^ot$efC(Oa7J^3HjmX$RZ`lU$c&y6^k-FRph ziw!8uJaTVx#-v7hV8^0qb|;N??B?hm4)SU*hvLGdfovOkUaZvhbL(}o>|Bq37Mj_A z+sD!UEa(ToY&Z@=U{e5>YoU+wkpGq81Gl-{d{U7Wkq1&BHjtn&S#i;Zw^i*s{8;-a z!D!Dje2}RCdeywtzq;68Nj@c1g-bWByl{wl1Lzs+zCWEDTzj|R%f6y6wbF+LoFs$W zhxwk@=DiPJ`nYUeQt8#2r%QVka){D|kI3)A{KIwu|G zras3L2=<|zZW?@}jcO^x;J z!0JnTf5h);caozeOj#qFoc4OeF|};r_>2E~_gjC^Jh7BBe~BIVzbCA`uhj-_7*^)E zUfQGG(K62CIX(pe^7e;wiSJ({KKVK6%!O&%v^(Pj6Q-W#=oyZlWmcc#P>iqld2qYG zuQ$u$;+JG*(9lKqwhCkF)uT?L3rsiAO;&Yo|9T58w9VXCx+capy_};JEF7({?%8O{ z9}nkmJunhax#nGMbCIL}FxxIMx%%qt_g8q6|KFN_G^LikujGYaujE`WbHXalyqcSy z%3T2`$mH;n)Pxyc1xV7Mp1l0wnfJ%v3oqAInmX_EKc>9K!C?eQM)Z4?wn+MDs8#LW zVf#O<64kJH16{jm)8D0kt366?-ZwJ6<$Wyy^J%?q1dSCsFO^IfxI%bs)0yiWy}{91 zhWjRmR)#=%hUXcSgr@(x#X{MsXadGp#P z-M*RnWL(70=iP5}^bXT~mu+o!c(4MN%k2$aIrGI_i<8}(giB_8zsJ!!w%_gplfO)( z4qOCGea3kV;Z2RldiQD`)U&PS%m*BO$Z$RSf1uPFh9Y-&KVO6E5t>`w)`<5U-Iny2 zqyMsiJb}FO4-5s4&_k)lkFIY_c`}VF?mS2`;weX;F@4V=`Tg@^w+^0-Q$mi@f)q0-!a5MpImXu-P?QPw4}BjZSDH0yy`h|11J25O+RB^)@{JK zf(7}+KsJ3rYPLrDo^#v?mnwcyXXid6oMN52j%%}8+WXYa53qo9$-$ohQK$l*(^X?e zeoP%dYfb+}Z=cky*-+5Pxje_8!G}s2`xC~eb}|{(oIdTW^R@JpxRzc~O`PZ)eh2r! zm_pf*!tIWY6ONS_Y@hk@3rD}QO#B8V6@It{skQoZ=2l?AxRK>I{5qs1*gZ%Z6qU>I zqlVfaUl8NwUUTu15Bbu*u9*`($KT1CIA_lYmAxD1JT7DeEQ21gxH9jpnPWso=TXi448EA1rF z#5INM$@|}F*Cg>Xu>SaaeLSHF1hONM!0#xvTFEjf>dL^ONzy-M28l}wQqjE8 zNkq7UfTvdy6bJvl!c6&cJIQ!E<;m?)sb6w%*5u*Igr*RPeJWw+C)_Dia*$I$B(!K; z?$@F@>%%ubGJA6&jnH(aYZZay_t7YVST*jsAoX5dfnl7XgPC(gq9ArPnUXID3i4?PRHnQpql+RYkgFisr}3>;N3{|k4F0I#mHJ)e+#pPQmvWKLa9nF z^WFMCk=vn1Qt^8Lhjv0=kOI)EIZ#``l&t2^Vb(TssFbxYF)I5tu4HXBY&AXjR@YTC zS_+5iq1BuCo>9P@53K!(Q6sblWnj)Tkd=TBbIlw$sEP3(#Ty99h2C#ju;M4)$<=eM zxSH8)t5c&1NC9j~(1LuBw;Fn+lB?!G>jpO4#IaX3ykO}@LNm$qEF#V(LvqNFO=QSs zGQ^-=`|gIqNn0ST{iPvN;KP%*61t5zZ6~4~#37sb4${Ib&=>6_G?$2XF#$%S^|X<@ z3Ee}S_7YJxakkUb9QP5rpEw;L;ymJ+Plg<1x_&q8WHd}aZ+(c+0y4djxD*j_J~8UR zw1fOP#e^Ov!XreIO*;DNX|kh)9wV;Di7=a(_SDnHl-6Rpk?dX7kr5KH~o?L47*MBg{QKxjFUR1irX>A0|!#>u1b zMMD1}E|-W)C6VM4^FWn;CLk7HCbWtOtI3pn(%V!oqt_KeuM)>=M0A`CAEBq&)DU`| zh;A?s4IHGWS=17GlQ`WXZh8N+V9aeo?+~}UL{dmP@_H>O@*bguzW{P|gx)7kyT~s$ z&U`@VLn5jq{q#cnJRPbbYWmkEx#tZ6cG7kREzzUA_?dm59F)Q9gk`gL+~#ZYK0QkzD^TGW~xL+Cm)8 zkRf`8!9NL&5{N6vZ2j0XT0oZzJd23GeyoTQ&{)Crz2p}hU7Uc%3!L)FGW~o+f`DH8 z~A=6bPR$ZZr%$rR8m0i _optionalTwinInstanceProperties; + + private AlertMessage() {_title = _severity = _message = null; _optionalTwinInstanceProperties = null;} + + /** + * Construct an alert message with a title, severity, and custom message. + * @param title the title for the alert message. + * @param severity the severity for this alert. + * @param message the custom message for this alert. + */ + public AlertMessage(String title, String severity, String message) { + _title = title; + _severity = severity; + _message = message; + _optionalTwinInstanceProperties = null; + } + + /** + * Construct an alert message with a title, severity, and custom message. + * @param title the title for the alert message. + * @param severity the severity for this alert. + * @param message the custom message for this alert. + * @param optProps the optional properties that should be sent to the alerting provider. + */ + public AlertMessage(String title, String severity, String message, HashMap optProps) { + _title = title; + _severity = severity; + _message = message; + _optionalTwinInstanceProperties = optProps; + } + + /** + * Retrieve the title for this alert message. + * @return the title of this alert message. + */ + public String getTitle() { + return _title; + } + + /** + * Retrieve the severity for this alert message. + * @return the severity for this alert message. + */ + public String getSeverity() { + return _severity; + } + + /** + * Retrieve the message for this alert message. + * @return the message for this alert message. + */ + public String getMessage() { + return _message; + } + + /** + * Retrieve the optional twin instance properties for this alert message. + * @return the optional twin instance properties for this alert message. + */ + public HashMap getOptionalTwinInstanceProperties() { + return _optionalTwinInstanceProperties; + } + + @Override + public String toString() { + return "AlertMessage{" + + "_title='" + _title + '\'' + + ", _severity='" + _severity + '\'' + + ", _message='" + _message + '\'' + + ", _optionalTwinInstanceProperties=" + _optionalTwinInstanceProperties + + '}'; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java new file mode 100644 index 0000000..8f718aa --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java @@ -0,0 +1,128 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.io.Serializable; + +/** + * Configuration for an alert provider. + */ +public class AlertProviderConfiguration implements Serializable { + /** + * The alert provider type. + */ + final String alertProviderType; + /** + * The required url for the alert provider type. + */ + final String url; + /** + * The required integration key for the alert provider type. + */ + final String integrationKey; + /** + * The required routing key for the alert provider type. + */ + final String routingKey; + /** + * The name of this alert provider. + */ + final String name; + /** + * The entity ID of this alert provider type. + */ + final String entityId; + + private AlertProviderConfiguration() {alertProviderType = url = integrationKey = routingKey = name = entityId = null;} + + /** + * Construct an alert provider configuration. + * @param alertProviderType the alert provider type. + * @param url the alert provider URL where alerts should be posted. + * @param integrationKey the integration key. + * @param routingKey the routing key. + * @param name the name of the alert provider. + * @param entityId the entity Id. + */ + public AlertProviderConfiguration(String alertProviderType, String url, String integrationKey, String routingKey, String name, String entityId) { + this.alertProviderType = alertProviderType; + this.url = url; + this.integrationKey = integrationKey; + this.routingKey = routingKey; + this.name = name; + this.entityId = entityId; + } + + /** + * Retrieve the alert provider type for this configuration. + * @return the alert provider type. + */ + public String getAlertProviderType() { + return alertProviderType; + } + + /** + * Retrieve the URL for this alert provider configuration. + * @return the URL for this alert provider configuration. + */ + public String getURL() { + return url; + } + + /** + * Retrieve the integration key for this alert provider configuration. + * @return the integration key for this alert provider configuration. + */ + public String getIntegrationKey() { + return integrationKey; + } + + /** + * Retrieve the routing key for this alert provider configuration. + * @return the routing key for this alert provider configuration. + */ + public String getRoutingKey() { + return routingKey; + } + + /** + * Retrieve the name of this alert provider configuration. + * @return the name of this alert provider configuration. + */ + public String getName() { + return name; + } + + /** + * Retrieve the entity ID for this alert provider configuration. + * @return the entity ID for this alert provider configuration. + */ + public String getEntityId() { + return entityId; + } + + @Override + public String toString() { + return "AlertProviderConfiguration{" + + "alertProviderType=" + alertProviderType + '\'' + + ", URL='" + url + '\'' + + ", IntegrationKey='" + integrationKey + '\'' + + ", RoutingKey='" + routingKey + '\'' + + ", Name='" + name + '\'' + + ", EntityId='" + entityId + '\'' + + '}'; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java new file mode 100644 index 0000000..119b0be --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java @@ -0,0 +1,48 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Status of a cache operation. + */ +public enum CacheOperationStatus { + + /** + * The object was successfully retrieved. + */ + + ObjectRetrieved, + + /** + * The object was successfully added/updated. + */ + ObjectPut, + + /** + * The object could not be retrieved because it was not found. + */ + ObjectDoesNotExist, + + /** + * The object was removed successfully. + */ + ObjectRemoved, + + /** + * The cache was cleared successfully. + */ + CacheCleared +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java new file mode 100644 index 0000000..9dc13c7 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java @@ -0,0 +1,39 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Represents a response from a {@link SharedData} operation. + */ +public interface CacheResult { + /** + * Gets the key or null to the object associated with the result. + * @return the key or null. + */ + public String getKey(); + + /** + * Get the object returned from a Get operation. + * @return the object or null. + */ + public byte[] getValue(); + + /** + * Gets the status of the cache operation. + * @return the operation status. + */ + CacheOperationStatus getStatus(); +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java new file mode 100644 index 0000000..4b4333d --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java @@ -0,0 +1,95 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.util.Date; +import java.util.HashMap; + +/** + * A real-time digital twin of a data source. The implementation of the real-time DigitalTwin should have a parameterless constructor for + * basic initialization. + */ +public abstract class DigitalTwinBase { + + /* capitalized to match .NET serialization */ + /** + * The identifier for this twin instance + */ + public String Id = ""; + + /** + * The model this twin instance belongs to. + */ + public String Model = ""; + + /** + * The timer handlers for this twin instance. + */ + public HashMap TimerHandlers = new HashMap<>(); + + /** + * Note: Simulation only. The next time in milliseconds that this Digital Twin instance will be passed to {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)}. + */ + public long NextSimulationTime = 0L; + + /** + * Default constructor. + */ + public DigitalTwinBase() {} + + /** + * Retrieve the next simulation time in milliseconds. + * @return the next simulation time in milliseconds. + */ + public long getNextSimulationTimeMs() { + return NextSimulationTime; + } + + /** + * Set the next simulation time in milliseconds. + * @param nextSimulationTime set the next simulation time. + */ + public void setNextSimulationTime(long nextSimulationTime) { + NextSimulationTime = nextSimulationTime; + } + + /** + * The identifier of this DigitalTwin. + * @return the identifier of this digital twin + */ + public String getId() { + return Id; + } + + /** + * The model for this DigitalTwin. + * @return the model for this DigitalTwin + */ + public String getModel() { + return Model; + } + + /** + * Initialization method to set the identifier and model for a DigitalTwin instance. Optionally use the + * {@link InitContext} to start a timer. + * @param context the initialization context. + * @throws IllegalStateException if init is called after initialization. + */ + public void init(InitContext context) throws IllegalStateException { + this.Id = context.getId(); + this.Model = context.getModel(); + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java new file mode 100644 index 0000000..6ea0ce0 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java @@ -0,0 +1,84 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * A message sent to a digital twin instance's message processor. + */ +public class DigitalTwinTimerMessage { + + private String _modelName; + private String _twinId; + private int _timerId; + private String _timerName; + private TimerType _timerType; + + /** + * Construct a digital twin timer message. + * @param modelName the digital twin model name. + * @param twinId the digital twin instance ID + * @param timerId the timer ID + * @param timerName the timer name + * @param timerType the timer type + */ + public DigitalTwinTimerMessage(String modelName, String twinId, int timerId, String timerName, TimerType timerType) { + _modelName = modelName; + _twinId = twinId; + _timerId = timerId; + _timerName = timerName; + _timerType = timerType; + } + + /** + * Retrieve the digital twin model name. + * @return the digital twin model name. + */ + public String getModelName() { + return _modelName; + } + + /** + * Retrieve the digital twin ID. + * @return the digital twin ID. + */ + public String getTwinId() { + return _twinId; + } + + /** + * Retrieve the timer ID. + * @return the timer ID. + */ + public int getTimerId() { + return _timerId; + } + + /** + * Retrieve the timer name. + * @return the timer name. + */ + public String getTimerName() { + return _timerName; + } + + /** + * Retrieve the {@link TimerType}. + * @return the {@link TimerType} + */ + public TimerType getTimerType() { + return _timerType; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java new file mode 100644 index 0000000..4cb7014 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java @@ -0,0 +1,67 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.time.Duration; + +/** + * The InitContext is passed as a parameter to the {@link DigitalTwinBase#init(InitContext)} method of an initializing + * digital twin. + */ +public abstract class InitContext { + + /** + * Default constructor. + */ + public InitContext() {} + + /** + * Starts a new timer for the digital twin + * @param timerName the timer name + * @param interval the timer interval + * @param timerType the timer type + * @param timerHandler the time handler callback + * @param the type of the digital twin + * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} + * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. + */ + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + + /** + * Retrieve a {@link SharedData} accessor for this model's shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedModelData(); + + /** + * Retrieve a {@link SharedData} accessor for globally shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedGlobalData(); + + /** + * Get the model-unique Id identifier of the initializing digital twin instance. + * @return the id identifier. + */ + public abstract String getId(); + + /** + * Get the Model identifier of the initializing digital twin instance. + * @return the model identifier. + */ + public abstract String getModel(); + +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java new file mode 100644 index 0000000..62ae315 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java @@ -0,0 +1,21 @@ +package com.scaleoutsoftware.digitaltwin.core; + +import java.util.Date; + +/** + * The InitSimulationContext is passed as a parameter to the {@link SimulationProcessor#onInitSimulation(InitSimulationContext, DigitalTwinBase, Date)} method of + * digital twin instance when a simulation is initializing. + */ +public interface InitSimulationContext { + /** + * Retrieve a {@link SharedData} accessor for this model's shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedModelData(); + + /** + * Retrieve a {@link SharedData} accessor for globally shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedGlobalData(); +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java new file mode 100644 index 0000000..1e89eed --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java @@ -0,0 +1,29 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Message list factory retrieves message lists for a MessageProcessor + */ +public interface MessageFactory { + + /** + * Returns all incoming messages + * @param the type of incoming messages + * @return an iterable of incoming messages + */ + Iterable getIncomingMessages(); +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java new file mode 100644 index 0000000..a608741 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java @@ -0,0 +1,56 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.io.Serializable; + +/** + * Processes messages for a real-time digital twin. + * @param the real type of the DigitalTwinBase + * @param the type of messages processed by the real-time digital twin + */ +public abstract class MessageProcessor extends MessageProcessorBase implements Serializable { + + /** + * Default constructor. + */ + public MessageProcessor() {} + + /** + * Processes a set of incoming messages and determines whether to update the real-time digital twin. + * @param context optional context for processing. + * @param stateObject the state object. + * @param incomingMessages the incoming messages. + * @return processing results for updating the state object. + * @throws Exception if an exception occurs during processing + */ + public abstract ProcessingResult processMessages(ProcessingContext context, T stateObject, Iterable incomingMessages) throws Exception; + + /** + * Helper method to ensure proper typing for user methods. + * @param context the processing context. + * @param twin the digital twin object. + * @param factory the message list factory. + * @return the implementing class's processing result. + * @throws Exception if an exception occurs during processing. + */ + @Override + public ProcessingResult processMessages(ProcessingContext context, T twin, MessageFactory factory) throws Exception { + Iterable incoming = factory.getIncomingMessages(); + return this.processMessages(context, twin, incoming); + } +} + diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java new file mode 100644 index 0000000..befa76d --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java @@ -0,0 +1,38 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Base class for the MessageProcessor to help with typing. + * @param the type of the DigitalTwin + */ +public abstract class MessageProcessorBase { + + /** + * Default constructor. + */ + public MessageProcessorBase() {} + + /** + * Helper method to ensure proper typing for the user methods. + * @param context the processing context + * @param twin the real-time digital twin instance + * @param messageListFactory the message list factory + * @return the implementing class's processing result + * @throws Exception if an exception occurs during processing + */ + public abstract ProcessingResult processMessages(ProcessingContext context, T twin, MessageFactory messageListFactory) throws Exception; +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java new file mode 100644 index 0000000..970ab1a --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java @@ -0,0 +1,785 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.util.List; + +/** + * The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a + * digital twin model to the real-time digital twin cloud service. + */ +public class ModelSchema { + private final String modelType; + private final String messageProcessorType; + private final String simulationProcessorType; + private final String messageType; + private final String assemblyName; + private final String entryPoint; + private final String azureDigitalTwinModelName; + private final String persistenceProvider; + private final boolean enablePersistence; + private final boolean enableSimulationSupport; + private final boolean enableMessageRecording; + private final List alertProviders; + + private ModelSchema() { + modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = entryPoint = azureDigitalTwinModelName = persistenceProvider = null; + enablePersistence = false; + enableSimulationSupport = false; + enableMessageRecording = false; + alertProviders = null; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, and a message class. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + alertProviders = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = false; + persistenceProvider = null; + } + + /** + * Model schema with a defined entry point. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param ep the invocation grid entry point. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String ep) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; + alertProviders = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = false; + persistenceProvider = null; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, and a message class. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + alertProviders = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = emr; + persistenceProvider = null; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, and a message class. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param ep the invocation grid entry point. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String ep, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; + alertProviders = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = emr; + persistenceProvider = null; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param alertingProviders the alerting provider configurations. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + List alertingProviders) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + enableMessageRecording = false; + persistenceProvider = null; + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param spClass the simulation processor class implementation. + * @param alertingProviders the alerting provider configurations. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String spClass, + List alertingProviders) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) || + (spClass == null || spClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass), + (spClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = spClass; + enableSimulationSupport = true; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + persistenceProvider = null; + enableMessageRecording = false; + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param spClass the simulation processor class implementation. + * @param ep the invocation grid entry point. + * @param alertingProviders the alerting provider configurations. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List alertingProviders) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) || + (spClass == null || spClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass), + (spClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = spClass; + enableSimulationSupport = true; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; + azureDigitalTwinModelName = null; + enablePersistence = false; + persistenceProvider = null; + enableMessageRecording = false; + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param spClass the simulation processor class implementation. + * @param alertingProviders the alerting provider configurations. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String spClass, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) || + (spClass == null || spClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass), + (spClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = spClass; + enableSimulationSupport = true; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + azureDigitalTwinModelName = null; + enablePersistence = false; + persistenceProvider = null; + enableMessageRecording = emr; + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param spClass the simulation processor class implementation. + * @param alertingProviders the alerting provider configurations. + * @param ep the invocation grid entry point. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String spClass, + String ep, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) || + (spClass == null || spClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass), + (spClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = spClass; + enableSimulationSupport = true; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; + azureDigitalTwinModelName = null; + enablePersistence = false; + persistenceProvider = null; + enableMessageRecording = emr; + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param adtName the Azure Digital Twin model name. + * @param persistenceType the persistence provider type. + * @param alertingProviders the alerting provider configurations. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String adtName, + PersistenceProviderType persistenceType, + List alertingProviders) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + enableMessageRecording = false; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + persistenceProvider = persistenceType.name(); + switch (persistenceType) { + case AzureDigitalTwinsService: + azureDigitalTwinModelName = adtName; + enablePersistence = true; + break; + case SQLite: + case SQLServer: + case DynamoDb: + case CosmosDb: + enablePersistence = true; + azureDigitalTwinModelName = null; + break; + default: + azureDigitalTwinModelName = null; + enablePersistence = false; + break; + } + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, and + * alert provider configurations. + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param adtName the Azure Digital Twin model name. + * @param persistenceType the persistence provider type. + * @param alertingProviders the alerting provider configurations. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String adtName, + PersistenceProviderType persistenceType, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = null; + enableSimulationSupport = false; + messageType = msgClass; + enableMessageRecording = emr; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + persistenceProvider = persistenceType.name(); + switch (persistenceType) { + case AzureDigitalTwinsService: + azureDigitalTwinModelName = adtName; + enablePersistence = true; + break; + case SQLite: + case SQLServer: + case DynamoDb: + enablePersistence = true; + azureDigitalTwinModelName = null; + break; + default: + azureDigitalTwinModelName = null; + enablePersistence = false; + break; + } + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, + * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + * and an alert provider configuration. + * + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param simulationProcessorClass the simulation processor class implementation. + * @param adtName the Azure Digital Twin model name. + * @param persistenceType the persistence provider type. + * @param alertingProviders the alerting provider configurations. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + PersistenceProviderType persistenceType, + List alertingProviders) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = simulationProcessorClass; + enableSimulationSupport = true; + enableMessageRecording = false; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + persistenceProvider = persistenceType.name(); + switch (persistenceType) { + case AzureDigitalTwinsService: + azureDigitalTwinModelName = adtName; + enablePersistence = true; + break; + case SQLite: + case SQLServer: + case DynamoDb: + enablePersistence = true; + azureDigitalTwinModelName = null; + break; + default: + azureDigitalTwinModelName = null; + enablePersistence = false; + break; + } + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, + * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + * and an alert provider configuration. + * + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param simulationProcessorClass the simulation processor class implementation. + * @param adtName the Azure Digital Twin model name. + * @param persistenceType the persistence provider type. + * @param alertingProviders the alerting provider configurations. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + PersistenceProviderType persistenceType, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = simulationProcessorClass; + enableSimulationSupport = true; + enableMessageRecording = emr; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = null; + persistenceProvider = persistenceType.name(); + switch (persistenceType) { + case AzureDigitalTwinsService: + azureDigitalTwinModelName = adtName; + enablePersistence = true; + break; + case SQLite: + case SQLServer: + case DynamoDb: + case CosmosDb: + enablePersistence = true; + azureDigitalTwinModelName = null; + break; + default: + azureDigitalTwinModelName = null; + enablePersistence = false; + break; + } + alertProviders = alertingProviders; + } + + /** + * Creates a model schema from a digital twin class, a message processor class, a message class, + * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + * and an alert provider configuration. + * + * @param dtClass the digital twin class implementation. + * @param mpClass the message processor class implementation. + * @param msgClass a JSON serializable message class. + * @param simulationProcessorClass the simulation processor class implementation. + * @param adtName the Azure Digital Twin model name. + * @param persistenceType the persistence provider type. + * @param alertingProviders the alerting provider configurations. + * @param ep the invocation grid entry point. + * @param emr enable message recording for this model. + */ + public ModelSchema( + String dtClass, + String mpClass, + String msgClass, + String simulationProcessorClass, + String adtName, + String ep, + PersistenceProviderType persistenceType, + List alertingProviders, + boolean emr) { + if( (dtClass == null || dtClass.isEmpty()) || + (mpClass == null || mpClass.isEmpty()) || + (msgClass == null || msgClass.isEmpty()) + ) { + throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", + (dtClass == null ? "null dtClass" : dtClass), + (mpClass == null ? "null mpClass" : mpClass), + (msgClass == null ? "null mpClass" : msgClass) + )); + } + modelType = dtClass; + messageProcessorType = mpClass; + simulationProcessorType = simulationProcessorClass; + enableSimulationSupport = true; + enableMessageRecording = emr; + messageType = msgClass; + assemblyName = "NOT_USED_BY_JAVA_MODELS"; + entryPoint = ep; + persistenceProvider = persistenceType.name(); + switch (persistenceType) { + case AzureDigitalTwinsService: + azureDigitalTwinModelName = adtName; + enablePersistence = true; + break; + case SQLite: + case SQLServer: + case DynamoDb: + case CosmosDb: + enablePersistence = true; + azureDigitalTwinModelName = null; + break; + default: + azureDigitalTwinModelName = null; + enablePersistence = false; + break; + } + alertProviders = alertingProviders; + } + + /** + * Retrieve the digital twin model type (a {@link DigitalTwinBase} implementation). + * @return the model type. + */ + public String getModelType() { + return modelType; + } + + /** + * Retrieve the message type (JSON serializable message implementation). + * @return the message type. + */ + public String getMessageType() { + return messageType; + } + + /** + * Retrieve the message processor type (a {@link MessageProcessor} implementation). + * @return the message processor type. + */ + public String getMessageProcessorType() { + return messageProcessorType; + } + + /** + * Retrieve the simulation processor type (a {@link SimulationProcessor} implementation). + * @return the simulation processor type. + */ + public String getSimulationProcessorType() { + return simulationProcessorType; + } + + /** + * NOT USED BY JAVA MODEL SCHEMA + * @return NOT USED BY JAVA MODEL SCHEMA + */ + public String getAssemblyName() { + return assemblyName; + } + + /** + * Retrieve the alert provider configurations. + * @return the alert provider configurations. + */ + public List getAlertProviders() {return alertProviders; } + + /** + * Retrieve the Azure Digital Twin model name. + * @return the Azure Digital Twin model name. + */ + public String getAzureDigitalTwinModelName() { + return azureDigitalTwinModelName; + } + + /** + * Retrieve persistence status. True if persistence is enabled, false otherwise. + * @return True if persistence is enabled, false otherwise. + */ + public boolean persistenceEnabled() { return enablePersistence; } + + /** + * Retrieve simulation support enabled status. True if simulation support is enabled, false otherwise. + * @return True if simulation support is enabled, false otherwise. + */ + public boolean simulationSupportEnabled() {return enableSimulationSupport;} + + /** + * Retrieve the persistence provider type. + * @return the persistence provider type. + */ + public PersistenceProviderType getPersistenceProvider() { return PersistenceProviderType.fromString(persistenceProvider); } + + /** + * Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, + * false otherwise. + * @return True if message recording is enabled, false otherwise. + */ + public boolean messageRecordingEnabled() { + return enableMessageRecording; + } + + /** + * Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching. + * @return the entry point for launching. + */ + public String getEntryPoint() { + return entryPoint; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java new file mode 100644 index 0000000..434bf75 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java @@ -0,0 +1,162 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; + +/** + * An interface that can be used for persisting/retrieving the state of real-time digital twins. + */ +public interface PersistenceProvider { + + /** + * Returns true if this PersistenceProvider is active, false otherwise. + * @return true if this PersistenceProvider is active, false otherwise. + */ + public abstract boolean isActive(); + + /** + * Retrieves this persistence providers type. Currently supported provider types: AzureDigitalTwins. + * @return the persistence provider type. + */ + public PersistenceProviderType getProviderType(); + + /** + * Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist. + * @param containerName the container name. + * @return a future that will return a list of instances. + */ + public CompletableFuture> getInstanceIdsAsync(String containerName); + + /** + * Retrieves the instance IDs stored in a container, or an empty list if no instances exist. + * @param containerName the container name. + * @return a list of instances. + */ + public List getInstanceIds(String containerName); + + /** + * Retrieves a future that when complete will return an instance or null if it doesn't exist. + * @param containerName the container name. + * @param instanceId the instance identifier. + * @return a future that will return an instance or null. + */ + public CompletableFuture getInstanceAsync(String containerName, String instanceId); + + /** + * Retrieves an instance or null if it doesn't exist. + * @param containerName the container name + * @param instanceId the instance identifier + * @return the instance or null. + */ + public String getInstance(String containerName, String instanceId); + + /** + * Retrieves a future that will return a map of property names to property, or an empty map. + * @param containerName the container name. + * @return a future that will return a map of property names to property types. + */ + public CompletableFuture> getPropertyMapAsync(String containerName); + + /** + * Retrieves a map of property names to property types, or an empty map. + * @param containerName the container name. + * @return a map of property names to property types. + */ + public Map getPropertyMap(String containerName); + + /** + * Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated. + * Updates a property for the provided instance id in the provided container specified by the property name and property value. + * @param containerName the container name. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param propertyValue the property value. + * @return a future that will complete exceptionally or return void. + */ + public CompletableFuture updatePropertyAsync(String containerName, String instanceId, String propertyName, Object propertyValue); + + /** + * Updates a property for the provided instance id in the provided container specified by the property name and property value. + * @param containerName the container name. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param propertyValue the property value. + */ + public void updateProperty(String containerName, String instanceId, String propertyName, Object propertyValue); + + /** + * Retrieves a future that will return a property or null if the property does not exist. + * @param containerName the container name. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param clazz the class representing the property. + * @param the type of the property to return + * @return the property or null if the property does not exist. + */ + public CompletableFuture getPropertyAsync(String containerName, String instanceId, String propertyName, Class clazz); + + /** + * Retrieves a property or null if the property does not exist. + * @param containerName the container name. + * @param instanceId the instance id. + * @param propertyName the property name + * @param clazz the class representing the property. + * @param the type of the property to return. + * @return the property or null if the property does not exist. + */ + public T getProperty(String containerName, String instanceId, String propertyName, Class clazz); + + /** + * Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated. + * Updates a RTDT property for the provided instance id specified by the property name and property value. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param propertyValue the property value. + * @return a future that will complete exceptionally or return void. + */ + public CompletableFuture updateRtdtPropertyAsync(String instanceId, String propertyName, Object propertyValue); + + /** + * Updates a RTDT property for the provided instance id specified by the property name and property value. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param propertyValue the property value. + */ + public void updateRtdtProperty(String instanceId, String propertyName, Object propertyValue); + + /** + * Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param clazz the class of the property type + * @param the type of the property to return. + * @return a future that will return a property value for a RTDT instance. + */ + public CompletableFuture getRtdtPropertyAsync(String instanceId, String propertyName, Class clazz); + + /** + * Retrieves a property for a RTDT instance or null if the property does not exist. + * @param instanceId the instance id. + * @param propertyName the property name. + * @param clazz the class of the property type. + * @param the type of the property to return. + * @return the property value. + */ + public T getRtdtProperty(String instanceId, String propertyName, Class clazz); +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java new file mode 100644 index 0000000..ce9eb88 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java @@ -0,0 +1,125 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.io.Serializable; + +/** + * Available {@link PersistenceProvider} types. + */ +public enum PersistenceProviderType implements Serializable { + + /** + * Enum for the Azure Digital Twin service. + */ + AzureDigitalTwinsService("AzureDigitalTwinsService", 1), + /** + * Enum for CosmosDB + */ + CosmosDb("Azure Cosmos DB", 6), + + /** + * Enum for DynamoDB + */ + DynamoDb("DynamoDB", 5), + /** + * Enum for SQLite + */ + SQLite("SQLite", 4), + /** + * Enum for SQLServer + */ + SQLServer("SQLServer", 3), + + /** + * Enum for an unconfigured PersistenceProvider + */ + Unconfigured("", 0); + + private final String _name; + private final int _value; + PersistenceProviderType(String name, int ordinal) { + _name = name; + _value = ordinal; + } + + + /** + * Retrieve the name of the persistence provider type. + * @return the name of the persistence provider type. + */ + public String getName() { + return _name; + } + + /** + * Retrieve the ordinal value (used by the DTBuidler service). + * @return the ordinal value. + */ + public int getServiceOrdinalValue() { + return _value; + } + + /** + * Return the PersistenceProviderType from a string value. We do not rely on Java's naming + * because the string values need to be cross-platform and the names may be different in each language. + * @param name the enums name. + * @return the associated PersistenceProviderType, or null if no association exists. + */ + public static PersistenceProviderType fromString(String name) { + if(name != null && !name.isEmpty() && !name.isBlank()) { + switch(name) { + case "AzureDigitalTwinsService": + return AzureDigitalTwinsService; + case "SQLite": + return SQLite; + case "SQLServer": + return SQLServer; + case "DynamoDB": + return DynamoDb; + case "Azure Cosmos DB": + return CosmosDb; + default: + return null; + } + } else { + return null; + } + } + + /** + * Return the PersistenceProviderType from an ordinal value. We do not rely on Java's ordering + * because the ordinal values need to be cross-platform, and the values may be ordered differently. + * @param ordinal the enums ordinal value. + * @return the associated PersistenceProviderType, or null if no association exists. + */ + public static PersistenceProviderType fromOrdinal(int ordinal) { + switch(ordinal) { + case 1: + return AzureDigitalTwinsService; + case 3: + return SQLServer; + case 4: + return SQLite; + case 5: + return DynamoDb; + case 6: + return CosmosDb; + default: + return null; + } + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java new file mode 100644 index 0000000..2af1dc8 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java @@ -0,0 +1,243 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.io.Serializable; +import java.time.Duration; +import java.util.Date; +import java.util.List; +import java.util.logging.Level; + +/** + * Context object that allows the user to send a message to a DataSource. + */ +public abstract class ProcessingContext implements Serializable { + + /** + * Default constructor. + */ + public ProcessingContext() {} + + /** + *

        + * Sends a message to a data source. This will route messages through the connector back to the data source. + *

        + * + *

        + * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation + * of the {@link MessageProcessor}. + *

        + * + * @param payload the message (as a serialized JSON string) + * @return the sending result + */ + public abstract SendingResult sendToDataSource(byte[] payload); + + /** + *

        + * Sends a message to a data source. This will route messages through the connector back to the data source. + *

        + * + *

        + * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation + * of the {@link MessageProcessor}. + *

        + * + * @param jsonSerializableMessage a JSON serializable message. + * @return the sending result + */ + public abstract SendingResult sendToDataSource(Object jsonSerializableMessage); + + /** + *

        + * Sends a list of messages to a data source. This will route messages through the connector back to the data source. + *

        + * + *

        + * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation + * of the {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)}. + *

        + * + * @param jsonSerializableMessages a list of JSON serializable messages. + * @return the sending result + */ + public abstract SendingResult sendToDataSource(List jsonSerializableMessages); + + /** + *

        + * This method sends a serialized JSON message to a real-time digital twin + *

        + * + *

        + * Note, the message contents must be serialized so that the registered message type + * of the digital twin model will be sufficient to deserialize the message. + *

        + * @param model the model of the digital twin + * @param id the id of the digital twin + * @param payload the serialized JSON message + * @return the sending result + */ + public abstract SendingResult sendToDigitalTwin(String model, String id, byte[] payload); + + /** + *

        + * This method sends a serialized JSON message to a real-time digital twin + *

        + * + *

        + * Note, the message contents must be serialized so that the registered message type + * of the digital twin model will be sufficient to deserialize the message. + *

        + * @param model the model of the digital twin + * @param id the id of the digital twin + * @param jsonSerializableMessage a JSON serializable message object + * @return the sending result + */ + public abstract SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage); + + /** + *

        + * This method sends a JSON message to a real-time digital twin + *

        + * + *

        + * Note, the message contents must be serialized so that the registered message type + * of the digital twin model will be sufficient to deserialize the message. + *

        + * + * @param model the model of the digital twin + * @param id the id of the digital twin + * @param payload the JSON message + * @return the sending result + */ + public abstract SendingResult sendToDigitalTwin(String model, String id, String payload); + + /** + *

        + * This method sends a list of serialized JSON message to a real-time digital twin + *

        + * + *

        + * Note, the message contents must be serialized so that the registered message type + * of the digital twin model will be sufficient to deserialize the message. + *

        + * + * @param model the model of the digital twin + * @param id the id of the digital twin + * @param payload the JSON message + * @return the sending result + */ + public abstract SendingResult sendToDigitalTwin(String model, String id, List payload); + + + /** + *

        + * This method sends an alert message to supported systems. + *

        + * + *

        + * When a model is deployed, an optional alerting provider configuration can be supplied. The provider name corresponds + * to the name of the configured alerting provider. For example, if an alerting provider configuration is called + * "SREPod1", then the processing context will send an alert message to the alerting provider configured with the name + * "SREPod1". + *

        + * + *

        + * If the message cannot be sent then {@link SendingResult#NotHandled} will be returned. If the message is sent + * and in process of sending then {@link SendingResult#Enqueued} will be returned. Once the message is successfully sent + * then the returned enum will be changed to {@link SendingResult#Handled}. + *

        + * @param alertingProviderName the alerting provider name. Note, must match a valid configuration. + * @param alert the alert message. + * @return the sending result. + */ + public abstract SendingResult sendAlert(String alertingProviderName, AlertMessage alert); + + /** + * Returns the configured persistence provider or null if no persistence provider configuration can be found. + * @return a PersistenceProvider . + */ + public abstract PersistenceProvider getPersistenceProvider(); + + /** + * Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID) + * @return the digital twin id + */ + public abstract String getDataSourceId(); + + /** + * Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin) + * @return the digital twin model + */ + public abstract String getDigitalTwinModel(); + + /** + * Logs a message to the real-time digital twin cloud service. + * + * Note: the only supported severity levels are: INFO, WARN, and SEVERE + * + * @param severity the severity of the log message + * @param message the message to log + */ + public abstract void logMessage(Level severity, String message); + + /** + * Starts a new timer for the digital twin + * @param timerName the timer name + * @param interval the timer interval + * @param timerType the timer type + * @param timerHandler the time handler callback + * @param the type of the digital twin + * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} + * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. + */ + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + + /** + * Stops the specified timer. + * @param timerName the timer name. + * @return returns {@link TimerActionResult#Success} if the timer was stopped, {@link TimerActionResult#FailedNoSuchTimer} + * if no timer exists with that name, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. + */ + public abstract TimerActionResult stopTimer(String timerName); + + /** + * Retrieves the current time. If the model (simulation or real-time) is running inside of a simulation then the + * simulation time will be returned. + * + * @return The current time (real time, or simulation if running under simulation). + */ + public abstract Date getCurrentTime(); + + /** + * Retrieve the running {@link SimulationController} or null if no simulation is running. + * @return the {@link SimulationController} or null if no simulation is running. + */ + public abstract SimulationController getSimulationController(); + + /** + * Retrieve a {@link SharedData} accessor for this model's shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedModelData(); + + /** + * Retrieve a {@link SharedData} accessor for globally shared data. + * @return a {@link SharedData} instance. + */ + public abstract SharedData getSharedGlobalData(); + +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java new file mode 100644 index 0000000..279f0fa --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java @@ -0,0 +1,30 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * The result from a message processor which indicates to update the state object or to ignore + */ +public enum ProcessingResult { + /** + * Update the digital twin. + */ + UpdateDigitalTwin, + /** + * Do not update the digital twin. + */ + NoUpdate +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java new file mode 100644 index 0000000..9b3731b --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java @@ -0,0 +1,35 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Marks a message as Delivered or not Delivered + */ +public enum SendingResult { + /** + * Handled indicates that a message was successfully sent and processed + */ + Handled, + /** + * Enqueued indicates that a message was successfully formed and then sent to an internal messaging service + */ + Enqueued, + /** + * NotHandled indicates that the message was not handled. This can occur if an exception occurs + * in the message processor or if internal messaging service reached capacity. + */ + NotHandled +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java new file mode 100644 index 0000000..5c1392d --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java @@ -0,0 +1,49 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * SharedData is used to access a model's, or globally, shared cache. + */ +public interface SharedData { + /** + * Retrieves an existing object from the cache. + * @param key the key mapping to a value. + * @return A cache result. + */ + public CacheResult get(String key); + + /** + * Put a new key/value mapping into the cache. + * @param key the key mapping to a value. + * @param value the value. + * @return a cache result. + */ + public CacheResult put(String key, byte[] value); + + /** + * Remove a key/value mapping from the cache. + * @param key the key mapping to a value. + * @return a cache result. + */ + public CacheResult remove(String key); + + /** + * Clear the shared data cache. + * @return a cache result. + */ + public CacheResult clear(); +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java new file mode 100644 index 0000000..314f6eb --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java @@ -0,0 +1,190 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.time.Duration; +import java.util.Date; + +/** + * The SimulationController interface is used to interact with the running DigitalTwin simulation. + */ +public interface SimulationController { + + /** + *

        + * Retrieves the current simulation time increment. + *

        + * @return the simulation time increment. + */ + Duration getSimulationTimeIncrement(); + + /** + * + */ + + /** + *

        + * Retrieves the simulation start time. + *

        + * @return the simulation start time. + */ + Date getSimulationStartTime(); + + /** + *

        + * Delay simulation processing for this DigitalTwin instance for a duration of time. + *

        + * + *

        + * Simulation processing will be delayed for the duration specified relative to the current simulation time. + *

        + * + *

        + * Examples: + *

        + * + *

        + * at a current simulation time of 10, an interval of 20, and a delay of 40 -- the instance would + * skip one cycle of processing and be processed at simulation time 50. + *

        + * + *

        + * at a current simulation time of 10, an interval of 20, and a delay of 30 -- the instance would + * skip one cycle of processing and be processed at simulation time 50. + *

        + * + *

        + * at a current simulation time of 10, an interval of 20, and a delay of 50 -- the instance would + * skip two cycles of processing and be processed at simulation time 70. + *

        + * + * @param duration the duration to delay. + * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} + * if the delay was not processed. + */ + SendingResult delay(Duration duration); + + /** + *

        + * Delay simulation processing for this DigitalTwin instance, indefinitely. + *

        + * + *

        + * Simulation processing will be delayed until this instance is run with {@link SimulationController#runThisInstance()}. + *

        + * + * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} + * if the delay was not processed. + */ + SendingResult delayIndefinitely(); + + /** + *

        + * Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin + * models {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} method. + *

        + * @param modelName the model to send the messages too. + * @param telemetryMessage a blob representing a JSON serialized messages. + * @return {@link SendingResult#Handled} if the messages were processed, {@link SendingResult#Enqueued} if + * the messages are in process of being handled, or {@link SendingResult#NotHandled} if the delay was not processed. + */ + SendingResult emitTelemetry(String modelName, byte[] telemetryMessage); + + /** + *

        + * Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin + * models {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} method. + *

        + * @param modelName the model to send the messages too. + * @param jsonSerializableMessage an object message that is JSON serializable. + * @return {@link SendingResult#Handled} if the messages were processed, {@link SendingResult#Enqueued} if + * the messages are in process of being handled, or {@link SendingResult#NotHandled} if the delay was not processed. + */ + SendingResult emitTelemetry(String modelName, Object jsonSerializableMessage); + + /** + * Create a new digital twin instance for simulation processing. + * @param modelName the model name. + * @param instanceId the instance id. + * @param base the instance to create. + * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance + * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. + * @param the type of the digital twin to create. + */ + SendingResult createInstance(String modelName, String instanceId, T base); + + /** + * Create a new digital twin instance for simulation processing from a persistence store. + * + * The twin instance will be loaded via model name and id from a persistence store. + * + * If no instance can be found, then an exception will be thrown and no instance will be created. + * + * @param model The model name. + * @param id the instance id. + * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance + * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. + */ + SendingResult createInstanceFromPersistenceStore(String model, String id); + + /** + * The twin instance will be loaded via model name and id from a persistence store. + * + * The twin instance will be loaded via model name and id from a persistence store. + * + * If no instance can be found, then the default parameter instance will be used. + * + * @param model the model name. + * @param id the instance id. + * @param def the default instance to create. + * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance + * * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. + * @param the type of the digital twin to create. + */ + SendingResult createInstanceFromPersistenceStore(String model, String id, T def); + + /** + * Delete and remove a digital twin instance from simulation processing. + * @param modelName the model name. + * @param instanceId the instance id. + * @return {@link SendingResult#Handled} if the instance was deleted, {@link SendingResult#Enqueued} if the instance + * is in process of being deleted, or {@link SendingResult#NotHandled} if the instance could not be deleted. + */ + SendingResult deleteInstance(String modelName, String instanceId); + + /** + * Delete and remove this digital twin instance from simulation processing. + * @return this local request will always return {@link SendingResult#Handled}. + */ + SendingResult deleteThisInstance(); + + /** + * Run this instance during this simulation step. The instance will be run using the models {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)} + * implementation. + * + * This will cause the simulation sub-system to run this instance regardless of the instances current + * {@link DigitalTwinBase#NextSimulationTime}. + */ + void runThisInstance(); + + /** + * Stop the simulation. + * @return a {@link SimulationStatus#InstanceRequestedStop}. + */ + SimulationStatus stopSimulation(); + + +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java new file mode 100644 index 0000000..a98d396 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java @@ -0,0 +1,66 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.io.Serializable; +import java.util.Date; + +/** + * Processes simulation events for a digital twin. + * @param the type of the digital twin. + */ +public abstract class SimulationProcessor implements Serializable { + + /** + * Default constructor. + */ + public SimulationProcessor() {} + + /** + * Processes simulation events for a real-time digital twin. + * @param context the processing context. + * @param instance the digital twin instance. + * @param epoch the current time of the simulation. + * @return {@link ProcessingResult#UpdateDigitalTwin} to update the digital twin, or + * {@link ProcessingResult#NoUpdate} to ignore the changes. + */ + public abstract ProcessingResult processModel(ProcessingContext context, T instance, Date epoch); + + /** + *

        + * Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. + *

        + * + *

        + * onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed + * between simulation runs. + *

        + *
          + *
        • Set variables in global or shared data.
        • + *
        • Run a simulation.
        • + *
        • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
        • + *
        • Complete simulation and evaluate the result.
        • + *
        + * + * @param context The simulation init context. + * @param instance The digital twin instance. + * @param epoch the simulation start time. + * @return {@link ProcessingResult#UpdateDigitalTwin} or {@link ProcessingResult#NoUpdate}. Default behavior: {@link ProcessingResult#NoUpdate}. + */ + public ProcessingResult onInitSimulation(InitSimulationContext context, T instance, Date epoch) { + return ProcessingResult.NoUpdate; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java new file mode 100644 index 0000000..93f8ee4 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java @@ -0,0 +1,50 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * The status of a simulation. + */ +public enum SimulationStatus { + /** + * The simulation is running. + */ + Running, + /** + * The simulation status is not set. + */ + NotSet, + /** + * The user requested a stop. + */ + UserRequested, + /** + * The simulation end time has been reached. + */ + EndTimeReached, + /** + * There is no remaining work for the simulation. + */ + NoRemainingWork, + /** + * A digital twin instance has requested the simulation to stop by calling {@link SimulationController#stopSimulation()} + */ + InstanceRequestedStop, + /** + * There was a runtime-change of simulation configuration. + */ + UnexpectedChangeInConfiguration; +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java new file mode 100644 index 0000000..852174e --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java @@ -0,0 +1,79 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * The result of a timer action. + */ +public enum TimerActionResult { + /** + * The operation completed successfully. + */ + Success(0), + + /** + * Failed to start a new timer due to reaching the limit for a number of active timers. + */ + FailedTooManyTimers(1), + + /** + * Failed to stop the existing timer, the timer is no longer active. + */ + FailedNoSuchTimer(2), + + /** + * Failed to start the timer, the timer with the specified name already exists. + */ + FailedTimerAlreadyExists(3), + + /** + * Failed to start/stop timer due to an internal error. + */ + FailedInternalError(4); + + private final int _value; + private TimerActionResult(int val) { + _value = val; + } + + /** + * Convert an ordinal into a {@link TimerActionResult}. + * + * 0 = {@link TimerActionResult#Success}, 1 = {@link TimerActionResult#FailedTooManyTimers}, + * 2 = {@link TimerActionResult#FailedNoSuchTimer}, 3 = {@link TimerActionResult#FailedTimerAlreadyExists}, + * 4 = {@link TimerActionResult#FailedInternalError} + * @param val the ordinal value. + * @return the associated {@link TimerActionResult} or throws an IllegalArgumentException for an unexpected + * ordinal value. + */ + public static TimerActionResult fromOrdinal(int val) { + switch (val) { + case 0: + return Success; + case 1: + return FailedTooManyTimers; + case 2: + return FailedNoSuchTimer; + case 3: + return FailedTimerAlreadyExists; + case 4: + return FailedInternalError; + default: + throw new IllegalArgumentException("No known TimerActionResult from value: " + val); + + } + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java new file mode 100644 index 0000000..6380324 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java @@ -0,0 +1,33 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Callback to a handle a timer message for a {@link DigitalTwinBase}. + * @param the type of the {@link DigitalTwinBase}. + */ +public interface TimerHandler { + + /** + * Callback to handle a timer message. + * @param timerName the timer's unique identifier. + * @param instance the digital twin instance. + * @param ctx the processing context. + * @return {@link ProcessingResult#UpdateDigitalTwin} to update the digital twin instance or + * {@link ProcessingResult#NoUpdate} to leave the instance state as is. + */ + public ProcessingResult onTimedMessage(String timerName, T instance, ProcessingContext ctx); +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java new file mode 100644 index 0000000..e9c151d --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java @@ -0,0 +1,76 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +import java.lang.reflect.InvocationTargetException; +import java.time.Duration; + +/** + * Metadata class for a timer. + * @param the type of the {@link DigitalTwinBase} implementation. + */ +public class TimerMetadata { + final String timerHandler; + final TimerType timerType; + final long timerIntervalMs; + final int timerId; + + /** + * Constructs a timer metadata. + * @param handler the timer handler. + * @param timerType the timer type. + * @param timerIntervalMs the timer interval. + * @param timerIdx the timer index. + */ + public TimerMetadata(TimerHandler handler, TimerType timerType, long timerIntervalMs, int timerIdx) { + this.timerHandler = handler.getClass().getName(); + this.timerType = timerType; + this.timerIntervalMs = timerIntervalMs; + this.timerId = timerIdx; + } + + /** + * Retrieves the timer handler class name. + * @return the timer handler class name. + */ + public String getTimerHandlerClass() { + return timerHandler; + } + + /** + * Retrieves the timer type. + * @return the timer type. + */ + public TimerType getTimerType() { + return timerType; + } + + /** + * Retrieves the timer interval. + * @return the timer interval. + */ + public long getTimerIntervalMs() { + return timerIntervalMs; + } + + /** + * Retrieves the timer ID. + * @return the timer ID. + */ + public int getTimerId() { + return timerId; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java new file mode 100644 index 0000000..66626e1 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java @@ -0,0 +1,30 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.core; + +/** + * Enum representation of the available timer types + */ +public enum TimerType { + /** + * This timer should reoccur on a schedule. + */ + Recurring, + /** + * This timer should trigger one time. + */ + OneTime +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java new file mode 100644 index 0000000..4ccf77f --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java @@ -0,0 +1,21 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * Digital twin model API - Create a digital twin model. + */ +package com.scaleoutsoftware.digitaltwin.core; + diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java new file mode 100644 index 0000000..5948de6 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java @@ -0,0 +1,99 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +class Constants { + public static final int MAX_TIMER_COUNT = 5; + /** + * + * Returns a hash that is suitable for inserting an object into a hash-based collection. + *

        + * ----------------------------------------------------------------------------- + * MurmurHash3 was written by Austin Appleby, and is placed in the public + * domain. The author hereby disclaims copyright to this source code. + * + * Note - The x86 and x64 versions do _not_ produce the same results, as the + * algorithms are optimized for their respective platforms. You can still + * compile and run any of them on any platform, but your performance with the + * non-native version will be less than optimal. + * Original code from: + * https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp + * ----------------------------------------------------------------------------- + * + * This implementation is tweaked to initialize with a hard-coded seed and to return a long instead of a + * 32-bit unsigned integer (since Java doesn't easily support unsigned integers). + * @param data The byte array to be hashed. + * @return Hash code for the array, with values ranging from 0 to 4,294,967,295. + */ + static long getHash(byte[] data) { + if(data == null) { + throw new IllegalArgumentException("Hash data was null."); + } + + final int seed = 947203; // Scaleout's implementation-specific seed. + final int c1 = 0xcc9e2d51; + final int c2 = 0x1b873593; + + int len = data.length; + int h1 = seed; + int roundedEnd = len & 0xfffffffc; // round down to 4 byte block + + for (int i = 0; i < roundedEnd; i += 4) { + // little endian load order + int k1 = (data[i] & 0xff) | ((data[i + 1] & 0xff) << 8) | ((data[i + 2] & 0xff) << 16) | (data[i + 3] << 24); + k1 *= c1; + k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15); + k1 *= c2; + + h1 ^= k1; + h1 = (h1 << 13) | (h1 >>> 19); // ROTL32(h1,13); + h1 = h1 * 5 + 0xe6546b64; + } + + // tail (leftover bytes that didn't fit into a 4-byte block) + int k1 = 0; + + switch (len & 0x03) { + case 3: + k1 = (data[roundedEnd + 2] & 0xff) << 16; + // fallthrough + case 2: + k1 |= (data[roundedEnd + 1] & 0xff) << 8; + // fallthrough + case 1: + k1 |= (data[roundedEnd] & 0xff); + k1 *= c1; + k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15); + k1 *= c2; + h1 ^= k1; + } + + // finalization + h1 ^= len; + + // fmix(h1); + h1 ^= h1 >>> 16; + h1 *= 0x85ebca6b; + h1 ^= h1 >>> 13; + h1 *= 0xc2b2ae35; + h1 ^= h1 >>> 16; + + // Other languages want to represent the hash as an unsigned int, but java doesn't easily have + // unsigned types. So we move the signed integer's bits into an "unsigned" long, which + // is big enough to hold all the positive values of an unsigned int. + return h1 & 0x00000000ffffffffL; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java new file mode 100644 index 0000000..4708e20 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java @@ -0,0 +1,56 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import java.util.logging.Level; + +/** + * A messaged that was logged by a digital twin. + */ +public class LogMessage { + private String _message; + private Level _severity; + private long _timestamp; + LogMessage(Level severity, String message) { + _message = message; + _severity = severity; + _timestamp = System.currentTimeMillis(); + } + + /** + * Retrieve the string message associated with this log message. + * @return the message. + */ + public String getMessage() { + return _message; + } + + /** + * Retrieve the severity of this log message. + * @return the severity. + */ + public Level getSeverity() { + return _severity; + } + + /** + * Retrieve the timestamp from when this message was generated. + * @return the timestamp. + */ + public long getTimestamp() { + return _timestamp; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java new file mode 100644 index 0000000..0dd7e68 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java @@ -0,0 +1,25 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +enum ProxyState { + // The proxy has an unspecified state. + Unspecified, + // The proxy is active. + Active, + // the proxy is removed + Removed +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java new file mode 100644 index 0000000..686936e --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java @@ -0,0 +1,69 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; + +import java.util.Date; + +abstract class SimulationEvent implements Comparable { + protected String _model; + protected String _id; + protected long _priority; + protected long _nextSimulationTime; + + SimulationEvent(String model, String id, long priority) { + _model = model; + _id = id; + _priority = priority; + } + + abstract SimulationEventResult processSimulationEvent(ProcessingContext context, Date currentTime) throws WorkbenchException; + + abstract ProxyState getProxyState(); + + abstract void setProxyState(ProxyState newState); + + abstract void handleResetNextSimulationTime(); + + abstract void simulationInit(Date simulationStartTime); + + long getPriority() { + return _priority; + } + + void setPriority(long priority) { + _priority = priority; + } + + String getId() { + return _id; + } + + String getModel() {return _model;} + + void setNextSimulationTime(long nextSimulationTime) { + _nextSimulationTime = nextSimulationTime; + handleResetNextSimulationTime(); + } + + + + @Override + public int compareTo(SimulationEvent other) { + return Long.compare(this._priority, other._priority); + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java new file mode 100644 index 0000000..f917da6 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java @@ -0,0 +1,22 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +/** + * A simulation event result. + */ +public abstract class SimulationEventResult { +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java new file mode 100644 index 0000000..49f9b5d --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java @@ -0,0 +1,63 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; +import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; +import com.scaleoutsoftware.digitaltwin.core.TimerHandler; + +import java.util.Date; + +class SimulationEventTimerImpl extends SimulationEvent { + TwinProxy _proxy; + TimerHandler _handler; + String _timerName; + + SimulationEventTimerImpl(String model, String id, long priority, String name, TwinProxy proxy, TimerHandler handler) { + super(model, id,priority); + _timerName = name; + _proxy = proxy; + _handler = handler; + + } + + @Override + SimulationEventResult processSimulationEvent(ProcessingContext context, Date currentTime) { + DigitalTwinBase base = _proxy.getInstance(); + _handler.onTimedMessage(_timerName, base, context); + _proxy.setInstance(base); + return new SimulationEventResult(){}; + } + + @Override + ProxyState getProxyState() { + return _proxy.getProxyState(); + } + + @Override + void setProxyState(ProxyState newState) { + _proxy.setProxyState(newState); + } + + @Override + void handleResetNextSimulationTime() { + } + + @Override + void simulationInit(Date simulationStartTime) { + + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java new file mode 100644 index 0000000..27e4147 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -0,0 +1,93 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.nio.charset.StandardCharsets; +import java.util.Date; +import java.util.Objects; + +class SimulationEventTwinImpl extends SimulationEvent { + SimulationProcessor _processor; + TwinProxy _proxy; + SharedData _modelSharedData; + SharedData _globalSharedData; + + SimulationEventTwinImpl(long priority, TwinProxy proxy, SimulationProcessor processor, SharedData modelSharedData, SharedData globalSharedData) { + super(proxy.getInstance().Model, proxy.getInstance().Id, priority); + _proxy = proxy; + _processor = processor; + _modelSharedData = modelSharedData; + _globalSharedData = globalSharedData; + } + + @Override + SimulationEventResult processSimulationEvent(ProcessingContext context, Date currentTime) throws WorkbenchException { + try { + DigitalTwinBase base = _proxy.getInstance(); + synchronized (_proxy) { + WorkbenchProcessingContext wpc = (WorkbenchProcessingContext)context; + wpc.resetInstance(base); + _processor.processModel(wpc, base, currentTime); + _proxy.setInstance(base); + } + } catch (Exception e) { + throw new WorkbenchException(e); + } + return new SimulationEventResult(){}; + } + + @Override + ProxyState getProxyState() { + return _proxy.getProxyState(); + } + + @Override + void setProxyState(ProxyState newState) { + _proxy.setProxyState(newState); + } + + @Override + void handleResetNextSimulationTime() { + DigitalTwinBase base = _proxy.getInstance(); + base.NextSimulationTime = _nextSimulationTime; + _proxy.setInstance(base); + } + + @Override + void simulationInit(Date simulationStartTime) { + InitSimulationContext context = new WorkbenchInitSimulationContext(_globalSharedData, _modelSharedData); + synchronized (_proxy) { + DigitalTwinBase base = _proxy.getInstance(); + _processor.onInitSimulation(context, base, simulationStartTime); + _proxy.setInstance(base); + } + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + SimulationEventTwinImpl that = (SimulationEventTwinImpl) o; + return this._proxy.getInstance().getId().compareTo(that._id) == 0 && this._proxy.getInstance().getModel().compareTo(that._model) == 0; + } + + @Override + public int hashCode() { + return (int)Constants.getHash(_id.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java new file mode 100644 index 0000000..fa46b98 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java @@ -0,0 +1,177 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.*; +import java.util.concurrent.atomic.AtomicInteger; + +class SimulationScheduler { + static AtomicInteger PROCESSED = new AtomicInteger(0); + static AtomicInteger QUEUED = new AtomicInteger(0); + static AtomicInteger SENT = new AtomicInteger(0); + private final List _workers; + private final ExecutorService _simulationService; + private final String _modelName; + private final SimulationProcessor _simulationProcessor; + private final Logger _logger = LogManager.getLogger(SimulationScheduler.class); + private long _curSimulationTime; + private Date _simulationStartTime; + private boolean _isActive; + + + public SimulationScheduler(String modelName, + Class digitalTwinClass, + SimulationProcessor modelProcessor, + TwinExecutionEngine executor, + int numWorkers) { + _modelName = modelName; + _simulationProcessor = modelProcessor; + _workers = new ArrayList<>(numWorkers); + _simulationService = Executors.newFixedThreadPool(numWorkers, new ThreadFactory() { + @Override + public Thread newThread(Runnable r) { + Thread t = new Thread(r, "SimulationWorker"); + t.setName(t.getName()+"-"+t.getId()); + t.setDaemon(true); + return t; + } + }); + for(int i = 0; i < numWorkers; i++) { + _workers.add(new SimulationWorker(i, _modelName, _simulationProcessor, digitalTwinClass, executor, this)); + } + } + + // -------------- package private methods ---------------- + SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) { + _logger.info("Received run simulation event with args: " + runSimulationEventArgs.getCurSimulationTime() + " iterationSize: " + runSimulationEventArgs.getIterationSize() + " flags: " + runSimulationEventArgs.getSimulationFlags() ); + long current = System.currentTimeMillis(); + SimulationStep ret; + _curSimulationTime = runSimulationEventArgs.getCurSimulationTime(); + + if (runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Stop) { + _logger.info("Stopping simulation; shutting down workers."); + for(SimulationWorker worker : _workers) { + worker.shutdown(); + } + return new SimulationStep(SimulationStatus.UserRequested,_curSimulationTime); + } if(runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Start) { + _logger.info("Starting simulation; initializing instances."); + for(SimulationWorker worker : _workers) { + worker.initSimulation(new Date(runSimulationEventArgs.getCurSimulationTime())); + } + return new SimulationStep(SimulationStatus.Running,_curSimulationTime); + } else { + ret = runSimulationStep(runSimulationEventArgs); + } + + _logger.info(String.format("runSim complete in %s ms... returning next: %s", (System.currentTimeMillis()-current), ret)); + return ret; + } + + long getCurrentTime() { + if(_isActive) { + return _curSimulationTime; + } + return System.currentTimeMillis(); + } + + void setStatus(boolean active) { + _isActive = active; + } + + Date getSimulationStartTime() { + return _simulationStartTime; + } + + void setSimulationStartTime(Date simulationStartTime) { + _simulationStartTime = simulationStartTime; + } + + + + // -------------- private methods ---------------- + private SimulationStep runSimulationStep(SimulationStepArgs args) { + long currentTimeMs = System.currentTimeMillis(); + List> futures = new LinkedList<>(); + for(SimulationWorker worker : _workers) { + worker.reset(args); + futures.add(_simulationService.submit(worker)); + } + + SimulationStatus status = SimulationStatus.Running; + boolean workFound = false; + long next = -1; + long cur = Long.MAX_VALUE; + for(Future f : futures) { + try { + SimulationStep result = f.get(); + if(result.getStatus() == SimulationStatus.Running) { + workFound = true; + } + if(result.getStatus() != SimulationStatus.Running) { + status = result.getStatus(); + } + cur = result.getTime(); + if (cur != -1 && cur < next) { + _logger.info(String.format("future return is lower than next... cur: %s next: %s", cur, next)); + next = cur; + } else if (next == -1 && cur > -1) { + next = cur; + } + } catch (InterruptedException e) { + throw new RuntimeException(e); + } catch (ExecutionException e) { + throw new RuntimeException(e); + } + } + _logger.info(String.format("Simulation step complete in %s ms... returning next: %s", (System.currentTimeMillis()-currentTimeMs), next)); + + if(workFound && status == SimulationStatus.NoRemainingWork) status = SimulationStatus.Running; + return new SimulationStep(status, next); + } + + void addInstance(TwinProxy proxy) { + SimulationWorker worker = _workers.get(findSlotId(proxy.getInstance().getId())); + worker.addTwinToQueue(proxy); + } + + void addTimer(TwinProxy proxy, String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { + SimulationWorker worker = _workers.get(findSlotId(proxy.getInstance().getId())); + worker.addTimerToQueue(proxy, modelName, id, timerName, type, interval, handler); + } + void stopTimer(String modelName, String id, String timerName) { + SimulationWorker worker = _workers.get(findSlotId(id)); + worker.stopTimer(modelName, id, timerName); + } + + void runThisInstance(String model, String id) throws WorkbenchException { + SimulationWorker worker = _workers.get(findSlotId(id)); + worker.runThisInstance(model, id); + } + + private int findSlotId(String id) { + return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)_workers.size()); + } + + +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java new file mode 100644 index 0000000..c2a6dba --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java @@ -0,0 +1,57 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.SimulationStatus; + +/** + * The simulation step class encases the metadata for a completed interval of a simulation. + */ +public class SimulationStep { + private SimulationStatus _status; + private long _intervalTime; + + SimulationStep(SimulationStatus status, long intervalTime) { + _status = status; + _intervalTime = intervalTime; + } + + /** + * Retrieve the {@link SimulationStatus} of the simulation interval. + * @return the current simulation status. + */ + public SimulationStatus getStatus() { + return _status; + } + + /** + * Retrieve the time of the simulation interval. + * @return the simulation interval time. + */ + public long getTime() { + return _intervalTime; + } + + // merge two simulation steps + void merge(SimulationStep result) { + if(this._status == SimulationStatus.Running && result._status != SimulationStatus.Running) { + this._status = result._status; + } + if(this._intervalTime > result._intervalTime) { + this._intervalTime = result.getTime(); + } + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java new file mode 100644 index 0000000..c65ad79 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java @@ -0,0 +1,40 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +class SimulationStepArgs { + private long _curSimulationTime; + private long _interval; + private WorkbenchSimulationFlags _simulationFlags; + + SimulationStepArgs(long currentSimulationTime, long interval, WorkbenchSimulationFlags flags) { + _curSimulationTime = currentSimulationTime; + _interval = interval; + _simulationFlags = flags; + } + + long getCurSimulationTime() { + return _curSimulationTime; + } + + long getIterationSize() { + return _interval; + } + + WorkbenchSimulationFlags getSimulationFlags() { + return this._simulationFlags; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java new file mode 100644 index 0000000..e09c0e7 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java @@ -0,0 +1,36 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import java.util.Date; + +class SimulationTime { + private long _currentSimulationEpochMs; + private long _simulationIntervalMs; + + public SimulationTime(long currentSimulationEpochMs, long intervalMs) { + _currentSimulationEpochMs = currentSimulationEpochMs; + _simulationIntervalMs = intervalMs; + } + + long getCurrentSimulationTime() { + return _currentSimulationEpochMs; + } + + long getNextSimulationTime() { + return _currentSimulationEpochMs + _simulationIntervalMs; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java new file mode 100644 index 0000000..ebaa891 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -0,0 +1,229 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.time.Duration; +import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.ConcurrentHashMap; +import java.util.function.Predicate; + +class SimulationWorker implements Callable { + private final Logger _logger = LogManager.getLogger(SimulationWorker.class); + private final PriorityQueue _timeOrderedQueue = new PriorityQueue<>(); + private final ConcurrentHashMap _timers = new ConcurrentHashMap<>(); + private final ConcurrentHashMap _events = new ConcurrentHashMap<>(); + private final int _slotId; + private final String _modelName; + private final SimulationProcessor _simulationProcessor; + private final TwinExecutionEngine _twinExecutionEngine; + private final SimulationScheduler _simulationScheduler; + private long _curSimulationTime; + private long _simulationInterval; + private long _nextSimulationTime; + private boolean _running; + + public SimulationWorker(int slotId, + String model, + SimulationProcessor modelProcessor, + Class digitalTwinClass, + TwinExecutionEngine engine, + SimulationScheduler scheduler) { + _slotId = slotId; + _modelName = model; + _simulationProcessor = modelProcessor; + _twinExecutionEngine = engine; + _simulationScheduler = scheduler; + } + + public void reset(SimulationStepArgs runSimulationEventArgs) { + _curSimulationTime = runSimulationEventArgs.getCurSimulationTime(); + _simulationInterval = runSimulationEventArgs.getIterationSize(); + _logger.info(String.format("Worker reset... cur: %s interval: %s", _curSimulationTime, _simulationInterval)); + } + + public void shutdown() { + _timeOrderedQueue.clear(); + _events.clear(); + _timers.clear(); + } + + public void addTwinToQueue(TwinProxy proxy) { + SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName))); + _timeOrderedQueue.add(event); + _events.put(String.format("%s%s",event.getModel(),event.getId()), event); + } + + public void addTwinToQueue(SimulationEvent event) { + _timeOrderedQueue.add(event); + _events.put(String.format("%s%s",event.getModel(),event.getId()), event); + } + + public void addTimerToQueue(TwinProxy proxy, String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { + SimulationEvent event = new SimulationEventTimerImpl(modelName, id, interval.toMillis(), timerName, proxy, handler); + _timers.put(timerName, event); + _timeOrderedQueue.add(event); + _events.put(String.format("%s%s",event.getModel(),event.getId()), event); + } + + public void stopTimer(String model, String id, String timerName) { + SimulationEvent event = _timers.remove(String.format("%s%s%s",model, id,timerName)); + event.setProxyState(ProxyState.Removed); + _events.remove(String.format("%s%s",event.getModel(),event.getId())); + } + + void initSimulation(Date startTime) { + for(SimulationEvent event : _events.values()) { + event.simulationInit(startTime); + } + } + + public void runThisInstance(String model, String id) throws WorkbenchException { + SimulationEvent event = _events.remove(String.format("%s%s",model,id)); + if(event == null) { + TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id); + event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName))); + } else { + _timeOrderedQueue.remove(event); + } + WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler); + WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController); + processingContext.reset(model, id, null); + Date date = new Date(); + date.setTime(_curSimulationTime); + event.processSimulationEvent(processingContext, date); + if(simulationController.delayRequested()) { + long delay = simulationController.getRequestedDelay(); + if(delay == 0x0000e677d21fdbffL) { + event.setPriority(simulationController.getRequestedDelay()); + event.setNextSimulationTime(simulationController.getRequestedDelay()); + } else if (delay == 0L) { + event.setPriority(_curSimulationTime); + event.setNextSimulationTime(_curSimulationTime); + } else { + event.setPriority(_curSimulationTime + simulationController.getRequestedDelay()); + event.setNextSimulationTime(_curSimulationTime + simulationController.getRequestedDelay()); + } + } else { + event.setPriority(_curSimulationTime + _simulationInterval); + event.setNextSimulationTime(_curSimulationTime + _simulationInterval); + } + _events.put(String.format("%s%s",model,id), event); + _timeOrderedQueue.add(event); + } + + @Override + public SimulationStep call() throws Exception { + synchronized (this) { + _running = true; + } + SimulationTime simulationTime = new SimulationTime(_curSimulationTime, _simulationInterval); + long lowestNextSimulationTime = Long.MAX_VALUE; + long nextQueueTm = Long.MAX_VALUE; + boolean keepProcessing = true; + boolean delayed = false; + boolean addToBuffer = true; + List buffer = new LinkedList<>(); + WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler); + WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController); + Date currentTime = new Date(); + currentTime.setTime(_curSimulationTime); + int processed = 0; + do { + addToBuffer = true; + SimulationEvent next = _timeOrderedQueue.poll(); + if(next != null) { + if(next.getProxyState() == ProxyState.Active) { + processed++; + nextQueueTm = next.getPriority(); + if(next.getPriority() <= simulationTime.getCurrentSimulationTime()) { + simulationController.reset(_modelName, next.getId()); + processingContext.reset(_modelName, next.getId(), null); + ProcessingResult result = ProcessingResult.NoUpdate; + try { + next.processSimulationEvent(processingContext, currentTime); + } catch (Exception e) { + _logger.error("simulation processor threw an exception.", e); + result = ProcessingResult.NoUpdate; + } + if(simulationController.delayRequested()) { + delayed = true; + long delay = simulationController.getRequestedDelay(); + if(delay == 0x0000e677d21fdbffL) { + next.setPriority(simulationController.getRequestedDelay()); + next.setNextSimulationTime(simulationController.getRequestedDelay()); + } else if (delay == 0L) { + next.setPriority(_curSimulationTime); + next.setNextSimulationTime(_curSimulationTime); + addToBuffer = false; + } else { + next.setPriority(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay()); + next.setNextSimulationTime(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay()); + } + } else { + next.setPriority(simulationTime.getNextSimulationTime()); + next.setNextSimulationTime(simulationTime.getNextSimulationTime()); + } + if(lowestNextSimulationTime > next.getPriority()) { + lowestNextSimulationTime = next.getPriority(); + } + if(simulationController.deleted()) { + result = ProcessingResult.NoUpdate; + } + if(!simulationController.enqueue()) { + // the user called "runThisInstance" -- the work item has already been re-enqueued for the + // current time slice. + addToBuffer = false; + } + } else { + synchronized (this) { + _running = false; + } + keepProcessing = false; + } + if(!simulationController.deleted() && addToBuffer) { + buffer.add(next); + } + } + } else { + synchronized (this) { + _running = false; + } + keepProcessing = false; + nextQueueTm = Long.MAX_VALUE; + } + } while (keepProcessing); + + _timeOrderedQueue.addAll(buffer); + _nextSimulationTime = Math.min(lowestNextSimulationTime, nextQueueTm); + + if(_nextSimulationTime == Long.MAX_VALUE && !delayed) { // check to make sure the user didn't set delay to Long.MAX_VALUE + _nextSimulationTime = simulationTime.getNextSimulationTime(); + } + + SimulationScheduler.PROCESSED.addAndGet(processed); + SimulationScheduler.QUEUED.addAndGet(_timeOrderedQueue.size()); + if(processed > 0) { + return new SimulationStep(simulationController.getSimulationStatus(), _nextSimulationTime); + } else { + return new SimulationStep(SimulationStatus.NoRemainingWork, _nextSimulationTime); + } + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java new file mode 100644 index 0000000..bd34eca --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -0,0 +1,439 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.google.gson.Gson; +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.io.Closeable; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +class TwinExecutionEngine implements Closeable { + private List _modelNames; + private ConcurrentHashMap> _digitalTwins; + private ConcurrentHashMap _messageProcessors; + private ConcurrentHashMap _simulationProcessors; + private ConcurrentHashMap> _messageProcessorValueTypes; + private ConcurrentHashMap> _modelInstances; + private ConcurrentHashMap> _alertProviders; + private ConcurrentHashMap> _modelsSharedData; + private HashMap _globalSharedData; + private Workbench _workbench; + private ConcurrentHashMap _simulationSchedulers; + private ConcurrentHashMap _realTimeTimers; + private Gson _gson; + + + TwinExecutionEngine(Workbench workbench) { + _workbench = workbench; + init(); + } + + void init( ) { + _modelNames = new LinkedList<>(); + _digitalTwins = new ConcurrentHashMap<>(); + _messageProcessors = new ConcurrentHashMap<>(); + _simulationProcessors = new ConcurrentHashMap<>(); + _messageProcessorValueTypes = new ConcurrentHashMap<>(); + _modelInstances = new ConcurrentHashMap<>(); + _modelsSharedData = new ConcurrentHashMap<>(); + _globalSharedData = new HashMap<>(); + _alertProviders = new ConcurrentHashMap<>(); + _simulationSchedulers = new ConcurrentHashMap<>(); + _realTimeTimers = new ConcurrentHashMap<>(); + _gson = new Gson(); + } + + void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, Class dtType, Class messageClass) { + _modelNames.add(digitalTwinModelName); + _digitalTwins.put(digitalTwinModelName, dtType); + _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); + _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); + } + + void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass, int numWorkers) { + _modelNames.add(digitalTwinModelName); + _digitalTwins.put(digitalTwinModelName, dtType); + _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); + _simulationProcessors.put(digitalTwinModelName, simulationProcessor); + _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); + _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this, numWorkers)); + } + + void addTimer(String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { + ConcurrentHashMap modelInstances = _modelInstances.get(modelName); + TwinProxy proxy = modelInstances.get(id); + SimulationScheduler scheduler = _simulationSchedulers.get(modelName); + if (scheduler != null) { + scheduler.addTimer(proxy, modelName, id, timerName, type, interval, handler); + } else { + Timer timer = new Timer(); + WorkbenchTimerTask task = new WorkbenchTimerTask(this, modelName, id, timerName, proxy, type, interval, handler); + _realTimeTimers.put(String.format("%s%s%s", modelName, id, timerName), task); + switch(type) { + case OneTime: + timer.schedule(task, interval.toMillis()); + break; + case Recurring: + timer.scheduleAtFixedRate(task, interval.toMillis(), interval.toMillis()); + break; + } + } + + } + + void stopTimer(String modelName, String id, String timerName) { + SimulationScheduler scheduler = _simulationSchedulers.get(modelName); + if (scheduler != null) { + scheduler.stopTimer(modelName, id, timerName); + } else { + WorkbenchTimerTask task = _realTimeTimers.get(String.format("%s%s%s",modelName, id,timerName)); + task.cancel(); + } + } + + void addAlertProvider(String modelName, AlertProviderConfiguration configuration) { + ConcurrentHashMap configMap = new ConcurrentHashMap<>(); + configMap.put(configuration.getName(), configuration); + _alertProviders.put(modelName, configMap); + } + + void updateTwin(String model, String id, TwinProxy proxy) { + ConcurrentHashMap modelInstances = _modelInstances.get(model); + modelInstances.put(id, proxy); + _modelInstances.put(model, modelInstances); + } + + Date getTime(String model) { + if(_simulationSchedulers.containsKey(model)) { + SimulationScheduler scheduler = _simulationSchedulers.get(model); + return new Date(scheduler.getCurrentTime()); + } + return new Date(System.currentTimeMillis()); + } + + void setSimulationStatus(boolean status) { + for(SimulationScheduler scheduler : _simulationSchedulers.values()) { + scheduler.setStatus(status); + } + } + + List runningModels() { + return _modelNames; + } + + HashMap getTwinInstances(String model) { + HashMap ret = new HashMap<>(); + ConcurrentHashMap instances = _modelInstances.get(model); + if(instances!= null) { + for(Map.Entry entry : instances.entrySet()) { + ret.put(entry.getKey(), entry.getValue().getInstance()); + } + } + return ret; + } + + DigitalTwinBase getTwinInstance(String model, String id) { + DigitalTwinBase ret = null; + ConcurrentHashMap instances = _modelInstances.get(model); + if(instances != null) { + TwinProxy proxy = instances.get(id); + if(proxy != null) { + ret = proxy.getInstance(); + } + } + return ret; + } + + TwinProxy getTwinProxy(String model, String id) { + TwinProxy proxy = null; + ConcurrentHashMap instances = _modelInstances.get(model); + if(instances != null) { + proxy = instances.get(id); + return proxy; + } + return proxy; + } + + String generateModelSchema(String model) throws WorkbenchException { + if(_digitalTwins.get(model) != null) { + ModelSchema schema; + if(_simulationProcessors.get(model) != null) { + schema = new ModelSchema( + _digitalTwins.get(model).getName(), + _messageProcessors.get(model).getClass().getName(), + _messageProcessorValueTypes.get(model).getName(), + _simulationProcessors.get(model).getClass().getName(), + List.copyOf(_alertProviders.get(model) == null ? Collections.emptyList() : _alertProviders.get(model).values())); + } else { + schema = new ModelSchema( + _digitalTwins.get(model).getName(), + _messageProcessors.get(model).getClass().getName(), + _messageProcessorValueTypes.get(model).getName(), + List.copyOf(_alertProviders.get(model) == null ? Collections.emptyList() : _alertProviders.get(model).values())); + } + + Gson gson = new Gson(); + String modelSchemaJson = gson.toJson(schema, ModelSchema.class); + return modelSchemaJson; + } else { + throw new WorkbenchException("Model has not been added to this workbench."); + } + } + + boolean hasAlertProviderConfiguration(String model, String alertProviderName) { + if(hasModel(model)) { + return _alertProviders.containsKey(model) && _alertProviders.getOrDefault(model, new ConcurrentHashMap<>()).containsKey(alertProviderName); + } else { + return false; + } + + } + + boolean hasModel(String modelName) { + return _modelNames.contains(modelName); + } + + SendingResult sendToSource(String source, String model, String id, String msg) throws WorkbenchException { + if(_modelNames.contains(source)) { + String toSend = String.format("[%s]", msg); + run(source, id, null, toSend); + return SendingResult.Handled; + } else { + ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); + List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); + messages.add(msg); + messagesByModel.put(id, messages); + _workbench.SOURCE_MESSAGES.put(model, messagesByModel); + return SendingResult.Handled; + } + } + + SendingResult sendToSource(String source, String model, String id, List jsonSerializableMessage) throws WorkbenchException { + if (_modelNames.contains(source)) { + run(source, id, null, jsonSerializableMessage); + return SendingResult.Handled; + } else { + String msg = _gson.toJson(jsonSerializableMessage); + ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>()); + List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); + messages.add(msg); + messagesByModel.put(id, messages); + _workbench.SOURCE_MESSAGES.put(model, messagesByModel); + return SendingResult.Handled; + } + } + + SimulationStep runSimulationStep(SimulationStepArgs args) { + SimulationStep status = null; + for(Map.Entry entry : _simulationSchedulers.entrySet()) { + SimulationStep next = entry.getValue().runSimulation(args); + if(status == null) { + status = next; + } else { + status.merge(next); + } + } + return status; + } + + HashMap getModelData(String model) { + HashMap sharedData = _modelsSharedData.get(model); + if(sharedData == null) sharedData = new HashMap<>(); + _modelsSharedData.put(model, sharedData); + return sharedData; + } + + HashMap getGlobalSharedData() { + return _globalSharedData; + } + + + public void logMessage(String model, LogMessage message) { + ConcurrentLinkedQueue prev = _workbench.LOGGED_MESSAGES.get(model); + if(prev == null) { + synchronized (_workbench.LOGGED_MESSAGES) { + prev = _workbench.LOGGED_MESSAGES.get(model); + if(prev == null) { + prev = new ConcurrentLinkedQueue<>(); + _workbench.LOGGED_MESSAGES.put(model, prev); + } + } + } + prev.add(message); + _workbench.LOGGED_MESSAGES.put(model, prev); + } + + public void recordAlertMessage(String model, String alertProvider, AlertMessage message) { + ConcurrentHashMap> perModelMessages = _workbench.ALERT_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); + ConcurrentLinkedQueue perApMessages = perModelMessages.getOrDefault(alertProvider, new ConcurrentLinkedQueue<>()); + perApMessages.add(message); + perModelMessages.put(alertProvider, perApMessages); + _workbench.ALERT_MESSAGES.put(model, perModelMessages); + } + + public void createInstance(String modelName, String id, DigitalTwinBase instance) { + TwinProxy proxy = new TwinProxy(instance); + ConcurrentHashMap modelInstances = _modelInstances.get(modelName); + if(modelInstances == null) { + modelInstances = new ConcurrentHashMap<>(); + } + modelInstances.put(id, proxy); + InitContext initContext = new WorkbenchInitContext(this, instance, modelName, id); + instance.init(initContext); + SimulationScheduler scheduler = _simulationSchedulers.get(modelName); + if(scheduler != null) { + proxy.setProxyState(ProxyState.Active); + scheduler.addInstance(proxy); + } + modelInstances.put(id, proxy); + _modelInstances.put(modelName, modelInstances); + } + + public void deleteSimulationInstance(String modelName, String id) { + ConcurrentHashMap modelInstances = _modelInstances.get(modelName); + TwinProxy proxy = modelInstances.remove(id); + proxy.setProxyState(ProxyState.Removed); + _modelInstances.put(modelName, modelInstances); + } + + ProcessingResult run(String model, String id, String source, String serializedList) throws WorkbenchException { + try { + ConcurrentHashMap twinInstances = _modelInstances.get(model); + if(twinInstances == null) { + twinInstances = new ConcurrentHashMap<>(); + } + TwinProxy proxy = twinInstances.get(id); + DigitalTwinBase instance = null; + if(proxy == null) { + Class dtClazz = _digitalTwins.get(model); + if(dtClazz == null) { + throw new WorkbenchException(String.format("DigitalTwin model \"%s\" does not exist on this workbench.", model)); + } + instance = dtClazz.getConstructor().newInstance(); + InitContext initContext = new WorkbenchInitContext(this, instance, model, id); + instance.init(initContext); + proxy = new TwinProxy(instance); + SimulationScheduler scheduler = _simulationSchedulers.get(model); + if(scheduler != null) { + proxy.setProxyState(ProxyState.Active); + scheduler.addInstance(proxy); + } + } else { + instance = proxy.getInstance(); + } + MessageProcessor mp = _messageProcessors.get(model); + HashMap sharedData = _modelsSharedData.get(model); + if(sharedData == null) sharedData = new HashMap<>(); + _modelsSharedData.put(model, sharedData); + SimulationController simulationController = null; + SimulationScheduler scheduler = _simulationSchedulers.get(model); + if(scheduler != null) { + simulationController = new WorkbenchSimulationController(this, scheduler); + } + WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController); + context.reset(model, id, source, instance); + ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(serializedList, _messageProcessorValueTypes.get(model))); + if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin; + switch(res) { + case UpdateDigitalTwin: + proxy.setInstance(instance); + twinInstances.put(id, proxy); + _modelInstances.put(model, twinInstances); + break; + case NoUpdate: + break; + default: + break; + } + return res; + } catch (Exception e) { + throw new WorkbenchException("Exception thrown while running message processor.", e); + } + } + + ProcessingResult run(String model, String id, String source, List messages) throws WorkbenchException { + try { + ConcurrentHashMap twinInstances = _modelInstances.get(model); + if(twinInstances == null) { + twinInstances = new ConcurrentHashMap<>(); + } + TwinProxy proxy = twinInstances.get(id); + DigitalTwinBase instance = null; + if(proxy == null) { + Class dtClazz = _digitalTwins.get(model); + if(dtClazz == null) return ProcessingResult.NoUpdate; + instance = dtClazz.getConstructor().newInstance(); + InitContext initContext = new WorkbenchInitContext(this, instance, model, id); + instance.init(initContext); + proxy = new TwinProxy(instance); + SimulationScheduler scheduler = _simulationSchedulers.get(model); + if(scheduler != null) { + proxy.setProxyState(ProxyState.Active); + scheduler.addInstance(proxy); + } + } else { + instance = proxy.getInstance(); + } + MessageProcessor mp = _messageProcessors.get(model); + HashMap sharedData = _modelsSharedData.get(model); + if(sharedData == null) sharedData = new HashMap<>(); + _modelsSharedData.put(model, sharedData); + WorkbenchSimulationController simulationController = null; + SimulationScheduler scheduler = _simulationSchedulers.get(model); + if(scheduler != null) { + simulationController = new WorkbenchSimulationController(this, scheduler); + } + WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController); + context.reset(model, id, source, instance); + if(simulationController != null) { + simulationController.reset(model, id); + } + ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(messages, _messageProcessorValueTypes.get(model))); + if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin; + switch(res) { + case UpdateDigitalTwin: + proxy.setInstance(instance); + twinInstances.put(id, proxy); + _modelInstances.put(model, twinInstances); + break; + case NoUpdate: + break; + default: + break; + } + return res; + } catch (Exception e) { + throw new WorkbenchException(e.getMessage(), e); + } + } + + @Override + public void close() throws IOException { + if(_realTimeTimers != null && _realTimeTimers.size() > 0) { + for(Map.Entry entry : _realTimeTimers.entrySet()) { + WorkbenchTimerTask task = _realTimeTimers.remove(entry.getKey()); + task.cancel(); + } + _realTimeTimers = null; + } + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java new file mode 100644 index 0000000..4811ab7 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java @@ -0,0 +1,52 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; + +class TwinProxy { + private DigitalTwinBase _instance; + private ProxyState _state; + public TwinProxy(DigitalTwinBase instance) { + _instance = instance; + _state = ProxyState.Unspecified; + } + + void setProxyState(ProxyState state) { + _state = state; + } + + ProxyState getProxyState() { + return _state; + } + + DigitalTwinBase getInstance() { + return _instance; + } + + public void setInstance(DigitalTwinBase instance) { + _instance = instance; + } + + @Override + public String toString() { + return "TwinProxy{" + + "_instance=" + _instance + + ", _state=" + _state + + '}'; + } +} + diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java new file mode 100644 index 0000000..0cc6a07 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -0,0 +1,769 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.io.*; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; + +/** + * The Workbench is used to represent an environment where developers can test real-time and simulated digital twins. + *

        + * Quick start: + *

        + *

        + * Build a real-time digital twin model for testing real-time message processing with messages generated by a simulated + * digital twin. + *

        + *

        + * The real-time model will represent a car and the simulated digital twin will + * represent a pump increasing the real-time car's tire pressure. The real-time car will process messages from the + * simulated pump and send information back to the simulated pump when the tire is full. + *

        + * + *

        The quickstart will demonstrate the following:

        + *
          + *
        • Define a real-time car digital twin
        • + *
        • Define a tire pressure change message
        • + *
        • Define a real-time car message processor
        • + *
        • Define a simulated pump digital twin
        • + *
        • Define a simulated pump message processor
        • + *
        • Define a simulated pump simulation processor
        • + *
        + * + *

        + * Defining the real-time car model: + *

        + * + *

        + * Create a class that extends the {@link DigitalTwinBase} class and add an integer property for tire pressure. + * When constructed by the {@link Workbench} this will be our real-time car instance. + *

        + *
        + *     public class RealTimeCar extends DigitalTwinBase {
        + *         private int _tirePressure;
        + *         public RealTimeCar() { _tirePressure=0; }
        + *         public RealTimeCar(int startingTirePressure) {
        + *             _tirePressure = startingTirePressure;
        + *         }
        + *
        + *         public void incrementTirePressure(int increment) {
        + *             _tirePressure += increment;
        + *         }
        + *
        + *         public int getTirePressure() {
        + *             return _tirePressure;
        + *         }
        + *     }
        + * 
        + *

        + * Defining the tire pressure change message: + *

        + *

        + * Implement a message to send from the simulated pump, to the real-time model. The message will tell the real-time + * car to increase the tire pressure by some value. + *

        + * + *
        + *     public class TirePressureMessage {
        + *         final int _pressureChange;
        + *         public TirePressureMessage(int pressureChange) {
        + *             _pressureChange = pressureChange;
        + *         }
        + *
        + *         public int getPressureChange() {
        + *             return _pressureChange;
        + *         }
        + *     }
        + * 
        + * + *

        + * Defining the real-time car message processor: + *

        + * + *

        + * Create the real-time car {@link MessageProcessor}. The message processor will apply the tire pressure change from the tire + * pressure message to the real-time car digital twin instance. When the tire is full, the message processor will + * send a message back to the simulated pump. + *

        + *
        + *     public class RealTimeCarMessageProcessor extends MessageProcessor{@literal <}RealTimeCar, TirePressureMessage{@literal >} implements Serializable {
        + *         final int TIRE_PRESSURE_FULL = 100;
        + *         public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable{@literal <}TirePressureMessage{@literal >} messages) throws Exception {
        + *             // apply the updates from the messages
        + *             for(TirePressureMessage message : messages) {
        + *                 car.incrementTirePressure(message.getPressureChange());
        + *             }
        + *             if(car.getTirePressure() {@literal >} TIRE_PRESSURE_FULL) {
        + *                 processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure()));
        + *             }
        + *             return ProcessingResult.UpdateDigitalTwin;
        + *         }
        + *     }
        + * 
        + * + *

        + * Defining the simulated pump model: + *

        + * + *

        + * Create a class that extends the {@link DigitalTwinBase} class and add a double property for tire pressure change. + * When constructed by the {@link Workbench} this will be our simulated pump instance. + *

        + *
        + *     public class SimulatedPump extends DigitalTwinBase {
        + *     private double _tirePressureChange;
        + *     private boolean _tirePressureReached = false;
        + *     public SimulatedPump() {}
        + *     public SimulatedPump(double pressureChange) {
        + *         _tirePressureChange = pressureChange;
        + *     }
        + *
        + *     public double getTirePressureChange() {
        + *         return _tirePressureChange;
        + *     }
        + *
        + *     public void setTirePressureReached() {
        + *         _tirePressureReached = true;
        + *     }
        + *
        + *     public boolean isTireFull() {
        + *         return _tirePressureReached;
        + *     }
        + * }
        + * 
        + * + *

        + * Defining the simulated pump message processor: + *

        + * + *

        + * The simulated pump should stop when the simulated pump message processor receives a message. The simulated pump message + * processor will update the state of the simulated pump indicating that the tire is full. + *

        + *
        + *     public class PumpMessageProcessor extends MessageProcessor{@literal <}SimulatedPump, TirePressureMessage{@literal >} implements Serializable {
        + *         public ProcessingResult processMessages(ProcessingContext processingContext, SimulatedPump pump, Iterable{@literal <}TirePressureMessage{@literal >} messages) throws Exception {
        + *             // apply the updates from the messages
        + *             pump.setTirePressureReached();
        + *             return ProcessingResult.UpdateDigitalTwin;
        + *         }
        + *     }
        + * 
        + * + *

        + * Defining the pump simulation processor: + *

        + * + *

        + * Define the simulated pump {@link SimulationProcessor}. This piece of code will be called at each simulation interval so + * long as the simulation has instances to run. This pump simulation processor will send a message to the + * real-time car with a tire pressure change derived from the state of the simulated pump. While the simulated pump has not been + * told to stop, it will continue sending tire pressure changes to the real-time car. + *

        + *
        + *     public class PumpSimulationProcessor extends SimulationProcessor{@literal <}SimulatedPump{@literal >} implements Serializable {
        + *         public ProcessingResult processModel(ProcessingContext processingContext, SimulatedPump simPump, Date date) {
        + *             SimulationController controller = processingContext.getSimulationController();
        + *             if(simPump.isTireFull()) {
        + *                 controller.deleteThisInstance();
        + *             } else {
        + *                 int change = (int) (100 * simPump.getTirePressureChange());
        + *                 controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change));
        + *             }
        + *             return ProcessingResult.UpdateDigitalTwin;
        + *         }
        + *     }
        + * 
        + * + *

        + * Using the workbench: + *

        + * + *

        + * The real-time and simulation models are complete. The workbench can now load up the models and then run a simulation. + * When beginning testing, the "step loop" is used to track the state of the twins and the simulation. Instantiate the + * workbench and add the models. + *

        + * + *
        + *     Workbench workbench = new Workbench();
        + *     workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class);
        + *     workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class);
        + * 
        + * + *

        + * The workbench is loaded up with the models. Add a single simulated pump instance. + * Note that no real-time car digital twin is created and added to the workbench. The first message from the + * simulated pump digital twin will cause the workbench to create a new real-time instance. + *

        + *
        + *     workbench.addInstance("SimPump", "23", new SimulationPump(0.29d));
        + * 
        + * + *

        Initialize the simulation and then step through the simulation intervals. Start the simulation now and end the + * simulation in 60 seconds.

        + * + *
        + *     SimulationStep step = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis()+60000, 1000);
        + * 
        + * + *

        + * At each interval, view the state of the real-time car to ensure the tire pressure is changing as expected. + *

        + * + *
        + *     while(step.getStatus() == SimulationStatus.Running) {
        + *         step = workbench.step();
        + *         HashMap{@literal <}String, DigitalTwinBase{@literal >} realTimeCars = workbench.getInstances("RealTimeCar");
        + *         RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23");
        + *         System.out.println("rtCar: " + rtCar.getTirePressure());
        + *     }
        + * 
        + * + *

        + * Summary: + *

        + *

        + * The simulated pump at each simulation step emits telemetry to the real-time car digital twin. With each tire pressure + * change message, the real-time car twin accrues state about the pressure of the tire. When the real-time car twins tire + * is full, it sends a message back to the simulated pump. When the simulated pump receives a message from the real-time car, + * it updates some internal state indicating to stop pumping. During the next simulation interval, the simulated pump + * deletes itself to stop pumping. This completes the simulation as there are no more remaining simulated pumps. + *

        + * + */ +public class Workbench implements AutoCloseable { + final ConcurrentHashMap> LOGGED_MESSAGES = new ConcurrentHashMap<>(); + final ConcurrentHashMap>> ALERT_MESSAGES = new ConcurrentHashMap<>(); + final ConcurrentHashMap>> SOURCE_MESSAGES = new ConcurrentHashMap<>(); + + TwinExecutionEngine _twinExecutionEngine; + private long _curTime, _endTime, _interval; + private long _now, _next; + private SimulationStep _result = null; + private boolean _simulationStarted = false; + private int _numWorkers = Runtime.getRuntime().availableProcessors(); + + + /** + * Instantiate the workbench. + */ + public Workbench() { + _twinExecutionEngine = new TwinExecutionEngine(this); + } + + /** + * Instantiate the workbench. + * @param numSimulationWorkers the number of simulation workers to use. Default is {@link Runtime#availableProcessors()}. + */ + public Workbench(int numSimulationWorkers) { + _twinExecutionEngine = new TwinExecutionEngine(this); + if(_numWorkers <= 0) throw new IllegalArgumentException("numSimulationWorkers must be greater-than 0."); + _numWorkers = numSimulationWorkers; + } + + + /** + * Adds a real-time digital twin model to the workbench. + * + * @param modelName the name of the model. + * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. + * @param dtType the model's {@link DigitalTwinBase} implementation. + * @param messageClass the model's message type. + * @param the type of the digital twin. + * @param the type of the message. + * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message + * processor must be serializable, and the digital twin implementation must have a parameterless constructor). + */ + public void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType, Class messageClass) throws WorkbenchException { + if(modelName == null || modelName.isBlank() || modelName.isEmpty() || digitalTwinMessageProcessor == null || dtType == null || messageClass == null) { + String errorMessage = String.format("modelName null: %b messageProcessor null: %b dtType null: %b messageType null: %b",modelName == null, digitalTwinMessageProcessor == null, dtType == null, messageClass == null); + throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); + } + + validate(digitalTwinMessageProcessor, dtType); + _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, dtType, messageClass); + } + + /** + * Adds a simulation digital twin model to the workbench. + * + * @param modelName the name of the model. + * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. + * @param simulationProcessor the model's {@link SimulationProcessor} implementation. Must be marked as {@link Serializable}. + * @param dtType the model's {@link DigitalTwinBase} implementation. + * @param messageClass the model's message type. + * @param the type of the digital twin. + * @param the type of the message. + * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message + * processor must be serializable, and the digital twin implementation must have a parameterless constructor). + */ + public void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass) throws WorkbenchException { + if(modelName == null || modelName.isBlank() || modelName.isEmpty() || digitalTwinMessageProcessor == null || simulationProcessor == null || dtType == null || messageClass == null) { + String errorMessage = String.format("modelName null: %b messageProcessor null: %b simulationProcessor null: %b dtType null: %b messageType null: %b",modelName == null, digitalTwinMessageProcessor == null, simulationProcessor == null, dtType == null, messageClass == null); + throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); + } + + validate(digitalTwinMessageProcessor, dtType); + _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass, _numWorkers); + } + + /** + * Adds a digital twin instance to the workbench. + * Instances cannot be added to the workbench after {@link Workbench#runSimulation(long, long, double, long)} or + * {@link Workbench#initializeSimulation(long, long, long)} has been called. + * + * @param modelName the instances model. + * @param id the instance identifier. + * @param instance the real-time or simulation instance. + * @throws WorkbenchException If the model does not exist or if a simulation is already running. + */ + public void addInstance(String modelName, String id, DigitalTwinBase instance) throws WorkbenchException { + if(_simulationStarted) throw new WorkbenchException("Cannot add new instance while simulation is active."); + if(!_twinExecutionEngine.hasModel(modelName)) throw new WorkbenchException("The model does not exist on this workbench."); + _twinExecutionEngine.createInstance(modelName, id, instance); + } + + /** + * Adds an alert provider configuration to the specified model on this workbench. + * Alert provider configurations cannot be added to the workbench after {@link Workbench#runSimulation(long, long, double, long)} or + * {@link Workbench#initializeSimulation(long, long, long)} has been called. + * + * @param modelName the instances model. + * @param configuration the alert provider configuration. + * @throws WorkbenchException If the model does not exist or if a simulation is already running. + */ + public void addAlertProvider(String modelName, AlertProviderConfiguration configuration) throws WorkbenchException { + if(_simulationStarted) throw new WorkbenchException("Cannot add new alert provider while simulation is active."); + if(!_twinExecutionEngine.hasModel(modelName)) throw new WorkbenchException("The model does not exist on this workbench."); + _twinExecutionEngine.addAlertProvider(modelName, configuration); + } + + /** + * Runs a simulation from the given startTime until the given endTime OR there is no more work to do. + * A simulation has reached the end time when the time to run the next interval is greater than the end time or + * there are no more simulated twins to run. + * + * @param startTime the start time of the simulation. + * @param endTime the end time of the simulation. + * @param speedup the speedup of the interval (in real-time). + * @param interval the interval between simulation steps. + * @return a {@link SimulationStep} that details the final runtime and the {@link SimulationStatus}. + * @throws WorkbenchException if an exception is thrown by the simulated model or real-time model. + */ + public SimulationStep runSimulation(long startTime, long endTime, double speedup, long interval) throws WorkbenchException { + _twinExecutionEngine.setSimulationStatus(true); + _simulationStarted = true; + SimulationStep ret, result = null; + SimulationStepArgs args; + long now, curTime, start, end, deltaTm, delta, wait, numItv; + args = new SimulationStepArgs(startTime, interval, WorkbenchSimulationFlags.Start); + _twinExecutionEngine.runSimulationStep(args); + SimulationStatus status = SimulationStatus.Running; + now = curTime = startTime; + while(status == SimulationStatus.Running && + curTime < endTime) { + args = new SimulationStepArgs(curTime, interval, WorkbenchSimulationFlags.Run); + now = curTime; + start = System.currentTimeMillis(); + result = _twinExecutionEngine.runSimulationStep(args); + end = System.currentTimeMillis(); + delta = result.getTime() - curTime; + numItv = delta/interval; + numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv; + deltaTm = end-start; + wait = deltaTm >= interval ? 0L : (long)((interval-deltaTm)/speedup); + status = result.getStatus(); + curTime = curTime+(numItv*interval); + try { + Thread.sleep(wait); + } catch (Exception e) { + throw new WorkbenchException(e); + } + } + if(curTime >= endTime) { + ret = new SimulationStep(SimulationStatus.EndTimeReached, curTime); + _twinExecutionEngine.setSimulationStatus(false); + _simulationStarted = false; + } else { + ret = new SimulationStep(result.getStatus(), now); + _twinExecutionEngine.setSimulationStatus(false); + _simulationStarted = false; + } + return ret; + } + + /** + * Initializes the simulation so that each interval can be run separately by calling the {@link Workbench#step()} + * function. + * + * @param startTime the start time of the simulation. + * @param endTime the end time of the simulation. + * @param interval the interval between simulation steps. + * @return a {@link SimulationStep} that details the startTime and the {@link SimulationStatus} -- which will always be {@link SimulationStatus#Running}. + */ + public SimulationStep initializeSimulation(long startTime, long endTime, long interval) { + _simulationStarted = true; + _twinExecutionEngine.setSimulationStatus(true); + _curTime = startTime; + _endTime = endTime; + _interval = interval; + _result = new SimulationStep(SimulationStatus.Running, startTime); + _twinExecutionEngine.setSimulationStatus(true); + return _result; + } + + /** + * Run the next simulation interval. + * + * @return a {@link SimulationStep} that shows the time interval that was run and the corresponding {@link SimulationStatus} + * @throws WorkbenchException if an exception is thrown by the simulated model or real-time model. + */ + public SimulationStep step() throws WorkbenchException { + long delta, numItv; + SimulationStatus status = _result.getStatus(); + if(status == SimulationStatus.Running ) { + if(_curTime >= _endTime) { + _simulationStarted = false; + _twinExecutionEngine.setSimulationStatus(false); + return new SimulationStep(SimulationStatus.EndTimeReached, _curTime); + } + SimulationStepArgs args = new SimulationStepArgs(_curTime, _interval, WorkbenchSimulationFlags.Run); + _now = _curTime; + _result = _twinExecutionEngine.runSimulationStep(args); + delta = _result.getTime() - _curTime; + numItv = delta/_interval; + numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv+1; + _curTime = _curTime+(numItv*_interval); + _next = _curTime; + return new SimulationStep(_result.getStatus(), _now); + } else { + _simulationStarted = false; + _twinExecutionEngine.setSimulationStatus(false); + throw new WorkbenchException("Simulation is inactive. Simulation status: " + _result.getStatus()); + } + } + + /** + * Retrieves the current time interval of the simulation. + * @return a {@link Date} representation for the current interval time for the simulation. + * @throws WorkbenchException if the simulation is not started or initialized. + */ + public Date getTime() throws WorkbenchException { + if(_simulationStarted) { + return new Date(_now); + } + throw new WorkbenchException("Simulation is not started"); + + } + + /** + * Retrieves the next interval time of the simulation. + * @return a {@link Date} representation for the next interval time for the simulation. + * @throws WorkbenchException if the simulation is not started or initialized. + */ + public Date peek() throws WorkbenchException { + if(_simulationStarted) { + return new Date(_next); + } + throw new WorkbenchException("Simulation is not started"); + } + + /** + * Retrieves DigitalTwin instances for a given model. + * + * @param modelName the digital twin model name + * @return the instances associated with the parameter model + * @throws WorkbenchException if an exception occurs while retrieving digital twin instances for the parameter modelName + */ + public HashMap getInstances(String modelName) throws WorkbenchException { + if(_twinExecutionEngine.getTwinInstances(modelName) == null) + throw new WorkbenchException(String.format("No instances for model %s.", modelName)); + return _twinExecutionEngine.getTwinInstances(modelName); + } + + /** + * Retrieves messages logged by digital twin instances for a specified mdoel. If the provided timestamp is 0, all messages will be returned. + * Timestamps greater than 0 will return a sublist of logged messages where the first message in the returned list + * will be greater than the provided timestamp. If no messages exist after the timestamp, the returned list will be + * empty. + * + * @param model the model name for the logged messages. + * @param timestamp the timestamp used to filter the retrieved list. + * @return the list of messages defined by the timestamp + */ + public List getLoggedMessages(String model, long timestamp) { + if(timestamp == 0L) { + return Arrays.asList(LOGGED_MESSAGES.getOrDefault(model, new ConcurrentLinkedQueue<>()).toArray(new LogMessage[0])); + } else { + ConcurrentLinkedQueue modelMessages = LOGGED_MESSAGES.getOrDefault(model, new ConcurrentLinkedQueue<>()); + int endIdx = modelMessages.size()-1; + int bgnIdx = -1; + for(LogMessage msg : modelMessages) { + if(msg.getTimestamp() <= timestamp) { + bgnIdx++; + } else { + break; + } + } + + if(endIdx == bgnIdx) { + return Collections.emptyList(); + } else if(bgnIdx == -1){ + return Arrays.asList(LOGGED_MESSAGES.getOrDefault(model, new ConcurrentLinkedQueue<>()).toArray(new LogMessage[0])); + } + + return Arrays.asList(modelMessages.toArray(new LogMessage[0])).subList(bgnIdx, endIdx); + } + } + + /** + * Retrieves alert messages from digital twin instances. + * + * @param model the model to retrieve alert messages from. + * @param alertProvider the alert provider that generated the alerts. + * @return the list of alert messages generated by digital twin instances. + * @throws WorkbenchException if an exception occurs while retrieving logged messages. + */ + public List getAlertMessages(String model, String alertProvider) throws WorkbenchException { + if(!_twinExecutionEngine.hasModel(model)) throw new WorkbenchException(String.format("No registered model with name %s found.", model)); + if(!_twinExecutionEngine.hasAlertProviderConfiguration(model, alertProvider)) throw new WorkbenchException(String.format("No alert provider configuration, registered for model %s, for %s found.", model, alertProvider)); + + ConcurrentHashMap> perModelMessages = ALERT_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); + return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0])); + } + + /** + * Retrieve the {@link SharedData} for a model. + * @param model the model name. + * @return the {@link SharedData} for a model. + * @throws WorkbenchException if an exception occurs while creating the working shared data. + */ + public SharedData getSharedModelData(String model) throws WorkbenchException { + if(_twinExecutionEngine.hasModel(model)) { + return new WorkbenchSharedData(_twinExecutionEngine.getModelData(model)); + } else { + throw new WorkbenchException("Workbench does not contain model " + model); + } + } + + /** + * Retrieve the global {@link SharedData}. + * @return the global {@link SharedData} of this workbench. + * @throws WorkbenchException if an exception occurs while creating the working shared data. + */ + public SharedData getSharedGlobalData() throws WorkbenchException { + return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); + } + + /** + * Generates a ModelSchema for the defined model + * + * @param modelName the digital twin model's name to generate a schema. + * @return a JSON string of the model's schema + * @throws WorkbenchException if an exception occurs while generating a model schema. + */ + public String generateModelSchema(String modelName) throws WorkbenchException { + if(_twinExecutionEngine.runningModels().contains(modelName)) { + return _twinExecutionEngine.generateModelSchema(modelName); + } + throw new WorkbenchException("Model is not loaded; cannot generate model schema."); + } + + /** + * Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system. If the + * parameter outputDirectory is null the file will be written to the working directory of the JVM. + * + * @param modelName the name of the digital twin model + * @param outputDirectory the directory to write the file to, or null to write the file to the current working directory. + * @return the full file path of the model.json schema file + * @throws WorkbenchException if an exception occurs while generating a model schema. + */ + public String generateModelSchema(String modelName, String outputDirectory) throws WorkbenchException { + if(modelName == null || modelName.isEmpty()) { + throw new WorkbenchException("Required parameters: modelName.", new IllegalArgumentException()); + } + + outputDirectory = outputDirectory == null ? System.getProperty("user.dir") : outputDirectory; + + if(_twinExecutionEngine.runningModels().contains(modelName)) { + try { + String filePath = String.format("%s\\model.json", outputDirectory); + FileWriter fileWriter = new FileWriter(filePath); + fileWriter.write(_twinExecutionEngine.generateModelSchema(modelName)); + fileWriter.flush(); + fileWriter.close(); + return filePath; + } catch (IOException e) { + throw new WorkbenchException("Could not write file to file system.", e); + } + + } + throw new WorkbenchException("Model is not loaded; cannot generate model schema."); + } + + /** + * Send a list of messages to a real-time or simulation model. + * @param modelName The model name. + * @param id the instance id. + * @param messages the messages to send. + * @return {@link SendingResult#Handled} unless an exception is thrown. + * @throws WorkbenchException if model name, id, or messages are null. Also thrown if the model's {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} + * throws an exception. + */ + public SendingResult send(String modelName, String id, List messages) throws WorkbenchException { + if(modelName == null || id == null || messages == null) { + throw new WorkbenchException("ModelName, Id, and messages are required."); + } + if(_twinExecutionEngine.hasModel(modelName) && !_simulationStarted) { + _twinExecutionEngine.run(modelName, id, null, messages); + } else { + String msg = _twinExecutionEngine.hasModel(modelName) ? String.format("Cannot send message to %s. Simulation is active.", modelName) : String.format("Cannot send message to %s. Model does not exist.", modelName); + throw new WorkbenchException(msg); + } + return SendingResult.Handled; + } + +// /** +// * Sends a single JSON serialized UTF-8 string message to a digital twin. +// * +// * @param modelName the name of the digital twin model +// * @param id the ID of the digital twin model +// * @param jsonSerializedMessage the serialized JSON UTF-8 string message +// * @return the sending result +// * @throws WorkbenchException if an exception is thrown by the twin or an error occurs while processing. +// */ +// public SendingResult send(String modelName, String id, String jsonSerializedMessage) throws WorkbenchException { +// List msgs = new ArrayList<>(); +// msgs.add(jsonSerializedMessage); +// return send(modelName, id, msgs); +// } +// +// /** +// * +// * @param modelName the name of the digital twin model +// * @param id the ID of the digital twin model +// * @param jsonSerializedMessages a serialized list of JSON UTF-8 string messages +// * @return the sending result +// * @throws WorkbenchException if an exception occurs while sending a message +// */ +// public SendingResult send(String modelName, String id, List jsonSerializedMessages) throws WorkbenchException { +// return sendMessage(modelName, id, jsonSerializedMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; +// } + + ProcessingResult sendMessage(String model, String id, List jsonMessages) throws WorkbenchException { + if(_simulationStarted) throw new WorkbenchException("Cannot send message; simulation is active."); + StringBuilder serializedListBuilder = new StringBuilder(String.format("[%s", jsonMessages.remove(0))); + for(String msg : jsonMessages) { + serializedListBuilder.append(","); + serializedListBuilder.append(msg); + + } + serializedListBuilder.append("]"); + return _twinExecutionEngine.run(model, id, null, serializedListBuilder.toString()); + } + + + static void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { + WorkbenchException mee = null; + + ByteArrayOutputStream baos = null; + ObjectOutputStream oos = null; + + ByteArrayInputStream bais = null; + ObjectInputStream ois = null; + boolean serialized = false; + try { + // serialize MessageProcessor + baos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream(baos); + oos.writeObject(digitalTwinMessageProcessor); + + byte[] serializedMP = baos.toByteArray(); + serialized = true; + + bais = new ByteArrayInputStream(serializedMP); + ois = new ObjectInputStream(bais); + MessageProcessor incoming = (MessageProcessor) ois.readObject(); + } catch (Exception all) { + if(serialized) + throw new WorkbenchException("Could not deserialize MessageProcessor instance.", all); + else + throw new WorkbenchException("Could not serialize MessageProcessor instance", all); + } finally { + try { + if(baos != null) { + baos.flush(); + baos.close(); + } + if(oos != null) { + oos.flush(); + oos.close(); + } + + if(bais != null) { + bais.close(); + } + if(ois != null) { + ois.close(); + } + } catch(Exception any) {} // best effort to cleanup + } + + try { + Class mpType = digitalTwinMessageProcessor.getClass(); + // instantiate TwinInstance + MessageProcessor instance = mpType.getConstructor().newInstance(); + } catch (Exception e) { + throw new WorkbenchException("Could not instantiate MessageProcessor instance. Default constructor required.", e); + } + + try { + // instantiate TwinInstance + DigitalTwinBase instance = dtType.getConstructor().newInstance(); + } catch (Exception e) { + throw new WorkbenchException("Could not instantiate DigitalTwin instance. Default constructor required.", e); + } + } + + /** + * Add a key/value pair to {@link SharedData} for a model. + * @param modelName the model name. + * @param key the key. + * @param value the value. + */ + public void addSharedModelData(String modelName, String key, byte[] value) { + _twinExecutionEngine.getModelData(modelName).put(key, value); + } + + /** + * Add a key/value pair to the global {@link SharedData}. + * @param key the key. + * @param value the value. + */ + public void addGlobalModelData(String key, byte[] value) { + _twinExecutionEngine.getGlobalSharedData().put(key, value); + } + + @Override + public void close() throws Exception { + _twinExecutionEngine.close(); + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java new file mode 100644 index 0000000..b983f6c --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java @@ -0,0 +1,66 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +/** + * A Workbench exception indicates that a real-time or simulated twin caused an exception. + */ +public class WorkbenchException extends Exception { + + /** + * The string message for this workbench exception. + */ + String _message; + /** + * The inner cause of the workbench exception. + */ + Exception _innerException; + + /** + * Instantiates a WorkbenchException with the parameter message and inner exception + * + * @param message the message of this exception + * @param e the inner exception + */ + public WorkbenchException(String message, Exception e) { + _message = message; + _innerException = e; + } + + /** + * Instantiates a WorkbenchException with the parameter inner exception + * + * @param e the inner exception + */ + public WorkbenchException(Exception e) { + _innerException = e; + _message = e.getMessage(); + } + + /** + * Instantiates a WorkbenchException with the parameter message + * + * @param message the message of this exception + */ + public WorkbenchException(String message) { + _message = message; + } + + @Override + public String getMessage() { + return _message; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java new file mode 100644 index 0000000..8cc55b0 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -0,0 +1,59 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.time.Duration; + +class WorkbenchInitContext extends InitContext { + TwinExecutionEngine _twinExecutionEngine; + DigitalTwinBase _instance; + String _model; + String _id; + + WorkbenchInitContext(TwinExecutionEngine twinExecutionEngine, DigitalTwinBase instance, String model, String id) { + _twinExecutionEngine = twinExecutionEngine; + _instance = instance; + _model = model; + _id = id; + } + + @Override + public TimerActionResult startTimer(String timerName, Duration duration, TimerType timerType, TimerHandler timerHandler) { + return WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_instance, _model, _id, timerName, duration, timerType, timerHandler); + } + + @Override + public SharedData getSharedModelData() { + return new WorkbenchSharedData(_twinExecutionEngine.getModelData(_model)); + } + + @Override + public SharedData getSharedGlobalData() { + return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); + } + + @Override + public String getId() { + return _id; + } + + @Override + public String getModel() { + return _model; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java new file mode 100644 index 0000000..3128ad8 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java @@ -0,0 +1,39 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext; +import com.scaleoutsoftware.digitaltwin.core.SharedData; + +class WorkbenchInitSimulationContext implements InitSimulationContext { + SharedData _globalData; + SharedData _modelData; + + WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) { + _globalData = globalData; + _modelData = modelData; + } + + @Override + public SharedData getSharedModelData() { + return _modelData; + } + + @Override + public SharedData getSharedGlobalData() { + return _globalData; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java new file mode 100644 index 0000000..43b0a06 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java @@ -0,0 +1,67 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.google.gson.Gson; +import com.scaleoutsoftware.digitaltwin.core.MessageFactory; + +import java.lang.reflect.ParameterizedType; +import java.lang.reflect.Type; +import java.util.List; + +class WorkbenchMessageListFactory implements MessageFactory { + private String _serializedJsonList; + private List _messages; + private Class _type; + + WorkbenchMessageListFactory(String serializedJson, Class type) { + _serializedJsonList = serializedJson; + _messages = null; + _type = type; + } + + WorkbenchMessageListFactory(List messages, Class type) { + _serializedJsonList = null; + _messages = messages; + _type = type; + } + + @Override + public Iterable getIncomingMessages() { + if (_messages != null) { + return (Iterable) _messages; + } else { + Gson gson = new Gson(); + return gson.fromJson(_serializedJsonList, getTypedList(_type)); + } + } + + private Type getTypedList(final Class paramClass) { + return new ParameterizedType() { + public Type[] getActualTypeArguments() { + return new Type[]{paramClass}; + } + + public Type getRawType() { + return List.class; + } + + public Type getOwnerType() { + return null; + } + }; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java new file mode 100644 index 0000000..2846a09 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -0,0 +1,237 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.google.gson.Gson; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.*; +import java.util.logging.Level; + +class WorkbenchProcessingContext extends ProcessingContext { + final TwinExecutionEngine _twinExecutionEngine; + String _model; + String _id; + String _source; + DigitalTwinBase _twinInstance; + SimulationController _controller; + HashMap _modelData; + HashMap _globalData; + boolean _forceSave; + + WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, HashMap modelSharedData, HashMap globalSharedData, SimulationController simulationController) { + _twinExecutionEngine = twinExecutionEngine; + _controller = simulationController; + _modelData = modelSharedData; + _globalData = globalSharedData; + } + + WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, SimulationController controller) { + _twinExecutionEngine = twinExecutionEngine; + _controller = controller; + } + + void reset(String model, String id, String source, DigitalTwinBase instance) { + _model = model; + _id = id; + _twinInstance = instance; + _forceSave = false; + _source = source; + _modelData = _twinExecutionEngine.getModelData(model); + _globalData = _twinExecutionEngine.getGlobalSharedData(); + } + + void reset(String model, String id, String source) { + _model = model; + _id = id; + _forceSave = false; + _source = source; + _modelData = _twinExecutionEngine.getModelData(model); + _globalData = _twinExecutionEngine.getGlobalSharedData(); + } + + void resetInstance(DigitalTwinBase instance) { + _twinInstance = instance; + } + + boolean forceSave() { + return _forceSave; + } + + @Override + public SendingResult sendToDataSource(byte[] bytes) { + try { + return _twinExecutionEngine.sendToSource(_source, _model, _id, new String(bytes, StandardCharsets.UTF_8)); + } catch (WorkbenchException e) { + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult sendToDataSource(Object jsonSerializableMessage) { + try { + List jsonSerializableMessages = new LinkedList<>(); + jsonSerializableMessages.add(jsonSerializableMessage); + return _twinExecutionEngine.sendToSource(_source, _model, _id, jsonSerializableMessages); + } catch (WorkbenchException e) { + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult sendToDataSource(List list) { + try { + return _twinExecutionEngine.sendToSource(_source, _model, _id, list); + } catch (WorkbenchException e) { + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult sendToDigitalTwin(String model, String id, byte[] bytes) { + List msgs = new LinkedList<>(); + msgs.add(bytes); + return sendToDigitalTwin(model, id, msgs); + } + + @Override + public SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage) { + try { + if(_twinExecutionEngine.getTwinInstance(model, id) != null) { + List jsonSerializableMessages; + if(jsonSerializableMessage instanceof List) { + jsonSerializableMessages = (List)jsonSerializableMessage; + } else { + jsonSerializableMessages = new LinkedList<>(); + jsonSerializableMessages.add(jsonSerializableMessage); + } + + return _twinExecutionEngine.run(model, id, null, jsonSerializableMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; + } else { + return SendingResult.NotHandled; + } + } catch (WorkbenchException e) { + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult sendToDigitalTwin(String model, String id, String msg) { + return sendToDigitalTwin(model, id, msg.getBytes(StandardCharsets.UTF_8)); + } + + @Override + public SendingResult sendToDigitalTwin(String model, String id, List list) { + if( (model == null || model.isEmpty()) || + (id == null || id.isEmpty()) || + (list == null || list.isEmpty())) { + return SendingResult.NotHandled; + } + Gson gson = new Gson(); + List msgs = new LinkedList<>(); + for(byte[] serialMsg : list) { + msgs.add(new String(serialMsg, StandardCharsets.UTF_8)); + } + String json = gson.toJson(msgs); + try { + if(_twinExecutionEngine.getTwinInstance(model, id) != null) { + return _twinExecutionEngine.run(model, id, null, json) != null ? SendingResult.Handled : SendingResult.NotHandled; + } else { + return SendingResult.NotHandled; + } + + } catch (WorkbenchException e) { + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult sendAlert(String alertProviderName, AlertMessage alertMessage) { + if(alertProviderName.isBlank() || alertProviderName.isEmpty() || alertMessage == null) return SendingResult.NotHandled; + else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) return SendingResult.NotHandled; + else { + if(_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) { + _twinExecutionEngine.recordAlertMessage(_model, alertProviderName, alertMessage); + } + return SendingResult.Handled; + } + } + + @Override + public PersistenceProvider getPersistenceProvider() { + return null; + } + + @Override + public String getDataSourceId() { + return _id; + } + + @Override + public String getDigitalTwinModel() { + return _model; + } + + @Override + public void logMessage(Level level, String msg) { + _twinExecutionEngine.logMessage(_model, new LogMessage(level, msg)); + } + + @Override + public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { + TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_twinInstance, _model, _id, timerName, interval, timerType, timerHandler); + if(ret != TimerActionResult.Success) { + _forceSave = false; + } else { + _forceSave = true; + } + return ret; + } + + @Override + public TimerActionResult stopTimer(String timerName) { + TimerActionResult ret = WorkbenchTimerService.stopTimer(_twinExecutionEngine, _twinInstance, _model, _id, timerName); + if(ret != TimerActionResult.Success) { + _forceSave = false; + } else { + _forceSave = true; + } + return ret; + } + + @Override + public Date getCurrentTime() { + return _twinExecutionEngine.getTime(_model); + } + + @Override + public SimulationController getSimulationController() { + return _controller; + } + + @Override + public SharedData getSharedModelData() { + return new WorkbenchSharedData(_modelData); + } + + @Override + public SharedData getSharedGlobalData() { + return new WorkbenchSharedData(_globalData); + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java new file mode 100644 index 0000000..0712e9a --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java @@ -0,0 +1,112 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus; +import com.scaleoutsoftware.digitaltwin.core.CacheResult; +import com.scaleoutsoftware.digitaltwin.core.SharedData; + +import java.util.HashMap; + +class WorkbenchSharedData implements SharedData { + private final HashMap data; + + public WorkbenchSharedData(HashMap shared) { + data = shared; + } + @Override + public CacheResult get(String s) { + return new CacheResult() { + @Override + public String getKey() { + return s; + } + + @Override + public byte[] getValue() { + return data.getOrDefault(s, null); + } + + @Override + public CacheOperationStatus getStatus() { + return data.containsKey(s) ? CacheOperationStatus.ObjectRetrieved : CacheOperationStatus.ObjectDoesNotExist; + } + }; + } + + @Override + public CacheResult put(String s, byte[] bytes) { + data.put(s, bytes); + return new CacheResult() { + @Override + public String getKey() { + return s; + } + + @Override + public byte[] getValue() { + return bytes; + } + + @Override + public CacheOperationStatus getStatus() { + return CacheOperationStatus.ObjectPut; + } + }; + } + + @Override + public CacheResult remove(String s) { + byte[] v = data.remove(s); + return new CacheResult() { + @Override + public String getKey() { + return s; + } + + @Override + public byte[] getValue() { + return v; + } + + @Override + public CacheOperationStatus getStatus() { + return v == null ? CacheOperationStatus.ObjectDoesNotExist : CacheOperationStatus.ObjectRemoved; + } + }; + } + + @Override + public CacheResult clear() { + data.clear(); + return new CacheResult() { + @Override + public String getKey() { + return null; + } + + @Override + public byte[] getValue() { + return null; + } + + @Override + public CacheOperationStatus getStatus() { + return CacheOperationStatus.CacheCleared; + } + }; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java new file mode 100644 index 0000000..611d7af --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -0,0 +1,182 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +class WorkbenchSimulationController implements SimulationController { + TwinExecutionEngine _engine; + SimulationScheduler _scheduler; + private long _requestedDelay; + private boolean _delayRequested; + private boolean _deleted; + private boolean _enqueue; + private String _modelName; + private String _id; + private SimulationStatus _simulationStatus = SimulationStatus.Running; + + public WorkbenchSimulationController(TwinExecutionEngine engine, SimulationScheduler scheduler) { + _engine = engine; + _scheduler = scheduler; + } + + @Override + public Duration getSimulationTimeIncrement() { + return null; + } + + @Override + public Date getSimulationStartTime() { + return _scheduler.getSimulationStartTime(); + } + + @Override + public SendingResult delay(Duration duration) { + _requestedDelay = duration.toMillis(); + _delayRequested = true; + return SendingResult.Handled; + } + + @Override + public SendingResult delayIndefinitely() { + _requestedDelay = 0x0000e677d21fdbffL; + _delayRequested = true; + return SendingResult.Handled; + } + + @Override + public SendingResult emitTelemetry(String modelName, byte[] bytes) { + try { + _engine.run(modelName, _id, _modelName, String.format("[%s]", new String(bytes, StandardCharsets.UTF_8))); + return SendingResult.Handled; + } catch (WorkbenchException e) { + e.printStackTrace(); + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult emitTelemetry(String modelName, Object jsonSerializableMessage) { + try { + if(_engine.hasModel(modelName)) { + List jsonSerializableMessages = new LinkedList<>(); + jsonSerializableMessages.add(jsonSerializableMessage); + _engine.run(modelName, _id, _modelName, jsonSerializableMessages); + return SendingResult.Handled; + } else { + return SendingResult.NotHandled; + } + + } catch (WorkbenchException e) { + e.printStackTrace(); + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult createInstance(String modelName, String id, T instance) { + try { + _engine.createInstance(modelName, id, instance); + return SendingResult.Handled; + } catch (Exception e) { + e.printStackTrace(); + return SendingResult.NotHandled; + } + } + + @Override + public SendingResult createInstanceFromPersistenceStore(String modelName, String id) { + try { + throw new NoSuchMethodException("Not available on the workbench."); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + @Override + public SendingResult createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { + try { + throw new NoSuchMethodException("Not available on the workbench."); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); + } + } + + @Override + public SendingResult deleteInstance(String modelName, String id) { + _engine.deleteSimulationInstance(modelName, id); + return SendingResult.Handled; + } + + @Override + public SendingResult deleteThisInstance() { + _engine.deleteSimulationInstance(_modelName, _id); + _deleted = true; + return SendingResult.Handled; + } + + @Override + public void runThisInstance() { + try { + _scheduler.runThisInstance(_modelName, _id); + _enqueue = false; + } catch (WorkbenchException e) { + throw new RuntimeException(e); + } + + } + + @Override + public SimulationStatus stopSimulation() { + _simulationStatus = SimulationStatus.InstanceRequestedStop; + return _simulationStatus; + } + + public boolean delayRequested() { + return _delayRequested; + } + + public void reset(String modelName, String id) { + _modelName = modelName; + _id = id; + _requestedDelay = Long.MIN_VALUE; + _delayRequested = false; + _deleted = false; + _enqueue = true; + } + + public long getRequestedDelay() { + return _requestedDelay; + } + + public boolean deleted() { + return _deleted; + } + + public boolean enqueue() { + return _enqueue; + } + + public SimulationStatus getSimulationStatus() { + return _simulationStatus; + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java new file mode 100644 index 0000000..4e7acff --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java @@ -0,0 +1,25 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +enum WorkbenchSimulationFlags { + // Start the simulation + Start, + // Run the simulation + Run, + // Stop the simulation + Stop +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java new file mode 100644 index 0000000..c5911a7 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -0,0 +1,65 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.time.Duration; + +class WorkbenchTimerService { + + static TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { + if(timerName == null || timerName.isBlank() || timerName.isEmpty() || interval == null || + interval.isZero() || interval.isNegative() || timerType == null || timerHandler == null) { + String msg = String.format("Empty, blank, zero, or null parameter provided: timerName %s interval %s timerType %s timerHandler %s", + timerName, interval, timerType, timerHandler); + throw new IllegalArgumentException(msg); + + } + if (instance.TimerHandlers.size() >= Constants.MAX_TIMER_COUNT) // all timer slots are occupied + return TimerActionResult.FailedTooManyTimers; + + if(instance.TimerHandlers.containsKey(timerName)) return TimerActionResult.FailedTimerAlreadyExists; + + int timerId = -1; + + boolean[] taken = new boolean[Constants.MAX_TIMER_COUNT]; + // List of all timer Ids + for (TimerMetadata md : instance.TimerHandlers.values()) { + taken[md.getTimerId()] = true; + } + + for(int i = 0; i < taken.length; i++) { + if(!taken[i]) { + timerId = i; + break; + } + } + + twinExecutionEngine.addTimer(model, id, timerName, timerType, interval, timerHandler); + + TimerMetadata metadata = new TimerMetadata<>(timerHandler, timerType, interval.toMillis(), timerId); + instance.TimerHandlers.put(timerName, metadata); + return TimerActionResult.Success; + } + + static TimerActionResult stopTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName) { + twinExecutionEngine.stopTimer(model, id, timerName); + instance.TimerHandlers.remove(timerName); + return TimerActionResult.Success; + } + +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java new file mode 100644 index 0000000..6118b9e --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java @@ -0,0 +1,63 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.scaleoutsoftware.digitaltwin.core.*; + +import java.time.Duration; +import java.util.TimerTask; + +class WorkbenchTimerTask extends TimerTask { + TwinExecutionEngine _engine; + String _modelName; + String _id; + String _timerName; + TwinProxy _proxy; + TimerType _type; + Duration _interval; + TimerHandler _handler; + + WorkbenchTimerTask(TwinExecutionEngine engine, String modelName, String id, String timerName, TwinProxy proxy, TimerType type, Duration interval, TimerHandler handler) { + _engine = engine; + _modelName = modelName; + _id = id; + _timerName = timerName; + _proxy = proxy; + _type = type; + _interval = interval; + _handler = handler; + } + + @Override + public void run() { + DigitalTwinBase instance = _proxy.getInstance(); + WorkbenchProcessingContext context = new WorkbenchProcessingContext(_engine, null); + context.reset(_modelName, _id, null, instance); + ProcessingResult result; + synchronized (instance) { + result = _handler.onTimedMessage(_timerName, instance, context); + } + switch (result) { + case UpdateDigitalTwin: + _engine.updateTwin(_modelName, _id, _proxy); + break; + case NoUpdate: + break; + default: + throw new RuntimeException(new WorkbenchException("Unknown return type from timer handler.")); + } + } +} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java new file mode 100644 index 0000000..c8df4a2 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java @@ -0,0 +1,21 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +/** + * Digital twin development API - Develop and test simulation/real-time digital twins. + */ +package com.scaleoutsoftware.digitaltwin.development; + diff --git a/docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java new file mode 100644 index 0000000..4864388 --- /dev/null +++ b/docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -0,0 +1,873 @@ +/* + Copyright (c) 2025 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.development; + +import com.google.gson.Gson; +import com.scaleoutsoftware.digitaltwin.core.*; +import org.junit.Assert; +import org.junit.Test; + +import java.io.Serializable; +import java.nio.charset.StandardCharsets; +import java.time.Duration; +import java.util.*; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; + +public class TestWorkbench { + public static class SimpleDigitalTwin extends DigitalTwinBase { + private String _stringProp; + public SimpleDigitalTwin() {} + public SimpleDigitalTwin(String stringProp) { + _stringProp = stringProp; + } + } + + public static class SimpleMessage { + String stringChange; + int intChange; + String payload; + public SimpleMessage(String s, int i) { + stringChange = s; + intChange = i; + } + } + + public static class SimpleMessageProcessor extends MessageProcessor implements Serializable { + + public SimpleMessageProcessor() {} + + @Override + public ProcessingResult processMessages(ProcessingContext processingContext, SimpleDigitalTwin instance, Iterable messages) { + Gson gson = new Gson(); + Date currentTime = processingContext.getCurrentTime(); + PersistenceProvider provider = processingContext.getPersistenceProvider(); + if(processingContext.getDigitalTwinModel().compareTo(instance.getModel()) != 0) { + throw new IllegalStateException(String.format("context.getModel and instance.getModel difer. %s:%s", processingContext.getDigitalTwinModel(), instance.getModel())); + } + if(processingContext.getDataSourceId().compareTo(instance.getId()) != 0) { + throw new IllegalStateException(String.format("context.getModel and instance.getModel difer. %s:%s", processingContext.getDigitalTwinModel(), instance.getModel())); + } + + if(instance.getModel().compareTo("SimSimple") == 0) {// if this is a simulation model... + for(SimpleMessage msg : messages) { + System.out.println(msg.stringChange); + } + } else { + for(SimpleMessage msg : messages) { + switch (msg.stringChange) { + case "SendToSource": + processingContext.sendToDataSource(new SimpleMessage("Hello from data source!", 10)); + break; + case "SendToTwin": + String jsonMsg = gson.toJson(msg); + byte[] bytes = jsonMsg.getBytes(StandardCharsets.UTF_8); + processingContext.sendToDigitalTwin(msg.payload == null ? msg.payload : "model", msg.intChange+"",bytes); + break; + case "LogMessage": + processingContext.logMessage(Level.INFO, msg.payload); + break; + case "StartTimer": + processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, + new TimerHandler() { + @Override + public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { + System.out.println("Hello from real-time timer."); + return ProcessingResult.UpdateDigitalTwin; + } + }); + break; + case "StopTimer": + processingContext.stopTimer("timer"); + break; + case "SharedData": + SharedData sharedData = processingContext.getSharedModelData(); + CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); + if(result.getStatus() == CacheOperationStatus.ObjectPut) { + System.out.println("Successfully stored object in model storage."); + } + result = sharedData.get("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { + System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); + } + result = sharedData.remove("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { + System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); + } + result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)); + sharedData = processingContext.getSharedGlobalData(); + result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); + if(result.getStatus() == CacheOperationStatus.ObjectPut) { + System.out.println("Successfully stored object in global storage."); + } + result = sharedData.get("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { + System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); + } + result = sharedData.remove("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { + System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); + } + result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)); + break; + case "WakeUp": + SimulationController controller = processingContext.getSimulationController(); + instance._stringProp = "WakeUp"; + System.out.println("Calling run this twin..."); + controller.runThisInstance(); + break; + default: + break; + } + } + } + return ProcessingResult.UpdateDigitalTwin; + } + } + + public static class RealTimeCar extends DigitalTwinBase { + private int _tirePressure; + public RealTimeCar() { _tirePressure=0; } + public RealTimeCar(int startingTirePressure) { + _tirePressure = startingTirePressure; + } + + public void incrementTirePressure(int increment) { + _tirePressure += increment; + } + + public int getTirePressure() { + return _tirePressure; + } + } + + public static class TirePressureMessage { + final int _pressureChange; + public TirePressureMessage(int pressureChange) { + _pressureChange = pressureChange; + } + + public int getPressureChange() { + return _pressureChange; + } + } + + public static class RealTimeCarMessageProcessor extends MessageProcessor implements Serializable { + final int TIRE_PRESSURE_FULL = 100; + @Override + public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable messages) throws Exception { + // apply the updates from the messages + for(TirePressureMessage message : messages) { + car.incrementTirePressure(message.getPressureChange()); + } + if(car.getTirePressure() > TIRE_PRESSURE_FULL) { + processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure())); + } + return ProcessingResult.UpdateDigitalTwin; + } + } + + public static class SimulationPump extends DigitalTwinBase { + private double _tirePressureChange; + private boolean _tirePressureReached = false; + public SimulationPump() {} + public SimulationPump(double pressureChange) { + _tirePressureChange = pressureChange; + } + + public double getTirePressureChange() { + return _tirePressureChange; + } + + public void setTirePressureReached() { + _tirePressureReached = true; + } + + public boolean isTireFull() { + return _tirePressureReached; + } + } + + public static class SimulatedPumpMessageProcessor extends MessageProcessor implements Serializable { + @Override + public ProcessingResult processMessages(ProcessingContext processingContext, SimulationPump simCar, Iterable messages) throws Exception { + // apply the updates from the messages + simCar.setTirePressureReached(); + return ProcessingResult.UpdateDigitalTwin; + } + } + + public static class PumpSimulationProcessor extends SimulationProcessor implements Serializable { + @Override + public ProcessingResult processModel(ProcessingContext processingContext, SimulationPump simPump, Date date) { + SimulationController controller = processingContext.getSimulationController(); + if(simPump.isTireFull()) { + controller.deleteThisInstance(); + } else { + int change = (int) (100 * simPump.getTirePressureChange()); + controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change)); + } + return ProcessingResult.UpdateDigitalTwin; + } + } + + public static class SimpleSimProcessor extends SimulationProcessor implements Serializable { + private Gson _gson = new Gson(); + private AtomicInteger timesInvoked = new AtomicInteger(0); + private boolean _useJson; + private String _modelIdToMessage; + private String _instanceIdToMessage; + + public SimpleSimProcessor(boolean json) { + _useJson = json; + } + + public SimpleSimProcessor(String modelIdToMessage, String instanceIdToMessage) { + _useJson = false; + _modelIdToMessage = modelIdToMessage; + _instanceIdToMessage = instanceIdToMessage; + } + + public int getTimesInvoked() { + return timesInvoked.get(); + } + + @Override + public ProcessingResult processModel(ProcessingContext processingContext, SimpleDigitalTwin simpleDigitalTwin, Date date) { + timesInvoked.addAndGet(1); + SimulationController controller = processingContext.getSimulationController(); + if(simpleDigitalTwin.getId().compareTo("stop") == 0) { + controller.stopSimulation(); + return ProcessingResult.UpdateDigitalTwin; + } else if(simpleDigitalTwin.getId().contains("delay")) { + controller.delay(Duration.ofSeconds(600)); + return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().contains("timer")) { + processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.OneTime, new TimerHandler<>() { + @Override + public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { + System.out.println("timer called!"); + return ProcessingResult.UpdateDigitalTwin; + } + }); + return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().contains("log")) { + processingContext.logMessage(Level.INFO, simpleDigitalTwin._stringProp); + processingContext.logMessage(Level.WARNING, simpleDigitalTwin._stringProp); + processingContext.logMessage(Level.SEVERE, simpleDigitalTwin._stringProp); + return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().contains("alert")) { + processingContext.sendAlert("alert", new AlertMessage(simpleDigitalTwin.getId(), simpleDigitalTwin.getId(), simpleDigitalTwin._stringProp)); + return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().contains("sleeper")) { + if(simpleDigitalTwin._stringProp.compareTo("WakeUp") == 0) { + System.out.println("Model ran after runThisInstance"); + simpleDigitalTwin._stringProp = "asleep"; + } + System.out.println("Going to sleep..."); + controller.delayIndefinitely(); + return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().contains("waker")) { + System.out.println("Waking up sleeper..."); + processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, new SimpleMessage("WakeUp", 23)); + return ProcessingResult.UpdateDigitalTwin; + } else if (simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { + return ProcessingResult.UpdateDigitalTwin; + } + long delay = Long.parseLong(simpleDigitalTwin.getId()); + controller.delay(Duration.ofSeconds(delay)); + if(_useJson) { + byte[] msg = _gson.toJson(new SimpleMessage("SendToSource", 23)).getBytes(StandardCharsets.UTF_8); + controller.emitTelemetry("Simple", msg); + } else { + SimpleMessage telemetry = new SimpleMessage("SendToSource", 23); + controller.emitTelemetry("Simple", telemetry); + } + return ProcessingResult.UpdateDigitalTwin; + } + + @Override + public ProcessingResult onInitSimulation(InitSimulationContext ctx, SimpleDigitalTwin simpleDigitalTwin, Date date) { + if(simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { + timesInvoked.set(1000); + } + + return ProcessingResult.UpdateDigitalTwin; + } + } + + @Test + public void TestWorkbenchNoInstances() throws WorkbenchException { + Gson gson = new Gson(); + SimulationStep result; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class); + + result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); + Assert.assertSame(SimulationStatus.NoRemainingWork, result.getStatus()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchOnlySimulationInstances() throws WorkbenchException { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + Gson gson = new Gson(); + SimulationStep result; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + for (int i = 1; i < 2; i++) { + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); + workbench.addInstance("SimSimple", "" + i, instance); + } + + result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + Assert.assertEquals(60, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + + } + + @Test + public void TestWorkbenchSample() throws WorkbenchException { + long expectedStop; + SimulationStep step; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class); + workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class); + + workbench.addInstance("SimPump", "23", new SimulationPump(0.29d)); + long start = System.currentTimeMillis(); + long end = start + 60000; + expectedStop = start + 5000; + step = workbench.initializeSimulation(start, end, 1000); + + while (step.getStatus() == SimulationStatus.Running) { + step = workbench.step(); + HashMap realTimeCars = workbench.getInstances("RealTimeCar"); + RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23"); + System.out.println("rtCar: " + rtCar.getTirePressure()); + } + Assert.assertEquals(expectedStop, step.getTime()); + System.out.println("Simulation completed. Sim status: " + step.getStatus() + " endTime: " + step.getTime()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchSampleRun() throws WorkbenchException { + long expectedStop; + SimulationStep step; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class); + workbench.addSimulationModel("SimModel", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class); + + workbench.addInstance("SimModel", "23", new SimulationPump(0.29d)); + long start = System.currentTimeMillis(); + long end = start + 60000; + expectedStop = start + 5000; + step = workbench.runSimulation(start, end, 1, 1000); + Assert.assertEquals(expectedStop, step.getTime()); + System.out.println("Simulation completed. Sim status: " + step.getStatus() + " endTime: " + step.getTime()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchSpeedup() throws WorkbenchException { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + Gson gson = new Gson(); + SimulationStep result; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + for (int i = 0; i < 1000; i++) { + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); + workbench.addInstance("SimSimple", "" + i, instance); + } + + long start = System.currentTimeMillis(); + long stop = start + 60000; + result = workbench.runSimulation(System.currentTimeMillis(), stop, 100, 1000); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + + // each id (0-999) delays for it's id in seconds + Assert.assertEquals(1249, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchDebug() throws WorkbenchException{ + Gson gson = new Gson(); + int numInstance = 10; + int numItterations = 0; + for(int i = 0; i < 20; i ++) { + SimpleSimProcessor processor = new SimpleSimProcessor(i >= 10); + SimulationStep result; + long start; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + for (int twinCount = 0; twinCount < 1000; twinCount++) { + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + twinCount); + workbench.addInstance("SimSimple", "" + twinCount, instance); + } + result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); + start = System.currentTimeMillis(); + while (result.getStatus() == SimulationStatus.Running) { + result = workbench.step(); + if (result.getStatus() == SimulationStatus.Running) { + numItterations++; + } + } + long stop = System.currentTimeMillis(); + System.out.println("RunTime: " + (stop-start)); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + // each id (0-999) delays for it's id in seconds, processor.getTimesInvoked()); + Assert.assertEquals(1249, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + } + + @Test + public void testWorkbenchDebugOnlySimulationInstances() throws WorkbenchException { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + Gson gson = new Gson(); + long stopTimeMs; + SimulationStep step; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); + workbench.addInstance("SimSimple", "" + 100, instance); + + long startTimeMs = System.currentTimeMillis(); + stopTimeMs = startTimeMs + 60000; + long expectedTm = startTimeMs; + step = workbench.initializeSimulation(startTimeMs, stopTimeMs, 1000); + while (step.getStatus() == SimulationStatus.Running) { + step = workbench.step(); + Assert.assertEquals(expectedTm, step.getTime()); + expectedTm += 1000; + } + Assert.assertSame(SimulationStatus.EndTimeReached, step.getStatus()); + Assert.assertEquals(stopTimeMs, step.getTime()); + Assert.assertEquals(60, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchStop() throws WorkbenchException{ + Gson gson = new Gson(); + int numInstance = 10; + int numItterations = 0; + SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimulationStep result; + long start; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + for (int twinCount = 0; twinCount < 1000; twinCount++) { + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + twinCount); + workbench.addInstance("SimSimple", "" + twinCount, instance); + } + DigitalTwinBase instance = new SimpleDigitalTwin("stop"); + workbench.addInstance("SimSimple", "stop", instance); + + result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); + start = System.currentTimeMillis(); + while (result.getStatus() == SimulationStatus.Running) { + result = workbench.step(); + } + long stop = System.currentTimeMillis(); + System.out.println("RunTime: " + (stop-start)); + Assert.assertSame(SimulationStatus.InstanceRequestedStop, result.getStatus()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + @Test + public void TestWorkbenchHugeDelays() throws WorkbenchException{ + Gson gson = new Gson(); + int numInstance = 10; + int numItterations = 0; + SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimulationStep result; + long start; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + for (int twinCount = 0; twinCount < 1000; twinCount++) { + DigitalTwinBase instance = new SimpleDigitalTwin("delay" + twinCount); + workbench.addInstance("SimSimple", "delay" + twinCount, instance); + } + + result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); + start = System.currentTimeMillis(); + while (result.getStatus() == SimulationStatus.Running) { + result = workbench.step(); + } + long stop = System.currentTimeMillis(); + System.out.println("RunTime: " + (stop-start)); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + Assert.assertEquals(1000, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + @Test + public void TestWorkbenchTimer() throws WorkbenchException{ + Gson gson = new Gson(); + int numInstance = 10; + int numItterations = 0; + SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimulationStep result; + long start; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + for (int twinCount = 0; twinCount < 1; twinCount++) { + DigitalTwinBase instance = new SimpleDigitalTwin("timer" + twinCount); + workbench.addInstance("SimSimple", "timer" + twinCount, instance); + } + + result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); + start = System.currentTimeMillis(); + while (result.getStatus() == SimulationStatus.Running) { + result = workbench.step(); + } + long stop = System.currentTimeMillis(); + System.out.println("RunTime: " + (stop-start)); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + Assert.assertEquals(60, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + @Test + public void TestWorkbenchRealtimeTimer() throws WorkbenchException, InterruptedException { + Gson gson = new Gson(); + int numInstance = 10; + int numItterations = 0; + SimpleSimProcessor processor = new SimpleSimProcessor(false); + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + + for (int twinCount = 0; twinCount < 1; twinCount++) { + DigitalTwinBase instance = new SimpleDigitalTwin("timer" + twinCount); + workbench.addInstance("Simple", "timer" + twinCount, instance); + } + + List messages = new LinkedList<>(); + messages.add(new SimpleMessage("StartTimer", 0)); + workbench.send("Simple", "timer0", messages); + + Thread.sleep(3000); + messages = new LinkedList<>(); + messages.add(new SimpleMessage("StopTimer", 0)); + workbench.send("Simple", "timer0", messages); + Thread.sleep(2000); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + @Test + public void TestWorkbenchRealtimeTimerScope() throws WorkbenchException, InterruptedException { + Gson gson = new Gson(); + int numInstance = 10; + int numItterations = 0; + SimpleSimProcessor processor = new SimpleSimProcessor(false); + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + + for(int twinCount = 0; twinCount < 1; twinCount++) { + DigitalTwinBase instance = new SimpleDigitalTwin("timer"+twinCount); + workbench.addInstance("Simple", "timer" + twinCount, instance); + } + + List messages = new LinkedList<>(); + messages.add(new SimpleMessage("StartTimer", 0)); + workbench.send("Simple", "timer0", messages); + Thread.sleep(3000); + } catch (Exception e) { + Assert.fail(); + } + Thread.sleep(5000); + } + + @Test + public void TestWorkbenchSimulationLogMessage() throws WorkbenchException { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + Gson gson = new Gson(); + String logMessageContent; + long exp; + long start; + long stop; + List messages; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + logMessageContent = "this is a log message"; + for (int i = 0; i < 1; i++) { + DigitalTwinBase instance = new SimpleDigitalTwin(logMessageContent); + workbench.addInstance("SimSimple", "log" + i, instance); + } + + exp = 60; + start = System.currentTimeMillis(); + stop = start + (exp * 1000); + SimulationStep result = workbench.runSimulation(start, stop, 1, 1000); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + Assert.assertEquals(stop, result.getTime()); + Assert.assertEquals(exp, processor.getTimesInvoked()); + messages = workbench.getLoggedMessages("SimSimple", start); + Assert.assertEquals(messages.size(), exp * 3); + for (LogMessage message : messages) { + Assert.assertSame(logMessageContent, message.getMessage()); + Assert.assertTrue(message.getSeverity() == Level.INFO || + message.getSeverity() == Level.WARNING || + message.getSeverity() == Level.SEVERE); + Assert.assertTrue(message.getTimestamp() >= start && message.getTimestamp() < stop); + } + + messages = workbench.getLoggedMessages("SimSimple", 0L); + Assert.assertEquals(messages.size(), exp * 3); + for (LogMessage message : messages) { + Assert.assertSame(logMessageContent, message.getMessage()); + Assert.assertTrue(message.getSeverity() == Level.INFO || + message.getSeverity() == Level.WARNING || + message.getSeverity() == Level.SEVERE); + Assert.assertTrue(message.getTimestamp() >= start && message.getTimestamp() < stop); + } + + messages = workbench.getLoggedMessages("SimSimple", start + 5000); + Assert.assertEquals(messages.size(), (exp*3 - (5*3))); + for(LogMessage message : messages) { + Assert.assertSame(logMessageContent, message.getMessage()); + Assert.assertTrue(message.getSeverity() == Level.INFO || + message.getSeverity() == Level.WARNING || + message.getSeverity() == Level.SEVERE); + Assert.assertTrue(message.getTimestamp() >= start && message.getTimestamp() < stop); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchSimulationAlertMessage() throws WorkbenchException { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + Gson gson = new Gson(); + SimulationStep result; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addAlertProvider("SimSimple", new AlertProviderConfiguration("test", "www.url.com", "integrationkey", "routingKey", "alert", "entityId")); + + String alertMessageContent = "this is an alert message"; + String id = "alert"; + for (int i = 0; i < 1; i++) { + DigitalTwinBase instance = new SimpleDigitalTwin(alertMessageContent); + workbench.addInstance("SimSimple", id, instance); + } + long exp = 60; + long start = System.currentTimeMillis(); + long stop = start + (exp * 1000); + result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); + Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); + Assert.assertEquals(stop, result.getTime()); + Assert.assertEquals(exp, processor.getTimesInvoked()); + List messages = workbench.getAlertMessages("SimSimple", "alert"); + Assert.assertEquals(messages.size(), exp); + for(AlertMessage msg : messages) { + Assert.assertSame(msg.getMessage(), alertMessageContent); + Assert.assertSame(msg.getSeverity(), id); + Assert.assertSame(msg.getTitle(), id); + Assert.assertNull(msg.getOptionalTwinInstanceProperties()); + } + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test(expected = WorkbenchException.class) + public void TestWorkbenchException() throws Exception { + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", null, SimpleDigitalTwin.class, SimpleMessage.class); + } catch (Exception e) { + throw e; + } + } + + @Test + public void TestWorkbenchPeek() throws Exception { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + long stopTimeMs; + SimulationStep step; + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); + workbench.addInstance("SimSimple", "" + 100, instance); + + long startTimeMs = System.currentTimeMillis(); + stopTimeMs = startTimeMs + 60000; + long expectedTm = startTimeMs; + step = workbench.initializeSimulation(startTimeMs, stopTimeMs, 1000); + while (step.getStatus() == SimulationStatus.Running) { + step = workbench.step(); + Assert.assertEquals(expectedTm, step.getTime()); + expectedTm += 1000; + if(step.getStatus() == SimulationStatus.Running) { + Date peek = workbench.peek(); + Assert.assertEquals(expectedTm, peek.getTime()); + } + } + Assert.assertSame(SimulationStatus.EndTimeReached, step.getStatus()); + Assert.assertEquals(stopTimeMs, step.getTime()); + Assert.assertEquals(60, processor.getTimesInvoked()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test + public void TestWorkbenchGenerateModelSchema() throws Exception { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + String schemaAsJson = workbench.generateModelSchema("Simple"); + Assert.assertSame(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}"); + String dir = workbench.generateModelSchema("SimSimple", System.getProperty("user.dir")); + Assert.assertEquals(String.format("%s\\model.json", System.getProperty("user.dir")), dir); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + @Test (expected = WorkbenchException.class) + public void TestWorkbenchGenerateModelSchemaExceptionally() throws Exception { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + String schemaAsJson = workbench.generateModelSchema(""); + Assert.assertNotNull(schemaAsJson); + } catch (Exception e) { + throw e; + } + } + + @Test + public void TestWorkbenchSharedData() throws Exception { + try (Workbench workbench = new Workbench()) { + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + LinkedList messages = new LinkedList<>(); + messages.add(new SimpleMessage("SharedData", 29)); + workbench.send("Simple", "23", messages); + CacheResult result = workbench.getSharedModelData("Simple").get("modelTest"); + Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); + Assert.assertEquals("modelTest", result.getKey()); + Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); + result = workbench.getSharedGlobalData("Simple").get("globalTest"); + Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); + Assert.assertEquals("globalTest", result.getKey()); + Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); + } catch (Exception e) { + throw e; + } + } + + @Test + public void TestWorkbenchRunThisInstance() throws Exception { + try (Workbench workbench = new Workbench()) { + workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), new SimpleSimProcessor("Simple2", "sleeper"), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("Simple2", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class); + + workbench.addInstance("Simple", "waker", new SimpleDigitalTwin("waker")); + workbench.addInstance("Simple2", "sleeper", new SimpleDigitalTwin("sleeper")); + long startTimeMs = System.currentTimeMillis(); + long stopTimeMs = startTimeMs + 15000L; + long step = 1000L; + workbench.runSimulation(startTimeMs, stopTimeMs, 1, step); + SimpleDigitalTwin waker = (SimpleDigitalTwin) workbench.getInstances("Simple").get("waker"); + SimpleDigitalTwin sleeper = (SimpleDigitalTwin) workbench.getInstances("Simple2").get("sleeper"); + Assert.assertNotNull(waker); + Assert.assertNotNull(sleeper); + Assert.assertEquals("waker", waker._stringProp); + Assert.assertEquals("asleep", sleeper._stringProp); + } catch (Exception e) { + throw e; + } + } + + @Test + public void TestWorkbenchInitSimulation() throws Exception { + try (Workbench workbench = new Workbench()) { + SimpleSimProcessor processor = new SimpleSimProcessor(false); + workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + + workbench.addInstance("Simple", "initSimulation", new SimpleDigitalTwin("waker")); + + long simRuntimeMs = 15000L; + long startTimeMs = System.currentTimeMillis(); + long stopTimeMs = startTimeMs + simRuntimeMs; + int speedup = 1; + long step = 1000L; + long expectedInvokes = simRuntimeMs/1000L; + int initSimExpectedInvokes = 1000; + workbench.runSimulation(startTimeMs, stopTimeMs, speedup, step); + Assert.assertEquals(expectedInvokes + initSimExpectedInvokes, processor.timesInvoked.get()); + } catch (Exception e) { + throw e; + } + } +} diff --git a/docs/help-doc.html b/docs/help-doc.html index 2af3cbe..16c9fe8 100644 --- a/docs/help-doc.html +++ b/docs/help-doc.html @@ -2,7 +2,7 @@ -API Help (digitaltwin-core-docs 3.0.4 API) +API Help (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/index-all.html b/docs/index-all.html index e149a6e..282504b 100644 --- a/docs/index-all.html +++ b/docs/index-all.html @@ -2,7 +2,7 @@ -Index (digitaltwin-core-docs 3.0.4 API) +Index (digitaltwin-core-docs 3.0.5 API) @@ -56,6 +56,10 @@

        A

        Adds an alert provider configuration to the specified model on this workbench.
        +
        addGlobalModelData(String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        +
        +
        Add a key/value pair to the global SharedData.
        +
        addInstance(String, String, DigitalTwinBase) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        Adds a digital twin instance to the workbench.
        @@ -64,6 +68,10 @@

        A

        Adds a real-time digital twin model to the workbench.
        +
        addSharedModelData(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        +
        +
        Add a key/value pair to SharedData for a model.
        +
        addSimulationModel(String, MessageProcessor<T, V>, SimulationProcessor<T>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        Adds a simulation digital twin model to the workbench.
        @@ -95,6 +103,22 @@

        A

        C

        +
        CacheCleared - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        The cache was cleared successfully.
        +
        +
        CacheOperationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
        +
        +
        Status of a cache operation.
        +
        +
        CacheResult - Interface in com.scaleoutsoftware.digitaltwin.core
        +
        +
        Represents a response from a SharedData operation.
        +
        +
        clear() - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
        +
        +
        Clear the shared data cache.
        +
        close() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
         
        com.scaleoutsoftware.digitaltwin.core - package com.scaleoutsoftware.digitaltwin.core
        @@ -105,6 +129,10 @@

        C

        Digital twin development API - Develop and test simulation/real-time digital twins.
        +
        CosmosDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        +
        +
        Enum for CosmosDB
        +
        createInstance(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
        Create a new digital twin instance for simulation processing.
        @@ -125,6 +153,11 @@

        D

        Delay simulation processing for this DigitalTwin instance for a duration of time.
        +
        delayIndefinitely() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
        +
        +
        + Delay simulation processing for this DigitalTwin instance, indefinitely.
        +
        deleteInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
        Delete and remove a digital twin instance from simulation processing.
        @@ -138,7 +171,9 @@

        D

        A real-time digital twin of a data source.
        DigitalTwinBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
        -
         
        +
        +
        Default constructor.
        +
        DigitalTwinTimerMessage - Class in com.scaleoutsoftware.digitaltwin.core
        A message sent to a digital twin instance's message processor.
        @@ -147,6 +182,10 @@

        D

        Construct a digital twin timer message.
        +
        DynamoDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        +
        +
        Enum for DynamoDB
        +

        E

        @@ -212,6 +251,10 @@

        G

        Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system.
        +
        get(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
        +
        +
        Retrieves an existing object from the cache.
        +
        getAlertMessages(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        Retrieves alert messages from digital twin instances.
        @@ -248,6 +291,10 @@

        G

        Retrieve the entity ID for this alert provider configuration.
        +
        getEntryPoint() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
        +
        getId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
        The identifier of this DigitalTwin.
        @@ -284,6 +331,10 @@

        G

        Retrieve the integration key for this alert provider configuration.
        +
        getKey() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
        +
        +
        Gets the key or null to the object associated with the result.
        +
        getLoggedMessages(String, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        Retrieves messages logged by digital twin instances for a specified mdoel.
        @@ -326,6 +377,10 @@

        G

        Retrieve the name of this alert provider configuration.
        +
        getName() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        +
        +
        Retrieve the name of the persistence provider type.
        +
        getNextSimulationTimeMs() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
        Retrieve the next simulation time in milliseconds.
        @@ -374,6 +429,10 @@

        G

        Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
        +
        getServiceOrdinalValue() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        +
        +
        Retrieve the ordinal value (used by the DTBuidler service).
        +
        getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
        Retrieve the severity for this alert message.
        @@ -382,6 +441,38 @@

        G

        Retrieve the severity of this log message.
        +
        getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
        +
        +
        Retrieve a SharedData accessor for globally shared data.
        +
        +
        getSharedGlobalData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
        +
        +
        Retrieve a SharedData accessor for globally shared data.
        +
        +
        getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
        +
        +
        Retrieve a SharedData accessor for globally shared data.
        +
        +
        getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        +
        +
        Retrieve the global SharedData.
        +
        +
        getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
        +
        +
        Retrieve a SharedData accessor for this model's shared data.
        +
        +
        getSharedModelData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
        +
        +
        Retrieve a SharedData accessor for this model's shared data.
        +
        +
        getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
        +
        +
        Retrieve a SharedData accessor for this model's shared data.
        +
        +
        getSharedModelData(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        +
        +
        Retrieve the SharedData for a model.
        +
        getSimulationController() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
        Retrieve the running SimulationController or null if no simulation is running.
        @@ -390,11 +481,20 @@

        G

        Retrieve the simulation processor type (a SimulationProcessor implementation).
        +
        getSimulationStartTime() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
        +
        +
        + Retrieves the simulation start time.
        +
        getSimulationTimeIncrement() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
        Retrieves the current simulation time increment.
        +
        getStatus() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
        +
        +
        Gets the status of the cache operation.
        +
        getStatus() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
        Retrieve the SimulationStatus of the simulation interval.
        @@ -451,6 +551,10 @@

        G

        Retrieve the URL for this alert provider configuration.
        +
        getValue() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
        +
        +
        Get the object returned from a Get operation.
        +

        H

        @@ -475,12 +579,19 @@

        I

        digital twin.
        InitContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.InitContext
        -
         
        +
        +
        Default constructor.
        +
        initializeSimulation(long, long, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
        Initializes the simulation so that each interval can be run separately by calling the Workbench.step() function.
        +
        InitSimulationContext - Interface in com.scaleoutsoftware.digitaltwin.core
        +
        +
        The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
        +
        InstanceRequestedStop - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
        A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
        @@ -512,13 +623,21 @@

        M

        Processes messages for a real-time digital twin.
        MessageProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
        -
         
        +
        +
        Default constructor.
        +
        MessageProcessorBase<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
        Base class for the MessageProcessor to help with typing.
        MessageProcessorBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
        -
         
        +
        +
        Default constructor.
        +
        +
        messageRecordingEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Retrieves the message recording enabled status.
        +
        Model - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
        The model this twin instance belongs to.
        @@ -532,18 +651,66 @@

        M

        Creates a model schema from a digital twin class, a message processor class, and a message class.
        +
        ModelSchema(String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, and a message class.
        +
        +
        ModelSchema(String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Model schema with a defined entry point.
        +
        +
        ModelSchema(String, String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, and a message class.
        +
        ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
        +
        ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
        +
        ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        -
         
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
        +
        +
        ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
        +
        +
        ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, + a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, + and an alert provider configuration.
        +
        +
        ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
        +
        +
        ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
        +
        ModelSchema(String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        Creates a model schema from a digital twin class, a message processor class, a message class, and alert provider configurations.
        +
        ModelSchema(String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        +
        +
        Creates a model schema from a digital twin class, a message processor class, a message class, and + alert provider configurations.
        +
        ModelSchema(String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
        Creates a model schema from a digital twin class, a message processor class, a message class, and @@ -575,10 +742,31 @@

        N

        O

        +
        ObjectDoesNotExist - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        The object could not be retrieved because it was not found.
        +
        +
        ObjectPut - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        The object was successfully added/updated.
        +
        +
        ObjectRemoved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        The object was removed successfully.
        +
        +
        ObjectRetrieved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        The object was successfully retrieved.
        +
        OneTime - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
        This timer should trigger one time.
        +
        onInitSimulation(InitSimulationContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
        +
        +
        + Optional method that is called per-instance when a simulation is started.
        +
        onTimedMessage(String, T, ProcessingContext) - Method in interface com.scaleoutsoftware.digitaltwin.core.TimerHandler
        Callback to handle a timer message.
        @@ -607,7 +795,9 @@

        P

        Context object that allows the user to send a message to a DataSource.
        ProcessingContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
        -
         
        +
        +
        Default constructor.
        +
        ProcessingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
        The result from a message processor which indicates to update the state object or to ignore
        @@ -628,6 +818,10 @@

        P

        Processes simulation events for a real-time digital twin.
        +
        put(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
        +
        +
        Put a new key/value mapping into the cache.
        +

        R

        @@ -635,6 +829,10 @@

        R

        This timer should reoccur on a schedule.
        +
        remove(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
        +
        +
        Remove a key/value mapping from the cache.
        +
        Running - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
        The simulation is running.
        @@ -643,6 +841,10 @@

        R

        Runs a simulation from the given startTime until the given endTime OR there is no more work to do.
        +
        runThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
        +
        +
        Run this instance during this simulation step.
        +

        S

        @@ -698,6 +900,10 @@

        S

        Set the next simulation time in milliseconds.
        +
        SharedData - Interface in com.scaleoutsoftware.digitaltwin.core
        +
        +
        SharedData is used to access a model's, or globally, shared cache.
        +
        SimulationController - Interface in com.scaleoutsoftware.digitaltwin.core
        The SimulationController interface is used to interact with the running DigitalTwin simulation.
        @@ -713,7 +919,9 @@

        S

        Processes simulation events for a digital twin.
        SimulationProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
        -
         
        +
        +
        Default constructor.
        +
        SimulationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
        The status of a simulation.
        @@ -793,7 +1001,9 @@

        T

        U

        Unconfigured - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        -
         
        +
        +
        Enum for an unconfigured PersistenceProvider
        +
        UnexpectedChangeInConfiguration - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
        There was a runtime-change of simulation configuration.
        @@ -825,6 +1035,10 @@

        U

        V

        +
        valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        Returns the enum constant of this class with the specified name.
        +
        valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        Returns the enum constant of this class with the specified name.
        @@ -849,6 +1063,11 @@

        V

        Returns the enum constant of this class with the specified name.
        +
        values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
        +
        +
        Returns an array containing the constants of this enum class, in +the order they are declared.
        +
        values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
        Returns an array containing the constants of this enum class, in @@ -890,6 +1109,10 @@

        W

        Instantiate the workbench.
        +
        Workbench(int) - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
        +
        +
        Instantiate the workbench.
        +
        WorkbenchException - Exception in com.scaleoutsoftware.digitaltwin.development
        A Workbench exception indicates that a real-time or simulated twin caused an exception.
        diff --git a/docs/index.html b/docs/index.html index efbce74..c1028e2 100644 --- a/docs/index.html +++ b/docs/index.html @@ -2,7 +2,7 @@ -Overview (digitaltwin-core-docs 3.0.4 API) +Overview (digitaltwin-core-docs 3.0.5 API) @@ -47,7 +47,7 @@
        -

        digitaltwin-core-docs 3.0.4 API

        +

        digitaltwin-core-docs 3.0.5 API

        Packages
        diff --git a/docs/member-search-index.js b/docs/member-search-index.js index 13931aa..a4c179e 100644 --- a/docs/member-search-index.js +++ b/docs/member-search-index.js @@ -1 +1 @@ -memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file +memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addGlobalModelData(String, byte[])","u":"addGlobalModelData(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSharedModelData(String, String, byte[])","u":"addSharedModelData(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"CacheCleared"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"clear()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"CosmosDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delayIndefinitely()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"DynamoDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"get(String)","u":"get(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getEntryPoint()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getServiceOrdinalValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedModelData(String)","u":"getSharedModelData(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationStartTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"messageRecordingEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectDoesNotExist"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectPut"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRemoved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRetrieved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"onInitSimulation(InitSimulationContext, T, Date)","u":"onInitSimulation(com.scaleoutsoftware.digitaltwin.core.InitSimulationContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"put(String, byte[])","u":"put(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"runThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench(int)","u":"%3Cinit%3E(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/overview-summary.html b/docs/overview-summary.html index f782a93..0832a3f 100644 --- a/docs/overview-summary.html +++ b/docs/overview-summary.html @@ -2,7 +2,7 @@ -digitaltwin-core-docs 3.0.4 API +digitaltwin-core-docs 3.0.5 API diff --git a/docs/overview-tree.html b/docs/overview-tree.html index 1d46006..e355db6 100644 --- a/docs/overview-tree.html +++ b/docs/overview-tree.html @@ -2,7 +2,7 @@ -Class Hierarchy (digitaltwin-core-docs 3.0.4 API) +Class Hierarchy (digitaltwin-core-docs 3.0.5 API) @@ -93,8 +93,11 @@

        Class Hierarchy

        Interface Hierarchy

        @@ -106,6 +109,7 @@

        Enum Class Hierarchy

        • java.lang.Enum<E> (implements java.lang.Comparable<T>, java.lang.constant.Constable, java.io.Serializable)
            +
          • com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
          • com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType (implements java.io.Serializable)
          • com.scaleoutsoftware.digitaltwin.core.ProcessingResult
          • com.scaleoutsoftware.digitaltwin.core.SendingResult
          • diff --git a/docs/serialized-form.html b/docs/serialized-form.html index 6f04e5a..86e2438 100644 --- a/docs/serialized-form.html +++ b/docs/serialized-form.html @@ -2,7 +2,7 @@ -Serialized Form (digitaltwin-core-docs 3.0.4 API) +Serialized Form (digitaltwin-core-docs 3.0.5 API) diff --git a/docs/type-search-index.js b/docs/type-search-index.js index 1ff095a..3146686 100644 --- a/docs/type-search-index.js +++ b/docs/type-search-index.js @@ -1 +1 @@ -typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file +typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheOperationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitSimulationContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SharedData"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file From 5847fb4a728ae7f2f37fadb038def669616836ff Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 7 Mar 2025 13:19:19 -0800 Subject: [PATCH 06/35] Updating version number --- Core/build.gradle | 2 +- Development/build.gradle | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Core/build.gradle b/Core/build.gradle index 660e9c5..d0f2bbc 100644 --- a/Core/build.gradle +++ b/Core/build.gradle @@ -3,7 +3,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.0.10' +version '3.2.1' sourceCompatibility = JavaVersion.VERSION_12 diff --git a/Development/build.gradle b/Development/build.gradle index d3f3bfd..52bff15 100644 --- a/Development/build.gradle +++ b/Development/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.2.2' +version '3.2.1' sourceCompatibility = JavaVersion.VERSION_12 From 640ed19970d3a88f24ad2535bcf8593079444fbe Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 11 Mar 2025 14:32:55 -0700 Subject: [PATCH 07/35] Updating build.gradle Now generate javadoc and sources --- Core/build.gradle | 18 +++++++++++++++++- Development/build.gradle | 30 +++++++++++++++++++++++++++++- 2 files changed, 46 insertions(+), 2 deletions(-) diff --git a/Core/build.gradle b/Core/build.gradle index d0f2bbc..bf12248 100644 --- a/Core/build.gradle +++ b/Core/build.gradle @@ -19,10 +19,20 @@ configurations { archives } -task myJavadocs(type: Javadoc) { +task createJavadocs(type: Javadoc) { source = sourceSets.main.allJava } +task javadocJar(type: Jar, dependsOn: createJavadocs) { + from javadoc.destinationDir +} + + +task sourcesJar(type: Jar, dependsOn: classes) { + setArchiveClassifier('sources') + from sourceSets.main.allSource +} + jar { manifest { attributes ('Implementation-Title': project.name, @@ -30,4 +40,10 @@ jar { } } +task copyRuntime(type: GradleBuild) { + tasks = ['copyDependencies', 'copyBuildOutput', 'javadocJar', 'sourcesJar'] +} + +build.finalizedBy copyRuntime + diff --git a/Development/build.gradle b/Development/build.gradle index 52bff15..af5bc41 100644 --- a/Development/build.gradle +++ b/Development/build.gradle @@ -18,10 +18,38 @@ repositories { dependencies { implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.20.0' testImplementation group: 'junit', name: 'junit', version: '4.12' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.11.0' // public build configuration //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.9' // local build configuration implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar') } + +task createJavadocs(type: Javadoc) { + source = sourceSets.main.allJava + classpath = sourceSets.main.runtimeClasspath +} + +task javadocJar(type: Jar, dependsOn: createJavadocs) { + setArchiveClassifier('javadoc') + from javadoc.destinationDir +} + +task sourcesJar(type: Jar, dependsOn: classes) { + setArchiveClassifier('sources') + from sourceSets.main.allSource +} + +jar { + manifest { + attributes ('Implementation-Title': project.name, + 'Implementation-Version': project.version) + } +} + +task copyRuntime(type: GradleBuild) { + tasks = ['javadocJar', 'sourcesJar'] +} + +build.finalizedBy copyRuntime From abee060031326087562aaec1656776a23de0ec0e Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 14 Apr 2025 16:39:41 -0700 Subject: [PATCH 08/35] Updating build, improving PersistenceProviderType definition Updating build to create javadoc Updating PersistenceProviderType to return unconfigured when "default" or "Default" is supplied Updating PersistenceProviderType to return unconfigured when 0 is supplied --- Core/build.gradle | 3 ++- .../digitaltwin/core/PersistenceProviderType.java | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Core/build.gradle b/Core/build.gradle index bf12248..aa40f92 100644 --- a/Core/build.gradle +++ b/Core/build.gradle @@ -24,6 +24,7 @@ task createJavadocs(type: Javadoc) { } task javadocJar(type: Jar, dependsOn: createJavadocs) { + setArchiveClassifier('javadoc') from javadoc.destinationDir } @@ -41,7 +42,7 @@ jar { } task copyRuntime(type: GradleBuild) { - tasks = ['copyDependencies', 'copyBuildOutput', 'javadocJar', 'sourcesJar'] + tasks = ['javadocJar', 'sourcesJar'] } build.finalizedBy copyRuntime diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java index ce9eb88..ba81125 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java @@ -92,6 +92,9 @@ public static PersistenceProviderType fromString(String name) { return DynamoDb; case "Azure Cosmos DB": return CosmosDb; + case "Default": + case "default": + return Unconfigured; default: return null; } @@ -108,6 +111,8 @@ public static PersistenceProviderType fromString(String name) { */ public static PersistenceProviderType fromOrdinal(int ordinal) { switch(ordinal) { + case 0: + return Unconfigured; case 1: return AzureDigitalTwinsService; case 3: From 75fc6919c7df23f4d89d84cb1c4deca7a18f64d4 Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 14 Apr 2025 16:40:00 -0700 Subject: [PATCH 09/35] Updating version --- Core/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Core/build.gradle b/Core/build.gradle index aa40f92..dec3211 100644 --- a/Core/build.gradle +++ b/Core/build.gradle @@ -3,7 +3,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.2.1' +version '3.2.2' sourceCompatibility = JavaVersion.VERSION_12 From be920efbb8b9ac959f7cc7ef4accd0a7e2d5dc47 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 25 Jun 2025 08:17:58 -0700 Subject: [PATCH 10/35] Update build.gradle Bump version for release Moving from 3.2.1 - 3.2.2 --- Development/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Development/build.gradle b/Development/build.gradle index af5bc41..238509d 100644 --- a/Development/build.gradle +++ b/Development/build.gradle @@ -4,7 +4,7 @@ plugins { } group 'com.scaleoutsoftware.digitaltwin' -version '3.2.1' +version '3.2.2' sourceCompatibility = JavaVersion.VERSION_12 From 275456f74e1e19546c6894fe4b261e41d92c6360 Mon Sep 17 00:00:00 2001 From: olivier-tritschler Date: Thu, 30 Oct 2025 17:52:48 -0700 Subject: [PATCH 11/35] Bug fixes for Warp10 persistence --- .../scaleoutsoftware/digitaltwin/core/ModelSchema.java | 3 +++ .../digitaltwin/core/PersistenceProviderType.java | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java index 970ab1a..57d3ecd 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java @@ -441,6 +441,7 @@ public ModelSchema( case SQLServer: case DynamoDb: case CosmosDb: + case Warp10: enablePersistence = true; azureDigitalTwinModelName = null; break; @@ -619,6 +620,7 @@ public ModelSchema( case SQLServer: case DynamoDb: case CosmosDb: + case Warp10: enablePersistence = true; azureDigitalTwinModelName = null; break; @@ -683,6 +685,7 @@ public ModelSchema( case SQLServer: case DynamoDb: case CosmosDb: + case Warp10: enablePersistence = true; azureDigitalTwinModelName = null; break; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java index ba81125..7b24fae 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java @@ -44,6 +44,11 @@ public enum PersistenceProviderType implements Serializable { */ SQLServer("SQLServer", 3), + /** + * Enum for SenX Warp10 + */ + Warp10("Warp10", 7), + /** * Enum for an unconfigured PersistenceProvider */ @@ -92,6 +97,8 @@ public static PersistenceProviderType fromString(String name) { return DynamoDb; case "Azure Cosmos DB": return CosmosDb; + case "Warp10": + return Warp10; case "Default": case "default": return Unconfigured; @@ -123,6 +130,8 @@ public static PersistenceProviderType fromOrdinal(int ordinal) { return DynamoDb; case 6: return CosmosDb; + case 7: + return Warp10; default: return null; } From 45341ae783622a172cca64461e3d6fd35c6c3228 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 6 Feb 2026 12:55:34 -0800 Subject: [PATCH 12/35] initial commit of Core->Abstractions refactor Update Core API to Abstractions API Remove typed message requirement for MessageProcessor - now take byte[] Remove multiple message requirement for MessageProcessor - now take byte[] representing a single message Update Workbench and Workbench tests to reflect API changes --- .gitignore | 2 + {Core => Abstractions}/.gitattributes | 0 {Core => Abstractions}/.gitignore | 0 {Core => Abstractions}/LICENSE | 0 Abstractions/README.md | 10 + Abstractions/pom.xml | 17 + .../abstractions}/AlertMessage.java | 2 +- .../AlertProviderConfiguration.java | 2 +- .../abstractions}/CacheOperationStatus.java | 2 +- .../abstractions}/CacheResult.java | 2 +- .../abstractions}/DigitalTwinBase.java | 2 +- .../DigitalTwinTimerMessage.java | 2 +- .../abstractions}/InitContext.java | 2 +- .../abstractions}/InitSimulationContext.java | 2 +- .../abstractions}/MessageProcessor.java | 23 +- .../abstractions}/ModelSchema.java | 2 +- .../abstractions}/PersistenceProvider.java | 2 +- .../PersistenceProviderType.java | 4 +- .../abstractions}/ProcessingContext.java | 83 +---- .../abstractions}/ProcessingResult.java | 2 +- .../abstractions}/SendingResult.java | 2 +- .../digitaltwin/abstractions}/SharedData.java | 2 +- .../abstractions}/SimulationController.java | 14 +- .../abstractions}/SimulationProcessor.java | 2 +- .../abstractions}/SimulationStatus.java | 2 +- .../abstractions}/TimerActionResult.java | 2 +- .../abstractions}/TimerHandler.java | 2 +- .../abstractions}/TimerMetadata.java | 5 +- .../digitaltwin/abstractions}/TimerType.java | 2 +- .../abstractions}/package-info.java | 2 +- Core/README.md | 10 - Core/build.gradle | 50 --- Core/settings.gradle | 2 - .../digitaltwin/core/MessageFactory.java | 29 -- .../core/MessageProcessorBase.java | 38 -- Development/build.gradle | 55 --- Development/pom.xml | 40 +++ Development/settings.gradle | 2 - .../development/SimulationEvent.java | 2 +- .../development/SimulationEventTimerImpl.java | 6 +- .../development/SimulationEventTwinImpl.java | 2 +- .../development/SimulationScheduler.java | 5 +- .../development/SimulationStep.java | 2 +- .../development/SimulationWorker.java | 2 +- .../development/TwinExecutionEngine.java | 119 +------ .../digitaltwin/development/TwinProxy.java | 2 +- .../digitaltwin/development/Util.java | 25 ++ .../digitaltwin/development/Workbench.java | 163 +-------- .../development/WorkbenchInitContext.java | 2 +- .../WorkbenchInitSimulationContext.java | 4 +- .../WorkbenchMessageListFactory.java | 67 ---- .../WorkbenchProcessingContext.java | 81 +---- .../development/WorkbenchSharedData.java | 6 +- .../WorkbenchSimulationController.java | 24 +- .../development/WorkbenchTimerService.java | 4 +- .../development/WorkbenchTimerTask.java | 2 +- .../development/TestWorkbench.java | 336 ++++++++---------- 57 files changed, 324 insertions(+), 952 deletions(-) rename {Core => Abstractions}/.gitattributes (100%) rename {Core => Abstractions}/.gitignore (100%) rename {Core => Abstractions}/LICENSE (100%) create mode 100644 Abstractions/README.md create mode 100644 Abstractions/pom.xml rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/AlertMessage.java (98%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/AlertProviderConfiguration.java (98%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/CacheOperationStatus.java (95%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/CacheResult.java (95%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/DigitalTwinBase.java (98%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/DigitalTwinTimerMessage.java (97%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/InitContext.java (97%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/InitSimulationContext.java (92%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/MessageProcessor.java (55%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/ModelSchema.java (99%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/PersistenceProvider.java (99%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/PersistenceProviderType.java (97%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/ProcessingContext.java (67%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/ProcessingResult.java (93%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/SendingResult.java (95%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/SharedData.java (96%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/SimulationController.java (89%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/SimulationProcessor.java (97%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/SimulationStatus.java (95%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/TimerActionResult.java (97%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/TimerHandler.java (95%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/TimerMetadata.java (94%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/TimerType.java (93%) rename {Core/src/main/java/com/scaleoutsoftware/digitaltwin/core => Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions}/package-info.java (92%) delete mode 100644 Core/README.md delete mode 100644 Core/build.gradle delete mode 100644 Core/settings.gradle delete mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java delete mode 100644 Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java delete mode 100644 Development/build.gradle create mode 100644 Development/pom.xml delete mode 100644 Development/settings.gradle create mode 100644 Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java delete mode 100644 Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java diff --git a/.gitignore b/.gitignore index 9483d7b..51172dc 100644 --- a/.gitignore +++ b/.gitignore @@ -80,3 +80,5 @@ gradlew.bat Development/gradle/wrapper/gradle-wrapper.properties Core/gradle/wrapper/gradle-wrapper.jar Core/gradle/wrapper/gradle-wrapper.jar +/Development/target +/Abstractions/target diff --git a/Core/.gitattributes b/Abstractions/.gitattributes similarity index 100% rename from Core/.gitattributes rename to Abstractions/.gitattributes diff --git a/Core/.gitignore b/Abstractions/.gitignore similarity index 100% rename from Core/.gitignore rename to Abstractions/.gitignore diff --git a/Core/LICENSE b/Abstractions/LICENSE similarity index 100% rename from Core/LICENSE rename to Abstractions/LICENSE diff --git a/Abstractions/README.md b/Abstractions/README.md new file mode 100644 index 0000000..2038d2e --- /dev/null +++ b/Abstractions/README.md @@ -0,0 +1,10 @@ +# ScaleOut Digital Twins™ Abstractions Libraries for Java + +The open source (Apache 2.0 licensed) project for the Abstractions API: + +- [com.scaleoutsoftware.digitaltwin.abstractions](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/core/3.2.2): Abstractions required for building Digital Twin models. + + +## Documentation +- [Class reference](https://scaleoutsoftware.github.io/JavaDigitalTwinCore/) +- [ScaleOut Digital Twins™ User Guide](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/index.html) \ No newline at end of file diff --git a/Abstractions/pom.xml b/Abstractions/pom.xml new file mode 100644 index 0000000..74a03a2 --- /dev/null +++ b/Abstractions/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + com.scaleoutsoftware.digitaltwin + abstractions + 4.0.0 + + + 8 + 8 + UTF-8 + + + \ No newline at end of file diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java similarity index 98% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java index 7e0d3f4..8b4b910 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.util.HashMap; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java similarity index 98% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java index 8f718aa..b3f2895 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.io.Serializable; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java similarity index 95% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java index 119b0be..7bc8b29 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * Status of a cache operation. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java similarity index 95% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java index 9dc13c7..4e36746 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * Represents a response from a {@link SharedData} operation. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java similarity index 98% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java index 4b4333d..9f7f689 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.util.Date; import java.util.HashMap; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java similarity index 97% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java index 6ea0ce0..3b0ceea 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * A message sent to a digital twin instance's message processor. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java similarity index 97% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java index 4cb7014..405fff4 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.time.Duration; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java similarity index 92% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java index 62ae315..3961b65 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java @@ -1,4 +1,4 @@ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.util.Date; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java similarity index 55% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java index a608741..b192984 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java @@ -13,16 +13,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.io.Serializable; /** * Processes messages for a real-time digital twin. * @param the real type of the DigitalTwinBase - * @param the type of messages processed by the real-time digital twin */ -public abstract class MessageProcessor extends MessageProcessorBase implements Serializable { +public abstract class MessageProcessor { /** * Default constructor. @@ -33,24 +32,10 @@ public MessageProcessor() {} * Processes a set of incoming messages and determines whether to update the real-time digital twin. * @param context optional context for processing. * @param stateObject the state object. - * @param incomingMessages the incoming messages. + * @param incomingMessage the incoming message. * @return processing results for updating the state object. * @throws Exception if an exception occurs during processing */ - public abstract ProcessingResult processMessages(ProcessingContext context, T stateObject, Iterable incomingMessages) throws Exception; - - /** - * Helper method to ensure proper typing for user methods. - * @param context the processing context. - * @param twin the digital twin object. - * @param factory the message list factory. - * @return the implementing class's processing result. - * @throws Exception if an exception occurs during processing. - */ - @Override - public ProcessingResult processMessages(ProcessingContext context, T twin, MessageFactory factory) throws Exception { - Iterable incoming = factory.getIncomingMessages(); - return this.processMessages(context, twin, incoming); - } + public abstract ProcessingResult processMessage(ProcessingContext context, T stateObject, byte[] incomingMessage) throws Exception; } diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java similarity index 99% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java index 970ab1a..4005893 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.util.List; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProvider.java similarity index 99% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProvider.java index 434bf75..b7391f4 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProvider.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.util.List; import java.util.Map; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java similarity index 97% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java index ba81125..d599f7d 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.io.Serializable; @@ -80,7 +80,7 @@ public int getServiceOrdinalValue() { * @return the associated PersistenceProviderType, or null if no association exists. */ public static PersistenceProviderType fromString(String name) { - if(name != null && !name.isEmpty() && !name.isBlank()) { + if(name != null && !name.isEmpty()) { switch(name) { case "AzureDigitalTwinsService": return AzureDigitalTwinsService; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java similarity index 67% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index 2af1dc8..097acd1 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.io.Serializable; import java.time.Duration; @@ -46,36 +46,6 @@ public ProcessingContext() {} */ public abstract SendingResult sendToDataSource(byte[] payload); - /** - *

            - * Sends a message to a data source. This will route messages through the connector back to the data source. - *

            - * - *

            - * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - * of the {@link MessageProcessor}. - *

            - * - * @param jsonSerializableMessage a JSON serializable message. - * @return the sending result - */ - public abstract SendingResult sendToDataSource(Object jsonSerializableMessage); - - /** - *

            - * Sends a list of messages to a data source. This will route messages through the connector back to the data source. - *

            - * - *

            - * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - * of the {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)}. - *

            - * - * @param jsonSerializableMessages a list of JSON serializable messages. - * @return the sending result - */ - public abstract SendingResult sendToDataSource(List jsonSerializableMessages); - /** *

            * This method sends a serialized JSON message to a real-time digital twin @@ -92,57 +62,6 @@ public ProcessingContext() {} */ public abstract SendingResult sendToDigitalTwin(String model, String id, byte[] payload); - /** - *

            - * This method sends a serialized JSON message to a real-time digital twin - *

            - * - *

            - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

            - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param jsonSerializableMessage a JSON serializable message object - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage); - - /** - *

            - * This method sends a JSON message to a real-time digital twin - *

            - * - *

            - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

            - * - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param payload the JSON message - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, String payload); - - /** - *

            - * This method sends a list of serialized JSON message to a real-time digital twin - *

            - * - *

            - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

            - * - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param payload the JSON message - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, List payload); - - /** *

            * This method sends an alert message to supported systems. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java similarity index 93% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java index 279f0fa..0a740c1 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * The result from a message processor which indicates to update the state object or to ignore diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java similarity index 95% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java index 9b3731b..26711fd 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * Marks a message as Delivered or not Delivered diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java similarity index 96% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java index 5c1392d..913b690 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * SharedData is used to access a model's, or globally, shared cache. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java similarity index 89% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java index 314f6eb..063ca7e 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.time.Duration; import java.util.Date; @@ -103,18 +103,6 @@ public interface SimulationController { */ SendingResult emitTelemetry(String modelName, byte[] telemetryMessage); - /** - *

            - * Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin - * models {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} method. - *

            - * @param modelName the model to send the messages too. - * @param jsonSerializableMessage an object message that is JSON serializable. - * @return {@link SendingResult#Handled} if the messages were processed, {@link SendingResult#Enqueued} if - * the messages are in process of being handled, or {@link SendingResult#NotHandled} if the delay was not processed. - */ - SendingResult emitTelemetry(String modelName, Object jsonSerializableMessage); - /** * Create a new digital twin instance for simulation processing. * @param modelName the model name. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java similarity index 97% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java index a98d396..dad11e2 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; import java.io.Serializable; import java.util.Date; diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java similarity index 95% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java index 93f8ee4..943386b 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * The status of a simulation. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java similarity index 97% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java index 852174e..d7f2a76 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * The result of a timer action. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java similarity index 95% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java index 6380324..f5c0cf0 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * Callback to a handle a timer message for a {@link DigitalTwinBase}. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java similarity index 94% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java index e9c151d..98662f4 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java @@ -13,10 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; - -import java.lang.reflect.InvocationTargetException; -import java.time.Duration; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * Metadata class for a timer. diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java similarity index 93% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java index 66626e1..d3f4c21 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java @@ -13,7 +13,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; /** * Enum representation of the available timer types diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java similarity index 92% rename from Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java index 4ccf77f..53c1b23 100644 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java @@ -17,5 +17,5 @@ /** * Digital twin model API - Create a digital twin model. */ -package com.scaleoutsoftware.digitaltwin.core; +package com.scaleoutsoftware.digitaltwin.abstractions; diff --git a/Core/README.md b/Core/README.md deleted file mode 100644 index 5d35706..0000000 --- a/Core/README.md +++ /dev/null @@ -1,10 +0,0 @@ -# ScaleOut Digital Twins™ Core Libraries for Java - -The open source (Apache 2.0 licensed) project for the Core API: - -- [com.scaleout.digitaltwin.core](https://repo.scaleoutsoftware.com/#artifact/com.scaleoutsoftware.digitaltwin/core): Core datatypes required for building Digital Twin models. - - -## Documentation -- [Class reference](https://scaleoutsoftware.github.io/JavaDigitalTwinCore/) -- [ScaleOut Digital Twins™ User Guide](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/index.html) \ No newline at end of file diff --git a/Core/build.gradle b/Core/build.gradle deleted file mode 100644 index dec3211..0000000 --- a/Core/build.gradle +++ /dev/null @@ -1,50 +0,0 @@ -plugins { - id 'java' -} - -group 'com.scaleoutsoftware.digitaltwin' -version '3.2.2' - -sourceCompatibility = JavaVersion.VERSION_12 - -repositories { - mavenCentral() -} - -dependencies { - testImplementation group: 'junit', name: 'junit', version: '4.12' -} - -configurations { - archives -} - -task createJavadocs(type: Javadoc) { - source = sourceSets.main.allJava -} - -task javadocJar(type: Jar, dependsOn: createJavadocs) { - setArchiveClassifier('javadoc') - from javadoc.destinationDir -} - - -task sourcesJar(type: Jar, dependsOn: classes) { - setArchiveClassifier('sources') - from sourceSets.main.allSource -} - -jar { - manifest { - attributes ('Implementation-Title': project.name, - 'Implementation-Version': project.version) - } -} - -task copyRuntime(type: GradleBuild) { - tasks = ['javadocJar', 'sourcesJar'] -} - -build.finalizedBy copyRuntime - - diff --git a/Core/settings.gradle b/Core/settings.gradle deleted file mode 100644 index 1bdee66..0000000 --- a/Core/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'digitaltwin-core' - diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java deleted file mode 100644 index 1e89eed..0000000 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Message list factory retrieves message lists for a MessageProcessor - */ -public interface MessageFactory { - - /** - * Returns all incoming messages - * @param the type of incoming messages - * @return an iterable of incoming messages - */ - Iterable getIncomingMessages(); -} diff --git a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java b/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java deleted file mode 100644 index befa76d..0000000 --- a/Core/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Base class for the MessageProcessor to help with typing. - * @param the type of the DigitalTwin - */ -public abstract class MessageProcessorBase { - - /** - * Default constructor. - */ - public MessageProcessorBase() {} - - /** - * Helper method to ensure proper typing for the user methods. - * @param context the processing context - * @param twin the real-time digital twin instance - * @param messageListFactory the message list factory - * @return the implementing class's processing result - * @throws Exception if an exception occurs during processing - */ - public abstract ProcessingResult processMessages(ProcessingContext context, T twin, MessageFactory messageListFactory) throws Exception; -} diff --git a/Development/build.gradle b/Development/build.gradle deleted file mode 100644 index 238509d..0000000 --- a/Development/build.gradle +++ /dev/null @@ -1,55 +0,0 @@ -plugins { - id 'java' - id 'java-library' -} - -group 'com.scaleoutsoftware.digitaltwin' -version '3.2.2' - -sourceCompatibility = JavaVersion.VERSION_12 - -repositories { - mavenCentral() - maven { - url "https://repo.scaleoutsoftware.com/repository/external/" - } -} - -dependencies { - implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.20.0' - testImplementation group: 'junit', name: 'junit', version: '4.12' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.11.0' - // public build configuration - //implementation group: 'com.scaleoutsoftware.digitaltwin', name: 'core', version: '3.0.9' - - // local build configuration - implementation fileTree(dir: '..\\Core\\build\\libs\\', include: '*.jar') -} - -task createJavadocs(type: Javadoc) { - source = sourceSets.main.allJava - classpath = sourceSets.main.runtimeClasspath -} - -task javadocJar(type: Jar, dependsOn: createJavadocs) { - setArchiveClassifier('javadoc') - from javadoc.destinationDir -} - -task sourcesJar(type: Jar, dependsOn: classes) { - setArchiveClassifier('sources') - from sourceSets.main.allSource -} - -jar { - manifest { - attributes ('Implementation-Title': project.name, - 'Implementation-Version': project.version) - } -} - -task copyRuntime(type: GradleBuild) { - tasks = ['javadocJar', 'sourcesJar'] -} - -build.finalizedBy copyRuntime diff --git a/Development/pom.xml b/Development/pom.xml new file mode 100644 index 0000000..69ded9a --- /dev/null +++ b/Development/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + com.scaleoutsoftware.digitaltwin + development + 4.0.0 + + + 8 + 8 + UTF-8 + + + + com.google.code.gson + gson + 2.13.2 + + + org.apache.logging.log4j + log4j-core + 2.25.3 + + + com.scaleoutsoftware.digitaltwin + abstractions + 4.0.0 + + + junit + junit + 4.13.2 + test + + + + \ No newline at end of file diff --git a/Development/settings.gradle b/Development/settings.gradle deleted file mode 100644 index e652c08..0000000 --- a/Development/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'digitaltwin-development' - diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java index 686936e..4de9597 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; +import com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext; import java.util.Date; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java index 49f9b5d..b0a8544 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java @@ -15,9 +15,9 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; -import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; -import com.scaleoutsoftware.digitaltwin.core.TimerHandler; +import com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase; +import com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext; +import com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler; import java.util.Date; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java index 27e4147..92e678b 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.nio.charset.StandardCharsets; import java.util.Date; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java index fa46b98..244d1c3 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -74,7 +74,8 @@ SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) { worker.shutdown(); } return new SimulationStep(SimulationStatus.UserRequested,_curSimulationTime); - } if(runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Start) { + } + if(runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Start) { _logger.info("Starting simulation; initializing instances."); for(SimulationWorker worker : _workers) { worker.initSimulation(new Date(runSimulationEventArgs.getCurSimulationTime())); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java index c2a6dba..f237771 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.SimulationStatus; +import com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus; /** * The simulation step class encases the metadata for a completed interval of a simulation. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java index ebaa891..0917624 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index bd34eca..71877a4 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -16,11 +16,12 @@ package com.scaleoutsoftware.digitaltwin.development; import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.io.Closeable; import java.io.IOException; import java.lang.reflect.InvocationTargetException; +import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -31,7 +32,6 @@ class TwinExecutionEngine implements Closeable { private ConcurrentHashMap> _digitalTwins; private ConcurrentHashMap _messageProcessors; private ConcurrentHashMap _simulationProcessors; - private ConcurrentHashMap> _messageProcessorValueTypes; private ConcurrentHashMap> _modelInstances; private ConcurrentHashMap> _alertProviders; private ConcurrentHashMap> _modelsSharedData; @@ -52,7 +52,6 @@ void init( ) { _digitalTwins = new ConcurrentHashMap<>(); _messageProcessors = new ConcurrentHashMap<>(); _simulationProcessors = new ConcurrentHashMap<>(); - _messageProcessorValueTypes = new ConcurrentHashMap<>(); _modelInstances = new ConcurrentHashMap<>(); _modelsSharedData = new ConcurrentHashMap<>(); _globalSharedData = new HashMap<>(); @@ -62,19 +61,17 @@ void init( ) { _gson = new Gson(); } - void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, Class dtType, Class messageClass) { + void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) { _modelNames.add(digitalTwinModelName); _digitalTwins.put(digitalTwinModelName, dtType); _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); - _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); } - void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass, int numWorkers) { + void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, int numWorkers) { _modelNames.add(digitalTwinModelName); _digitalTwins.put(digitalTwinModelName, dtType); _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); _simulationProcessors.put(digitalTwinModelName, simulationProcessor); - _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this, numWorkers)); } @@ -173,32 +170,6 @@ TwinProxy getTwinProxy(String model, String id) { return proxy; } - String generateModelSchema(String model) throws WorkbenchException { - if(_digitalTwins.get(model) != null) { - ModelSchema schema; - if(_simulationProcessors.get(model) != null) { - schema = new ModelSchema( - _digitalTwins.get(model).getName(), - _messageProcessors.get(model).getClass().getName(), - _messageProcessorValueTypes.get(model).getName(), - _simulationProcessors.get(model).getClass().getName(), - List.copyOf(_alertProviders.get(model) == null ? Collections.emptyList() : _alertProviders.get(model).values())); - } else { - schema = new ModelSchema( - _digitalTwins.get(model).getName(), - _messageProcessors.get(model).getClass().getName(), - _messageProcessorValueTypes.get(model).getName(), - List.copyOf(_alertProviders.get(model) == null ? Collections.emptyList() : _alertProviders.get(model).values())); - } - - Gson gson = new Gson(); - String modelSchemaJson = gson.toJson(schema, ModelSchema.class); - return modelSchemaJson; - } else { - throw new WorkbenchException("Model has not been added to this workbench."); - } - } - boolean hasAlertProviderConfiguration(String model, String alertProviderName) { if(hasModel(model)) { return _alertProviders.containsKey(model) && _alertProviders.getOrDefault(model, new ConcurrentHashMap<>()).containsKey(alertProviderName); @@ -212,30 +183,14 @@ boolean hasModel(String modelName) { return _modelNames.contains(modelName); } - SendingResult sendToSource(String source, String model, String id, String msg) throws WorkbenchException { + SendingResult sendToSource(String source, String model, String id, byte[] msg) throws WorkbenchException { if(_modelNames.contains(source)) { - String toSend = String.format("[%s]", msg); - run(source, id, null, toSend); + run(source, id, null, msg); return SendingResult.Handled; } else { ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); - messages.add(msg); - messagesByModel.put(id, messages); - _workbench.SOURCE_MESSAGES.put(model, messagesByModel); - return SendingResult.Handled; - } - } - - SendingResult sendToSource(String source, String model, String id, List jsonSerializableMessage) throws WorkbenchException { - if (_modelNames.contains(source)) { - run(source, id, null, jsonSerializableMessage); - return SendingResult.Handled; - } else { - String msg = _gson.toJson(jsonSerializableMessage); - ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>()); - List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); - messages.add(msg); + messages.add(new String(msg, StandardCharsets.UTF_8)); messagesByModel.put(id, messages); _workbench.SOURCE_MESSAGES.put(model, messagesByModel); return SendingResult.Handled; @@ -315,7 +270,7 @@ public void deleteSimulationInstance(String modelName, String id) { _modelInstances.put(modelName, modelInstances); } - ProcessingResult run(String model, String id, String source, String serializedList) throws WorkbenchException { + ProcessingResult run(String model, String id, String source, byte[] message) throws WorkbenchException { try { ConcurrentHashMap twinInstances = _modelInstances.get(model); if(twinInstances == null) { @@ -344,59 +299,6 @@ ProcessingResult run(String model, String id, String source, String serializedLi HashMap sharedData = _modelsSharedData.get(model); if(sharedData == null) sharedData = new HashMap<>(); _modelsSharedData.put(model, sharedData); - SimulationController simulationController = null; - SimulationScheduler scheduler = _simulationSchedulers.get(model); - if(scheduler != null) { - simulationController = new WorkbenchSimulationController(this, scheduler); - } - WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController); - context.reset(model, id, source, instance); - ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(serializedList, _messageProcessorValueTypes.get(model))); - if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin; - switch(res) { - case UpdateDigitalTwin: - proxy.setInstance(instance); - twinInstances.put(id, proxy); - _modelInstances.put(model, twinInstances); - break; - case NoUpdate: - break; - default: - break; - } - return res; - } catch (Exception e) { - throw new WorkbenchException("Exception thrown while running message processor.", e); - } - } - - ProcessingResult run(String model, String id, String source, List messages) throws WorkbenchException { - try { - ConcurrentHashMap twinInstances = _modelInstances.get(model); - if(twinInstances == null) { - twinInstances = new ConcurrentHashMap<>(); - } - TwinProxy proxy = twinInstances.get(id); - DigitalTwinBase instance = null; - if(proxy == null) { - Class dtClazz = _digitalTwins.get(model); - if(dtClazz == null) return ProcessingResult.NoUpdate; - instance = dtClazz.getConstructor().newInstance(); - InitContext initContext = new WorkbenchInitContext(this, instance, model, id); - instance.init(initContext); - proxy = new TwinProxy(instance); - SimulationScheduler scheduler = _simulationSchedulers.get(model); - if(scheduler != null) { - proxy.setProxyState(ProxyState.Active); - scheduler.addInstance(proxy); - } - } else { - instance = proxy.getInstance(); - } - MessageProcessor mp = _messageProcessors.get(model); - HashMap sharedData = _modelsSharedData.get(model); - if(sharedData == null) sharedData = new HashMap<>(); - _modelsSharedData.put(model, sharedData); WorkbenchSimulationController simulationController = null; SimulationScheduler scheduler = _simulationSchedulers.get(model); if(scheduler != null) { @@ -407,7 +309,8 @@ ProcessingResult run(String model, String id, String source, List messag if(simulationController != null) { simulationController.reset(model, id); } - ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(messages, _messageProcessorValueTypes.get(model))); + + ProcessingResult res = mp.processMessage(context, instance, message); if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin; switch(res) { case UpdateDigitalTwin: @@ -422,7 +325,7 @@ ProcessingResult run(String model, String id, String source, List messag } return res; } catch (Exception e) { - throw new WorkbenchException(e.getMessage(), e); + throw new WorkbenchException("Exception thrown while running message processor.", e); } } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java index 4811ab7..dcc9216 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; +import com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase; class TwinProxy { private DigitalTwinBase _instance; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java new file mode 100644 index 0000000..9327844 --- /dev/null +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java @@ -0,0 +1,25 @@ +package com.scaleoutsoftware.digitaltwin.development; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class Util { + public static List copyOf(Collection source) { + if (source == null) { + throw new NullPointerException("source"); + } + + List copy = new ArrayList<>(source.size()); + + for (T item : source) { + if (item == null) { + throw new NullPointerException("List contains null"); + } + copy.add(item); + } + + return Collections.unmodifiableList(copy); + } +} diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index 0cc6a07..aa07539 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.io.*; import java.util.*; @@ -286,20 +286,19 @@ public Workbench(int numSimulationWorkers) { * @param modelName the name of the model. * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. * @param dtType the model's {@link DigitalTwinBase} implementation. - * @param messageClass the model's message type. * @param the type of the digital twin. * @param the type of the message. * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message * processor must be serializable, and the digital twin implementation must have a parameterless constructor). */ - public void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType, Class messageClass) throws WorkbenchException { - if(modelName == null || modelName.isBlank() || modelName.isEmpty() || digitalTwinMessageProcessor == null || dtType == null || messageClass == null) { - String errorMessage = String.format("modelName null: %b messageProcessor null: %b dtType null: %b messageType null: %b",modelName == null, digitalTwinMessageProcessor == null, dtType == null, messageClass == null); + public void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { + if(modelName == null || modelName.isEmpty() || digitalTwinMessageProcessor == null || dtType == null) { + String errorMessage = String.format("modelName null: %b messageProcessor null: %b dtType null: %b",modelName == null, digitalTwinMessageProcessor == null, dtType == null); throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); } validate(digitalTwinMessageProcessor, dtType); - _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, dtType, messageClass); + _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, dtType); } /** @@ -309,20 +308,19 @@ public void addRealTimeModel(String modelName, Mes * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. * @param simulationProcessor the model's {@link SimulationProcessor} implementation. Must be marked as {@link Serializable}. * @param dtType the model's {@link DigitalTwinBase} implementation. - * @param messageClass the model's message type. * @param the type of the digital twin. * @param the type of the message. * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message * processor must be serializable, and the digital twin implementation must have a parameterless constructor). */ - public void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass) throws WorkbenchException { - if(modelName == null || modelName.isBlank() || modelName.isEmpty() || digitalTwinMessageProcessor == null || simulationProcessor == null || dtType == null || messageClass == null) { - String errorMessage = String.format("modelName null: %b messageProcessor null: %b simulationProcessor null: %b dtType null: %b messageType null: %b",modelName == null, digitalTwinMessageProcessor == null, simulationProcessor == null, dtType == null, messageClass == null); + public void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType) throws WorkbenchException { + if(modelName == null || modelName.isEmpty() || digitalTwinMessageProcessor == null || simulationProcessor == null || dtType == null) { + String errorMessage = String.format("modelName null: %b messageProcessor null: %b simulationProcessor null: %b dtType null: %b",modelName == null, digitalTwinMessageProcessor == null, simulationProcessor == null, dtType == null); throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); } validate(digitalTwinMessageProcessor, dtType); - _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass, _numWorkers); + _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, _numWorkers); } /** @@ -573,67 +571,21 @@ public SharedData getSharedGlobalData() throws WorkbenchException { return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); } - /** - * Generates a ModelSchema for the defined model - * - * @param modelName the digital twin model's name to generate a schema. - * @return a JSON string of the model's schema - * @throws WorkbenchException if an exception occurs while generating a model schema. - */ - public String generateModelSchema(String modelName) throws WorkbenchException { - if(_twinExecutionEngine.runningModels().contains(modelName)) { - return _twinExecutionEngine.generateModelSchema(modelName); - } - throw new WorkbenchException("Model is not loaded; cannot generate model schema."); - } - - /** - * Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system. If the - * parameter outputDirectory is null the file will be written to the working directory of the JVM. - * - * @param modelName the name of the digital twin model - * @param outputDirectory the directory to write the file to, or null to write the file to the current working directory. - * @return the full file path of the model.json schema file - * @throws WorkbenchException if an exception occurs while generating a model schema. - */ - public String generateModelSchema(String modelName, String outputDirectory) throws WorkbenchException { - if(modelName == null || modelName.isEmpty()) { - throw new WorkbenchException("Required parameters: modelName.", new IllegalArgumentException()); - } - - outputDirectory = outputDirectory == null ? System.getProperty("user.dir") : outputDirectory; - - if(_twinExecutionEngine.runningModels().contains(modelName)) { - try { - String filePath = String.format("%s\\model.json", outputDirectory); - FileWriter fileWriter = new FileWriter(filePath); - fileWriter.write(_twinExecutionEngine.generateModelSchema(modelName)); - fileWriter.flush(); - fileWriter.close(); - return filePath; - } catch (IOException e) { - throw new WorkbenchException("Could not write file to file system.", e); - } - - } - throw new WorkbenchException("Model is not loaded; cannot generate model schema."); - } - /** * Send a list of messages to a real-time or simulation model. * @param modelName The model name. * @param id the instance id. - * @param messages the messages to send. + * @param message the message to send. * @return {@link SendingResult#Handled} unless an exception is thrown. - * @throws WorkbenchException if model name, id, or messages are null. Also thrown if the model's {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} + * @throws WorkbenchException if model name, id, or messages are null. Also thrown if the model's {@link MessageProcessor#processMessage(ProcessingContext, DigitalTwinBase, byte[])} * throws an exception. */ - public SendingResult send(String modelName, String id, List messages) throws WorkbenchException { - if(modelName == null || id == null || messages == null) { + public SendingResult send(String modelName, String id, byte[] message) throws WorkbenchException { + if(modelName == null || id == null) { throw new WorkbenchException("ModelName, Id, and messages are required."); } if(_twinExecutionEngine.hasModel(modelName) && !_simulationStarted) { - _twinExecutionEngine.run(modelName, id, null, messages); + _twinExecutionEngine.run(modelName, id, null, message); } else { String msg = _twinExecutionEngine.hasModel(modelName) ? String.format("Cannot send message to %s. Simulation is active.", modelName) : String.format("Cannot send message to %s. Model does not exist.", modelName); throw new WorkbenchException(msg); @@ -641,92 +593,7 @@ public SendingResult send(String modelName, String id, List messages) th return SendingResult.Handled; } -// /** -// * Sends a single JSON serialized UTF-8 string message to a digital twin. -// * -// * @param modelName the name of the digital twin model -// * @param id the ID of the digital twin model -// * @param jsonSerializedMessage the serialized JSON UTF-8 string message -// * @return the sending result -// * @throws WorkbenchException if an exception is thrown by the twin or an error occurs while processing. -// */ -// public SendingResult send(String modelName, String id, String jsonSerializedMessage) throws WorkbenchException { -// List msgs = new ArrayList<>(); -// msgs.add(jsonSerializedMessage); -// return send(modelName, id, msgs); -// } -// -// /** -// * -// * @param modelName the name of the digital twin model -// * @param id the ID of the digital twin model -// * @param jsonSerializedMessages a serialized list of JSON UTF-8 string messages -// * @return the sending result -// * @throws WorkbenchException if an exception occurs while sending a message -// */ -// public SendingResult send(String modelName, String id, List jsonSerializedMessages) throws WorkbenchException { -// return sendMessage(modelName, id, jsonSerializedMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; -// } - - ProcessingResult sendMessage(String model, String id, List jsonMessages) throws WorkbenchException { - if(_simulationStarted) throw new WorkbenchException("Cannot send message; simulation is active."); - StringBuilder serializedListBuilder = new StringBuilder(String.format("[%s", jsonMessages.remove(0))); - for(String msg : jsonMessages) { - serializedListBuilder.append(","); - serializedListBuilder.append(msg); - - } - serializedListBuilder.append("]"); - return _twinExecutionEngine.run(model, id, null, serializedListBuilder.toString()); - } - - - static void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { - WorkbenchException mee = null; - - ByteArrayOutputStream baos = null; - ObjectOutputStream oos = null; - - ByteArrayInputStream bais = null; - ObjectInputStream ois = null; - boolean serialized = false; - try { - // serialize MessageProcessor - baos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(baos); - oos.writeObject(digitalTwinMessageProcessor); - - byte[] serializedMP = baos.toByteArray(); - serialized = true; - - bais = new ByteArrayInputStream(serializedMP); - ois = new ObjectInputStream(bais); - MessageProcessor incoming = (MessageProcessor) ois.readObject(); - } catch (Exception all) { - if(serialized) - throw new WorkbenchException("Could not deserialize MessageProcessor instance.", all); - else - throw new WorkbenchException("Could not serialize MessageProcessor instance", all); - } finally { - try { - if(baos != null) { - baos.flush(); - baos.close(); - } - if(oos != null) { - oos.flush(); - oos.close(); - } - - if(bais != null) { - bais.close(); - } - if(ois != null) { - ois.close(); - } - } catch(Exception any) {} // best effort to cleanup - } - + static void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { try { Class mpType = digitalTwinMessageProcessor.getClass(); // instantiate TwinInstance diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java index 8cc55b0..9099198 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.time.Duration; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java index 3128ad8..a019b6e 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java @@ -15,8 +15,8 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext; -import com.scaleoutsoftware.digitaltwin.core.SharedData; +import com.scaleoutsoftware.digitaltwin.abstractions.InitSimulationContext; +import com.scaleoutsoftware.digitaltwin.abstractions.SharedData; class WorkbenchInitSimulationContext implements InitSimulationContext { SharedData _globalData; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java deleted file mode 100644 index 43b0a06..0000000 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.MessageFactory; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.List; - -class WorkbenchMessageListFactory implements MessageFactory { - private String _serializedJsonList; - private List _messages; - private Class _type; - - WorkbenchMessageListFactory(String serializedJson, Class type) { - _serializedJsonList = serializedJson; - _messages = null; - _type = type; - } - - WorkbenchMessageListFactory(List messages, Class type) { - _serializedJsonList = null; - _messages = messages; - _type = type; - } - - @Override - public Iterable getIncomingMessages() { - if (_messages != null) { - return (Iterable) _messages; - } else { - Gson gson = new Gson(); - return gson.fromJson(_serializedJsonList, getTypedList(_type)); - } - } - - private Type getTypedList(final Class paramClass) { - return new ParameterizedType() { - public Type[] getActualTypeArguments() { - return new Type[]{paramClass}; - } - - public Type getRawType() { - return List.class; - } - - public Type getOwnerType() { - return null; - } - }; - } -} diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index 2846a09..9d7abc9 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -17,7 +17,7 @@ import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.nio.charset.StandardCharsets; import java.time.Duration; @@ -75,87 +75,18 @@ boolean forceSave() { } @Override - public SendingResult sendToDataSource(byte[] bytes) { + public SendingResult sendToDataSource(byte[] message) { try { - return _twinExecutionEngine.sendToSource(_source, _model, _id, new String(bytes, StandardCharsets.UTF_8)); + return _twinExecutionEngine.sendToSource(_source, _model, _id, message); } catch (WorkbenchException e) { return SendingResult.NotHandled; } } @Override - public SendingResult sendToDataSource(Object jsonSerializableMessage) { + public SendingResult sendToDigitalTwin(String model, String id, byte[] message) { try { - List jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); - return _twinExecutionEngine.sendToSource(_source, _model, _id, jsonSerializableMessages); - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDataSource(List list) { - try { - return _twinExecutionEngine.sendToSource(_source, _model, _id, list); - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, byte[] bytes) { - List msgs = new LinkedList<>(); - msgs.add(bytes); - return sendToDigitalTwin(model, id, msgs); - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage) { - try { - if(_twinExecutionEngine.getTwinInstance(model, id) != null) { - List jsonSerializableMessages; - if(jsonSerializableMessage instanceof List) { - jsonSerializableMessages = (List)jsonSerializableMessage; - } else { - jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); - } - - return _twinExecutionEngine.run(model, id, null, jsonSerializableMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; - } else { - return SendingResult.NotHandled; - } - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, String msg) { - return sendToDigitalTwin(model, id, msg.getBytes(StandardCharsets.UTF_8)); - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, List list) { - if( (model == null || model.isEmpty()) || - (id == null || id.isEmpty()) || - (list == null || list.isEmpty())) { - return SendingResult.NotHandled; - } - Gson gson = new Gson(); - List msgs = new LinkedList<>(); - for(byte[] serialMsg : list) { - msgs.add(new String(serialMsg, StandardCharsets.UTF_8)); - } - String json = gson.toJson(msgs); - try { - if(_twinExecutionEngine.getTwinInstance(model, id) != null) { - return _twinExecutionEngine.run(model, id, null, json) != null ? SendingResult.Handled : SendingResult.NotHandled; - } else { - return SendingResult.NotHandled; - } - + return _twinExecutionEngine.run(model, id,null, message) != null ? SendingResult.Handled : SendingResult.NotHandled; } catch (WorkbenchException e) { return SendingResult.NotHandled; } @@ -163,7 +94,7 @@ public SendingResult sendToDigitalTwin(String model, String id, List lis @Override public SendingResult sendAlert(String alertProviderName, AlertMessage alertMessage) { - if(alertProviderName.isBlank() || alertProviderName.isEmpty() || alertMessage == null) return SendingResult.NotHandled; + if(alertProviderName.isEmpty() || alertMessage == null) return SendingResult.NotHandled; else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) return SendingResult.NotHandled; else { if(_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java index 0712e9a..22d542a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java @@ -15,9 +15,9 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus; -import com.scaleoutsoftware.digitaltwin.core.CacheResult; -import com.scaleoutsoftware.digitaltwin.core.SharedData; +import com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus; +import com.scaleoutsoftware.digitaltwin.abstractions.CacheResult; +import com.scaleoutsoftware.digitaltwin.abstractions.SharedData; import java.util.HashMap; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index 611d7af..0c6118d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.nio.charset.StandardCharsets; import java.time.Duration; @@ -64,9 +64,9 @@ public SendingResult delayIndefinitely() { } @Override - public SendingResult emitTelemetry(String modelName, byte[] bytes) { + public SendingResult emitTelemetry(String modelName, byte[] message) { try { - _engine.run(modelName, _id, _modelName, String.format("[%s]", new String(bytes, StandardCharsets.UTF_8))); + _engine.run(modelName, _id, _modelName, message); return SendingResult.Handled; } catch (WorkbenchException e) { e.printStackTrace(); @@ -74,24 +74,6 @@ public SendingResult emitTelemetry(String modelName, byte[] bytes) { } } - @Override - public SendingResult emitTelemetry(String modelName, Object jsonSerializableMessage) { - try { - if(_engine.hasModel(modelName)) { - List jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); - _engine.run(modelName, _id, _modelName, jsonSerializableMessages); - return SendingResult.Handled; - } else { - return SendingResult.NotHandled; - } - - } catch (WorkbenchException e) { - e.printStackTrace(); - return SendingResult.NotHandled; - } - } - @Override public SendingResult createInstance(String modelName, String id, T instance) { try { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index c5911a7..1e96a7d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -15,14 +15,14 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.time.Duration; class WorkbenchTimerService { static TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { - if(timerName == null || timerName.isBlank() || timerName.isEmpty() || interval == null || + if(timerName == null || timerName.isEmpty() || interval == null || interval.isZero() || interval.isNegative() || timerType == null || timerHandler == null) { String msg = String.format("Empty, blank, zero, or null parameter provided: timerName %s interval %s timerType %s timerHandler %s", timerName, interval, timerType, timerHandler); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java index 6118b9e..79ce6b7 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java @@ -15,7 +15,7 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import java.time.Duration; import java.util.TimerTask; diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 4864388..a47ba6a 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -16,7 +16,7 @@ package com.scaleoutsoftware.digitaltwin.development; import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.*; +import com.scaleoutsoftware.digitaltwin.abstractions.*; import org.junit.Assert; import org.junit.Test; @@ -46,12 +46,12 @@ public SimpleMessage(String s, int i) { } } - public static class SimpleMessageProcessor extends MessageProcessor implements Serializable { + public static class SimpleMessageProcessor extends MessageProcessor implements Serializable { public SimpleMessageProcessor() {} @Override - public ProcessingResult processMessages(ProcessingContext processingContext, SimpleDigitalTwin instance, Iterable messages) { + public ProcessingResult processMessage(ProcessingContext processingContext, SimpleDigitalTwin instance, byte[] message) { Gson gson = new Gson(); Date currentTime = processingContext.getCurrentTime(); PersistenceProvider provider = processingContext.getPersistenceProvider(); @@ -62,76 +62,74 @@ public ProcessingResult processMessages(ProcessingContext processingContext, Sim throw new IllegalStateException(String.format("context.getModel and instance.getModel difer. %s:%s", processingContext.getDigitalTwinModel(), instance.getModel())); } + SimpleMessage msg = gson.fromJson(new String(message, StandardCharsets.UTF_8), SimpleMessage.class); + if(instance.getModel().compareTo("SimSimple") == 0) {// if this is a simulation model... - for(SimpleMessage msg : messages) { - System.out.println(msg.stringChange); - } + System.out.println(msg.stringChange); } else { - for(SimpleMessage msg : messages) { - switch (msg.stringChange) { - case "SendToSource": - processingContext.sendToDataSource(new SimpleMessage("Hello from data source!", 10)); - break; - case "SendToTwin": - String jsonMsg = gson.toJson(msg); - byte[] bytes = jsonMsg.getBytes(StandardCharsets.UTF_8); - processingContext.sendToDigitalTwin(msg.payload == null ? msg.payload : "model", msg.intChange+"",bytes); - break; - case "LogMessage": - processingContext.logMessage(Level.INFO, msg.payload); - break; - case "StartTimer": - processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, - new TimerHandler() { - @Override - public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { - System.out.println("Hello from real-time timer."); - return ProcessingResult.UpdateDigitalTwin; - } - }); - break; - case "StopTimer": - processingContext.stopTimer("timer"); - break; - case "SharedData": - SharedData sharedData = processingContext.getSharedModelData(); - CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); - if(result.getStatus() == CacheOperationStatus.ObjectPut) { - System.out.println("Successfully stored object in model storage."); - } - result = sharedData.get("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { - System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); - } - result = sharedData.remove("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { - System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); - } - result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)); - sharedData = processingContext.getSharedGlobalData(); - result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); - if(result.getStatus() == CacheOperationStatus.ObjectPut) { - System.out.println("Successfully stored object in global storage."); - } - result = sharedData.get("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { - System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); - } - result = sharedData.remove("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { - System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); - } - result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)); - break; - case "WakeUp": - SimulationController controller = processingContext.getSimulationController(); - instance._stringProp = "WakeUp"; - System.out.println("Calling run this twin..."); - controller.runThisInstance(); - break; - default: - break; - } + switch (msg.stringChange) { + case "SendToSource": + processingContext.sendToDataSource(gson.toJson(new SimpleMessage("Hello from data source!", 10)).getBytes(StandardCharsets.UTF_8)); + break; + case "SendToTwin": + String jsonMsg = gson.toJson(msg); + byte[] bytes = jsonMsg.getBytes(StandardCharsets.UTF_8); + processingContext.sendToDigitalTwin(msg.payload == null ? msg.payload : "model", msg.intChange+"",bytes); + break; + case "LogMessage": + processingContext.logMessage(Level.INFO, msg.payload); + break; + case "StartTimer": + processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, + new TimerHandler() { + @Override + public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { + System.out.println("Hello from real-time timer."); + return ProcessingResult.UpdateDigitalTwin; + } + }); + break; + case "StopTimer": + processingContext.stopTimer("timer"); + break; + case "SharedData": + SharedData sharedData = processingContext.getSharedModelData(); + CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); + if(result.getStatus() == CacheOperationStatus.ObjectPut) { + System.out.println("Successfully stored object in model storage."); + } + result = sharedData.get("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { + System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); + } + result = sharedData.remove("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { + System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); + } + result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)); + sharedData = processingContext.getSharedGlobalData(); + result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); + if(result.getStatus() == CacheOperationStatus.ObjectPut) { + System.out.println("Successfully stored object in global storage."); + } + result = sharedData.get("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { + System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); + } + result = sharedData.remove("Hello"); + if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { + System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); + } + result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)); + break; + case "WakeUp": + SimulationController controller = processingContext.getSimulationController(); + instance._stringProp = "WakeUp"; + System.out.println("Calling run this twin..."); + controller.runThisInstance(); + break; + default: + break; } } return ProcessingResult.UpdateDigitalTwin; @@ -165,16 +163,16 @@ public int getPressureChange() { } } - public static class RealTimeCarMessageProcessor extends MessageProcessor implements Serializable { + public static class RealTimeCarMessageProcessor extends MessageProcessor implements Serializable { final int TIRE_PRESSURE_FULL = 100; @Override - public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable messages) throws Exception { + public ProcessingResult processMessage(ProcessingContext processingContext, RealTimeCar car, byte[] message) throws Exception { + Gson gson = new Gson(); + TirePressureMessage msg = gson.fromJson(new String(message, StandardCharsets.UTF_8), TirePressureMessage.class); // apply the updates from the messages - for(TirePressureMessage message : messages) { - car.incrementTirePressure(message.getPressureChange()); - } + car.incrementTirePressure(msg.getPressureChange()); if(car.getTirePressure() > TIRE_PRESSURE_FULL) { - processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure())); + processingContext.sendToDataSource(gson.toJson(new TirePressureMessage(car.getTirePressure())).getBytes(StandardCharsets.UTF_8)); } return ProcessingResult.UpdateDigitalTwin; } @@ -201,9 +199,9 @@ public boolean isTireFull() { } } - public static class SimulatedPumpMessageProcessor extends MessageProcessor implements Serializable { + public static class SimulatedPumpMessageProcessor extends MessageProcessor implements Serializable { @Override - public ProcessingResult processMessages(ProcessingContext processingContext, SimulationPump simCar, Iterable messages) throws Exception { + public ProcessingResult processMessage(ProcessingContext processingContext, SimulationPump simCar, byte[] message) throws Exception { // apply the updates from the messages simCar.setTirePressureReached(); return ProcessingResult.UpdateDigitalTwin; @@ -218,7 +216,8 @@ public ProcessingResult processModel(ProcessingContext processingContext, Simula controller.deleteThisInstance(); } else { int change = (int) (100 * simPump.getTirePressureChange()); - controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change)); + Gson gson = new Gson(); + controller.emitTelemetry("RealTimeCar", gson.toJson(new TirePressureMessage(change)).getBytes(StandardCharsets.UTF_8)); } return ProcessingResult.UpdateDigitalTwin; } @@ -227,16 +226,12 @@ public ProcessingResult processModel(ProcessingContext processingContext, Simula public static class SimpleSimProcessor extends SimulationProcessor implements Serializable { private Gson _gson = new Gson(); private AtomicInteger timesInvoked = new AtomicInteger(0); - private boolean _useJson; private String _modelIdToMessage; private String _instanceIdToMessage; - public SimpleSimProcessor(boolean json) { - _useJson = json; - } + public SimpleSimProcessor() {} public SimpleSimProcessor(String modelIdToMessage, String instanceIdToMessage) { - _useJson = false; _modelIdToMessage = modelIdToMessage; _instanceIdToMessage = instanceIdToMessage; } @@ -256,9 +251,9 @@ public ProcessingResult processModel(ProcessingContext processingContext, Simple controller.delay(Duration.ofSeconds(600)); return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().contains("timer")) { - processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.OneTime, new TimerHandler<>() { + processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.OneTime, new TimerHandler() { @Override - public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { + public ProcessingResult onTimedMessage(String s, SimpleDigitalTwin digitalTwinBase, ProcessingContext processingContext) { System.out.println("timer called!"); return ProcessingResult.UpdateDigitalTwin; } @@ -282,20 +277,17 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().contains("waker")) { System.out.println("Waking up sleeper..."); - processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, new SimpleMessage("WakeUp", 23)); + Gson gson = new Gson(); + processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, gson.toJson(new SimpleMessage("WakeUp", 23)).getBytes(StandardCharsets.UTF_8)); return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { return ProcessingResult.UpdateDigitalTwin; } long delay = Long.parseLong(simpleDigitalTwin.getId()); controller.delay(Duration.ofSeconds(delay)); - if(_useJson) { - byte[] msg = _gson.toJson(new SimpleMessage("SendToSource", 23)).getBytes(StandardCharsets.UTF_8); - controller.emitTelemetry("Simple", msg); - } else { - SimpleMessage telemetry = new SimpleMessage("SendToSource", 23); - controller.emitTelemetry("Simple", telemetry); - } + SimpleMessage telemetry = new SimpleMessage("SendToSource", 23); + Gson gson = new Gson(); + controller.emitTelemetry("Simple", gson.toJson(telemetry).getBytes(StandardCharsets.UTF_8)); return ProcessingResult.UpdateDigitalTwin; } @@ -304,7 +296,6 @@ public ProcessingResult onInitSimulation(InitSimulationContext ctx, SimpleDigita if(simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { timesInvoked.set(1000); } - return ProcessingResult.UpdateDigitalTwin; } } @@ -314,8 +305,8 @@ public void TestWorkbenchNoInstances() throws WorkbenchException { Gson gson = new Gson(); SimulationStep result; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), new SimpleSimProcessor(), SimpleDigitalTwin.class); result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); Assert.assertSame(SimulationStatus.NoRemainingWork, result.getStatus()); @@ -326,12 +317,12 @@ public void TestWorkbenchNoInstances() throws WorkbenchException { @Test public void TestWorkbenchOnlySimulationInstances() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); Gson gson = new Gson(); SimulationStep result; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); for (int i = 1; i < 2; i++) { DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); @@ -353,8 +344,8 @@ public void TestWorkbenchSample() throws WorkbenchException { long expectedStop; SimulationStep step; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class); - workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class); + workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class); + workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class); workbench.addInstance("SimPump", "23", new SimulationPump(0.29d)); long start = System.currentTimeMillis(); @@ -380,8 +371,8 @@ public void TestWorkbenchSampleRun() throws WorkbenchException { long expectedStop; SimulationStep step; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class); - workbench.addSimulationModel("SimModel", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class); + workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class); + workbench.addSimulationModel("SimModel", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class); workbench.addInstance("SimModel", "23", new SimulationPump(0.29d)); long start = System.currentTimeMillis(); @@ -397,12 +388,12 @@ public void TestWorkbenchSampleRun() throws WorkbenchException { @Test public void TestWorkbenchSpeedup() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); Gson gson = new Gson(); SimulationStep result; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); for (int i = 0; i < 1000; i++) { DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); @@ -427,12 +418,12 @@ public void TestWorkbenchDebug() throws WorkbenchException{ int numInstance = 10; int numItterations = 0; for(int i = 0; i < 20; i ++) { - SimpleSimProcessor processor = new SimpleSimProcessor(i >= 10); + SimpleSimProcessor processor = new SimpleSimProcessor(); SimulationStep result; long start; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); for (int twinCount = 0; twinCount < 1000; twinCount++) { DigitalTwinBase instance = new SimpleDigitalTwin("hello" + twinCount); @@ -460,17 +451,17 @@ public void TestWorkbenchDebug() throws WorkbenchException{ @Test public void testWorkbenchDebugOnlySimulationInstances() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); Gson gson = new Gson(); long stopTimeMs; SimulationStep step; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); - workbench.addInstance("SimSimple", "" + 100, instance); + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 1); + workbench.addInstance("SimSimple", "" + 1, instance); long startTimeMs = System.currentTimeMillis(); stopTimeMs = startTimeMs + 60000; @@ -494,12 +485,12 @@ public void TestWorkbenchStop() throws WorkbenchException{ Gson gson = new Gson(); int numInstance = 10; int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); SimulationStep result; long start; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); for (int twinCount = 0; twinCount < 1000; twinCount++) { DigitalTwinBase instance = new SimpleDigitalTwin("hello" + twinCount); @@ -527,12 +518,12 @@ public void TestWorkbenchHugeDelays() throws WorkbenchException{ Gson gson = new Gson(); int numInstance = 10; int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); SimulationStep result; long start; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); for (int twinCount = 0; twinCount < 1000; twinCount++) { DigitalTwinBase instance = new SimpleDigitalTwin("delay" + twinCount); @@ -559,12 +550,12 @@ public void TestWorkbenchTimer() throws WorkbenchException{ Gson gson = new Gson(); int numInstance = 10; int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); SimulationStep result; long start; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); for (int twinCount = 0; twinCount < 1; twinCount++) { DigitalTwinBase instance = new SimpleDigitalTwin("timer" + twinCount); @@ -591,23 +582,20 @@ public void TestWorkbenchRealtimeTimer() throws WorkbenchException, InterruptedE Gson gson = new Gson(); int numInstance = 10; int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); for (int twinCount = 0; twinCount < 1; twinCount++) { DigitalTwinBase instance = new SimpleDigitalTwin("timer" + twinCount); workbench.addInstance("Simple", "timer" + twinCount, instance); } - - List messages = new LinkedList<>(); - messages.add(new SimpleMessage("StartTimer", 0)); - workbench.send("Simple", "timer0", messages); + byte[] message = gson.toJson(new SimpleMessage("StartTimer", 0)).getBytes(StandardCharsets.UTF_8); + workbench.send("Simple", "timer0", message); Thread.sleep(3000); - messages = new LinkedList<>(); - messages.add(new SimpleMessage("StopTimer", 0)); - workbench.send("Simple", "timer0", messages); + message = gson.toJson(new SimpleMessage("StopTimer", 0)).getBytes(StandardCharsets.UTF_8); + workbench.send("Simple", "timer0", message); Thread.sleep(2000); } catch (Exception e) { throw new RuntimeException(e); @@ -620,18 +608,16 @@ public void TestWorkbenchRealtimeTimerScope() throws WorkbenchException, Interru Gson gson = new Gson(); int numInstance = 10; int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); for(int twinCount = 0; twinCount < 1; twinCount++) { DigitalTwinBase instance = new SimpleDigitalTwin("timer"+twinCount); workbench.addInstance("Simple", "timer" + twinCount, instance); } - - List messages = new LinkedList<>(); - messages.add(new SimpleMessage("StartTimer", 0)); - workbench.send("Simple", "timer0", messages); + byte[] message = gson.toJson(new SimpleMessage("StartTimer", 0)).getBytes(StandardCharsets.UTF_8); + workbench.send("Simple", "timer0", message); Thread.sleep(3000); } catch (Exception e) { Assert.fail(); @@ -641,7 +627,7 @@ public void TestWorkbenchRealtimeTimerScope() throws WorkbenchException, Interru @Test public void TestWorkbenchSimulationLogMessage() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); Gson gson = new Gson(); String logMessageContent; long exp; @@ -649,8 +635,8 @@ public void TestWorkbenchSimulationLogMessage() throws WorkbenchException { long stop; List messages; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); logMessageContent = "this is a log message"; for (int i = 0; i < 1; i++) { @@ -701,12 +687,12 @@ public void TestWorkbenchSimulationLogMessage() throws WorkbenchException { @Test public void TestWorkbenchSimulationAlertMessage() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); Gson gson = new Gson(); SimulationStep result; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); workbench.addAlertProvider("SimSimple", new AlertProviderConfiguration("test", "www.url.com", "integrationkey", "routingKey", "alert", "entityId")); String alertMessageContent = "this is an alert message"; @@ -738,7 +724,7 @@ public void TestWorkbenchSimulationAlertMessage() throws WorkbenchException { @Test(expected = WorkbenchException.class) public void TestWorkbenchException() throws Exception { try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", null, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", null, SimpleDigitalTwin.class); } catch (Exception e) { throw e; } @@ -746,16 +732,16 @@ public void TestWorkbenchException() throws Exception { @Test public void TestWorkbenchPeek() throws Exception { - SimpleSimProcessor processor = new SimpleSimProcessor(false); + SimpleSimProcessor processor = new SimpleSimProcessor(); long stopTimeMs; SimulationStep step; try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); - workbench.addInstance("SimSimple", "" + 100, instance); + DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 1); + workbench.addInstance("SimSimple", "" + 1, instance); long startTimeMs = System.currentTimeMillis(); stopTimeMs = startTimeMs + 60000; @@ -778,46 +764,18 @@ public void TestWorkbenchPeek() throws Exception { } } - @Test - public void TestWorkbenchGenerateModelSchema() throws Exception { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - String schemaAsJson = workbench.generateModelSchema("Simple"); - Assert.assertSame(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}"); - String dir = workbench.generateModelSchema("SimSimple", System.getProperty("user.dir")); - Assert.assertEquals(String.format("%s\\model.json", System.getProperty("user.dir")), dir); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test (expected = WorkbenchException.class) - public void TestWorkbenchGenerateModelSchemaExceptionally() throws Exception { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - String schemaAsJson = workbench.generateModelSchema(""); - Assert.assertNotNull(schemaAsJson); - } catch (Exception e) { - throw e; - } - } - @Test public void TestWorkbenchSharedData() throws Exception { + Gson gson = new Gson(); try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - LinkedList messages = new LinkedList<>(); - messages.add(new SimpleMessage("SharedData", 29)); - workbench.send("Simple", "23", messages); + workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); + byte[] message = gson.toJson(new SimpleMessage("SharedData", 29)).getBytes(StandardCharsets.UTF_8); + workbench.send("Simple", "23", message); CacheResult result = workbench.getSharedModelData("Simple").get("modelTest"); Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); Assert.assertEquals("modelTest", result.getKey()); Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); - result = workbench.getSharedGlobalData("Simple").get("globalTest"); + result = workbench.getSharedGlobalData().get("globalTest"); Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); Assert.assertEquals("globalTest", result.getKey()); Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); @@ -829,8 +787,8 @@ public void TestWorkbenchSharedData() throws Exception { @Test public void TestWorkbenchRunThisInstance() throws Exception { try (Workbench workbench = new Workbench()) { - workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), new SimpleSimProcessor("Simple2", "sleeper"), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("Simple2", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class); + workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), new SimpleSimProcessor("Simple2", "sleeper"), SimpleDigitalTwin.class); + workbench.addSimulationModel("Simple2", new SimpleMessageProcessor(), new SimpleSimProcessor(), SimpleDigitalTwin.class); workbench.addInstance("Simple", "waker", new SimpleDigitalTwin("waker")); workbench.addInstance("Simple2", "sleeper", new SimpleDigitalTwin("sleeper")); @@ -852,8 +810,8 @@ public void TestWorkbenchRunThisInstance() throws Exception { @Test public void TestWorkbenchInitSimulation() throws Exception { try (Workbench workbench = new Workbench()) { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); + SimpleSimProcessor processor = new SimpleSimProcessor(); + workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); workbench.addInstance("Simple", "initSimulation", new SimpleDigitalTwin("waker")); From 942401acf696531cfc3142c2762dd718d9126414 Mon Sep 17 00:00:00 2001 From: Brandon Date: Mon, 9 Feb 2026 15:08:18 -0800 Subject: [PATCH 13/35] Updating network based calls to use CompletableFutures Updating abstractions network based calls to use CompletableFutures Update workbench to match abstractions; because calls are local and in-memory the completable futures are stubbed. --- .../abstractions/ProcessingContext.java | 11 ++++---- .../digitaltwin/abstractions/SharedData.java | 10 ++++--- .../abstractions/SimulationController.java | 16 +++++------ .../development/TwinExecutionEngine.java | 23 ++++++++-------- .../WorkbenchProcessingContext.java | 27 +++++++++++-------- .../development/WorkbenchSharedData.java | 26 +++++++++--------- .../WorkbenchSimulationController.java | 27 +++++++++---------- 7 files changed, 74 insertions(+), 66 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index 097acd1..df6934a 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -19,6 +19,7 @@ import java.time.Duration; import java.util.Date; import java.util.List; +import java.util.concurrent.CompletableFuture; import java.util.logging.Level; /** @@ -44,7 +45,7 @@ public ProcessingContext() {} * @param payload the message (as a serialized JSON string) * @return the sending result */ - public abstract SendingResult sendToDataSource(byte[] payload); + public abstract CompletableFuture sendToDataSource(byte[] payload); /** *

            @@ -60,7 +61,7 @@ public ProcessingContext() {} * @param payload the serialized JSON message * @return the sending result */ - public abstract SendingResult sendToDigitalTwin(String model, String id, byte[] payload); + public abstract CompletableFuture sendToDigitalTwin(String model, String id, byte[] payload); /** *

            @@ -83,7 +84,7 @@ public ProcessingContext() {} * @param alert the alert message. * @return the sending result. */ - public abstract SendingResult sendAlert(String alertingProviderName, AlertMessage alert); + public abstract CompletableFuture sendAlert(String alertingProviderName, AlertMessage alert); /** * Returns the configured persistence provider or null if no persistence provider configuration can be found. @@ -104,14 +105,14 @@ public ProcessingContext() {} public abstract String getDigitalTwinModel(); /** - * Logs a message to the real-time digital twin cloud service. + * Send an Alert to the real-time digital twin UI. * * Note: the only supported severity levels are: INFO, WARN, and SEVERE * * @param severity the severity of the log message * @param message the message to log */ - public abstract void logMessage(Level severity, String message); + public abstract CompletableFuture sendUIAlert(Level severity, String message); /** * Starts a new timer for the digital twin diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java index 913b690..4b7dd9f 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java @@ -15,6 +15,8 @@ */ package com.scaleoutsoftware.digitaltwin.abstractions; +import java.util.concurrent.CompletableFuture; + /** * SharedData is used to access a model's, or globally, shared cache. */ @@ -24,7 +26,7 @@ public interface SharedData { * @param key the key mapping to a value. * @return A cache result. */ - public CacheResult get(String key); + public CompletableFuture get(String key); /** * Put a new key/value mapping into the cache. @@ -32,18 +34,18 @@ public interface SharedData { * @param value the value. * @return a cache result. */ - public CacheResult put(String key, byte[] value); + public CompletableFuture put(String key, byte[] value); /** * Remove a key/value mapping from the cache. * @param key the key mapping to a value. * @return a cache result. */ - public CacheResult remove(String key); + public CompletableFuture remove(String key); /** * Clear the shared data cache. * @return a cache result. */ - public CacheResult clear(); + public CompletableFuture clear(); } diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java index 063ca7e..a2b4340 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java @@ -17,6 +17,7 @@ import java.time.Duration; import java.util.Date; +import java.util.concurrent.CompletableFuture; /** * The SimulationController interface is used to interact with the running DigitalTwin simulation. @@ -94,14 +95,14 @@ public interface SimulationController { /** *

            * Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin - * models {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} method. + * models {@link MessageProcessor#processMessage(ProcessingContext, DigitalTwinBase, byte[])} method. *

            * @param modelName the model to send the messages too. * @param telemetryMessage a blob representing a JSON serialized messages. * @return {@link SendingResult#Handled} if the messages were processed, {@link SendingResult#Enqueued} if * the messages are in process of being handled, or {@link SendingResult#NotHandled} if the delay was not processed. */ - SendingResult emitTelemetry(String modelName, byte[] telemetryMessage); + CompletableFuture emitTelemetry(String modelName, byte[] telemetryMessage); /** * Create a new digital twin instance for simulation processing. @@ -112,7 +113,7 @@ public interface SimulationController { * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. * @param the type of the digital twin to create. */ - SendingResult createInstance(String modelName, String instanceId, T base); + CompletableFuture createInstance(String modelName, String instanceId, T base); /** * Create a new digital twin instance for simulation processing from a persistence store. @@ -126,7 +127,7 @@ public interface SimulationController { * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. */ - SendingResult createInstanceFromPersistenceStore(String model, String id); + CompletableFuture createInstanceFromPersistenceStore(String model, String id); /** * The twin instance will be loaded via model name and id from a persistence store. @@ -142,7 +143,7 @@ public interface SimulationController { * * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. * @param the type of the digital twin to create. */ - SendingResult createInstanceFromPersistenceStore(String model, String id, T def); + CompletableFuture createInstanceFromPersistenceStore(String model, String id, T def); /** * Delete and remove a digital twin instance from simulation processing. @@ -151,13 +152,13 @@ public interface SimulationController { * @return {@link SendingResult#Handled} if the instance was deleted, {@link SendingResult#Enqueued} if the instance * is in process of being deleted, or {@link SendingResult#NotHandled} if the instance could not be deleted. */ - SendingResult deleteInstance(String modelName, String instanceId); + CompletableFuture deleteInstance(String modelName, String instanceId); /** * Delete and remove this digital twin instance from simulation processing. * @return this local request will always return {@link SendingResult#Handled}. */ - SendingResult deleteThisInstance(); + CompletableFuture deleteThisInstance(); /** * Run this instance during this simulation step. The instance will be run using the models {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)} @@ -174,5 +175,4 @@ public interface SimulationController { */ SimulationStatus stopSimulation(); - } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 71877a4..bc35f73 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -20,7 +20,6 @@ import java.io.Closeable; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; @@ -48,17 +47,17 @@ class TwinExecutionEngine implements Closeable { } void init( ) { - _modelNames = new LinkedList<>(); - _digitalTwins = new ConcurrentHashMap<>(); - _messageProcessors = new ConcurrentHashMap<>(); - _simulationProcessors = new ConcurrentHashMap<>(); - _modelInstances = new ConcurrentHashMap<>(); - _modelsSharedData = new ConcurrentHashMap<>(); - _globalSharedData = new HashMap<>(); - _alertProviders = new ConcurrentHashMap<>(); - _simulationSchedulers = new ConcurrentHashMap<>(); - _realTimeTimers = new ConcurrentHashMap<>(); - _gson = new Gson(); + _modelNames = new LinkedList<>(); + _digitalTwins = new ConcurrentHashMap<>(); + _messageProcessors = new ConcurrentHashMap<>(); + _simulationProcessors = new ConcurrentHashMap<>(); + _modelInstances = new ConcurrentHashMap<>(); + _modelsSharedData = new ConcurrentHashMap<>(); + _globalSharedData = new HashMap<>(); + _alertProviders = new ConcurrentHashMap<>(); + _simulationSchedulers = new ConcurrentHashMap<>(); + _realTimeTimers = new ConcurrentHashMap<>(); + _gson = new Gson(); } void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index 9d7abc9..cd57d4a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -22,6 +22,8 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; import java.util.logging.Level; class WorkbenchProcessingContext extends ProcessingContext { @@ -75,32 +77,34 @@ boolean forceSave() { } @Override - public SendingResult sendToDataSource(byte[] message) { + public CompletableFuture sendToDataSource(byte[] message) { try { - return _twinExecutionEngine.sendToSource(_source, _model, _id, message); + return CompletableFuture.completedFuture(_twinExecutionEngine.sendToSource(_source, _model, _id, message)); } catch (WorkbenchException e) { - return SendingResult.NotHandled; + return CompletableFuture.completedFuture(SendingResult.NotHandled); } } @Override - public SendingResult sendToDigitalTwin(String model, String id, byte[] message) { + public CompletableFuture sendToDigitalTwin(String model, String id, byte[] message) { try { - return _twinExecutionEngine.run(model, id,null, message) != null ? SendingResult.Handled : SendingResult.NotHandled; + return CompletableFuture.completedFuture(_twinExecutionEngine.run(model, id,null, message) != null ? SendingResult.Handled : SendingResult.NotHandled); } catch (WorkbenchException e) { - return SendingResult.NotHandled; + return CompletableFuture.completedFuture(SendingResult.NotHandled); } } @Override - public SendingResult sendAlert(String alertProviderName, AlertMessage alertMessage) { - if(alertProviderName.isEmpty() || alertMessage == null) return SendingResult.NotHandled; - else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) return SendingResult.NotHandled; + public CompletableFuture sendAlert(String alertProviderName, AlertMessage alertMessage) { + if(alertProviderName.isEmpty() || alertMessage == null) return CompletableFuture.completedFuture(SendingResult.NotHandled); + else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) return CompletableFuture.completedFuture(SendingResult.NotHandled); else { if(_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) { _twinExecutionEngine.recordAlertMessage(_model, alertProviderName, alertMessage); + return CompletableFuture.completedFuture(SendingResult.Handled); + } else { + return CompletableFuture.completedFuture(SendingResult.NotHandled); } - return SendingResult.Handled; } } @@ -120,8 +124,9 @@ public String getDigitalTwinModel() { } @Override - public void logMessage(Level level, String msg) { + public CompletableFuture sendUIAlert(Level level, String msg) { _twinExecutionEngine.logMessage(_model, new LogMessage(level, msg)); + return CompletableFuture.completedFuture(null); } @Override diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java index 22d542a..6796b15 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java @@ -20,6 +20,7 @@ import com.scaleoutsoftware.digitaltwin.abstractions.SharedData; import java.util.HashMap; +import java.util.concurrent.CompletableFuture; class WorkbenchSharedData implements SharedData { private final HashMap data; @@ -28,8 +29,8 @@ public WorkbenchSharedData(HashMap shared) { data = shared; } @Override - public CacheResult get(String s) { - return new CacheResult() { + public CompletableFuture get(String s) { + return CompletableFuture.completedFuture(new CacheResult() { @Override public String getKey() { return s; @@ -44,13 +45,14 @@ public byte[] getValue() { public CacheOperationStatus getStatus() { return data.containsKey(s) ? CacheOperationStatus.ObjectRetrieved : CacheOperationStatus.ObjectDoesNotExist; } - }; + }); + } @Override - public CacheResult put(String s, byte[] bytes) { + public CompletableFuture put(String s, byte[] bytes) { data.put(s, bytes); - return new CacheResult() { + return CompletableFuture.completedFuture(new CacheResult() { @Override public String getKey() { return s; @@ -65,13 +67,13 @@ public byte[] getValue() { public CacheOperationStatus getStatus() { return CacheOperationStatus.ObjectPut; } - }; + }); } @Override - public CacheResult remove(String s) { + public CompletableFuture remove(String s) { byte[] v = data.remove(s); - return new CacheResult() { + return CompletableFuture.completedFuture(new CacheResult() { @Override public String getKey() { return s; @@ -86,13 +88,13 @@ public byte[] getValue() { public CacheOperationStatus getStatus() { return v == null ? CacheOperationStatus.ObjectDoesNotExist : CacheOperationStatus.ObjectRemoved; } - }; + }); } @Override - public CacheResult clear() { + public CompletableFuture clear() { data.clear(); - return new CacheResult() { + return CompletableFuture.completedFuture(new CacheResult() { @Override public String getKey() { return null; @@ -107,6 +109,6 @@ public byte[] getValue() { public CacheOperationStatus getStatus() { return CacheOperationStatus.CacheCleared; } - }; + }); } } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index 0c6118d..74a1226 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -22,6 +22,7 @@ import java.util.Date; import java.util.LinkedList; import java.util.List; +import java.util.concurrent.CompletableFuture; class WorkbenchSimulationController implements SimulationController { TwinExecutionEngine _engine; @@ -64,29 +65,27 @@ public SendingResult delayIndefinitely() { } @Override - public SendingResult emitTelemetry(String modelName, byte[] message) { + public CompletableFuture emitTelemetry(String modelName, byte[] message) { try { _engine.run(modelName, _id, _modelName, message); - return SendingResult.Handled; + return CompletableFuture.completedFuture(SendingResult.Handled); } catch (WorkbenchException e) { - e.printStackTrace(); - return SendingResult.NotHandled; + return CompletableFuture.completedFuture(SendingResult.NotHandled); } } @Override - public SendingResult createInstance(String modelName, String id, T instance) { + public CompletableFuture createInstance(String modelName, String id, T instance) { try { _engine.createInstance(modelName, id, instance); - return SendingResult.Handled; + return CompletableFuture.completedFuture(SendingResult.Handled); } catch (Exception e) { - e.printStackTrace(); - return SendingResult.NotHandled; + return CompletableFuture.completedFuture(SendingResult.NotHandled); } } @Override - public SendingResult createInstanceFromPersistenceStore(String modelName, String id) { + public CompletableFuture createInstanceFromPersistenceStore(String modelName, String id) { try { throw new NoSuchMethodException("Not available on the workbench."); } catch (NoSuchMethodException e) { @@ -95,7 +94,7 @@ public SendingResult createInstanceFromPersistenceStore(String modelName, String } @Override - public SendingResult createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { + public CompletableFuture createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { try { throw new NoSuchMethodException("Not available on the workbench."); } catch (NoSuchMethodException e) { @@ -104,16 +103,16 @@ public SendingResult createInstanceFromPersistenceSt } @Override - public SendingResult deleteInstance(String modelName, String id) { + public CompletableFuture deleteInstance(String modelName, String id) { _engine.deleteSimulationInstance(modelName, id); - return SendingResult.Handled; + return CompletableFuture.completedFuture(SendingResult.Handled); } @Override - public SendingResult deleteThisInstance() { + public CompletableFuture deleteThisInstance() { _engine.deleteSimulationInstance(_modelName, _id); _deleted = true; - return SendingResult.Handled; + return CompletableFuture.completedFuture(SendingResult.Handled); } @Override From 4e63830e5286608b217fce6d2e60451b160b543e Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 26 Feb 2026 10:08:08 -0800 Subject: [PATCH 14/35] Update processing context Rename sendUIAlert to logMessage --- .../digitaltwin/abstractions/ProcessingContext.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index df6934a..f8b7ce7 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -105,14 +105,14 @@ public ProcessingContext() {} public abstract String getDigitalTwinModel(); /** - * Send an Alert to the real-time digital twin UI. + * Log a message to the real-time digital twin UI. * * Note: the only supported severity levels are: INFO, WARN, and SEVERE * * @param severity the severity of the log message * @param message the message to log */ - public abstract CompletableFuture sendUIAlert(Level severity, String message); + public abstract CompletableFuture logMessage(Level severity, String message); /** * Starts a new timer for the digital twin From a17e27f60efe6d9480a0d840cbde370241aed5ee Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 26 Feb 2026 10:38:37 -0800 Subject: [PATCH 15/35] Update DigitalTwinBase Remove NextSimulationTime and TimerHandler metadata --- .../abstractions/DigitalTwinBase.java | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java index 9f7f689..f44e10a 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java @@ -35,37 +35,11 @@ public abstract class DigitalTwinBase { */ public String Model = ""; - /** - * The timer handlers for this twin instance. - */ - public HashMap TimerHandlers = new HashMap<>(); - - /** - * Note: Simulation only. The next time in milliseconds that this Digital Twin instance will be passed to {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)}. - */ - public long NextSimulationTime = 0L; - /** * Default constructor. */ public DigitalTwinBase() {} - /** - * Retrieve the next simulation time in milliseconds. - * @return the next simulation time in milliseconds. - */ - public long getNextSimulationTimeMs() { - return NextSimulationTime; - } - - /** - * Set the next simulation time in milliseconds. - * @param nextSimulationTime set the next simulation time. - */ - public void setNextSimulationTime(long nextSimulationTime) { - NextSimulationTime = nextSimulationTime; - } - /** * The identifier of this DigitalTwin. * @return the identifier of this digital twin From c1b7c150b7fca682f07ffb429fcc227b4da879a4 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 12 Mar 2026 12:44:27 -0700 Subject: [PATCH 16/35] Refactor DigitalTwinBase + ProcessingContext Update DigitalTwinBase with CRTP Update processing context to be strongly typed Updated init context to be strongly typed Update timer handler to be strongly typed Update workbench to use newly strongly typed classes --- Abstractions/build.bat | 8 ++++ Abstractions/pom.xml | 3 -- ...er.java => AzureDigitalTwinsProvider.java} | 46 +------------------ .../abstractions/DigitalTwinBase.java | 4 +- .../digitaltwin/abstractions/InitContext.java | 5 +- .../abstractions/MessageProcessor.java | 4 +- .../abstractions/PersistenceProviderType.java | 2 +- .../abstractions/ProcessingContext.java | 13 +++--- .../abstractions/SendingResult.java | 2 +- .../abstractions/SimulationController.java | 11 ++--- Development/build.bat | 8 ++++ Development/pom.xml | 2 +- .../development/SimulationEventTwinImpl.java | 6 +-- .../development/TwinExecutionEngine.java | 16 +++---- .../digitaltwin/development/TwinProxy.java | 21 +++++++-- .../digitaltwin/development/Workbench.java | 16 ++++--- .../development/WorkbenchInitContext.java | 12 ++--- .../WorkbenchProcessingContext.java | 24 ++++------ .../WorkbenchSimulationController.java | 10 ++-- .../development/WorkbenchTimerService.java | 14 +++--- .../development/WorkbenchTimerTask.java | 2 +- .../development/TestWorkbench.java | 35 +++++++------- 22 files changed, 118 insertions(+), 146 deletions(-) create mode 100644 Abstractions/build.bat rename Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/{PersistenceProvider.java => AzureDigitalTwinsProvider.java} (70%) create mode 100644 Development/build.bat diff --git a/Abstractions/build.bat b/Abstractions/build.bat new file mode 100644 index 0000000..f8a5f33 --- /dev/null +++ b/Abstractions/build.bat @@ -0,0 +1,8 @@ +rem ******************** +rem * Requirements * +rem ******************** +rem * Java JDK 8 +rem * MVN 3.x +SET JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.452.9-hotspot +SET MVN_HOME=C:\JavaBuildTools\apache-maven-3.9.8 +call mvn clean package install \ No newline at end of file diff --git a/Abstractions/pom.xml b/Abstractions/pom.xml index 74a03a2..fbd45f4 100644 --- a/Abstractions/pom.xml +++ b/Abstractions/pom.xml @@ -9,9 +9,6 @@ 4.0.0 - 8 - 8 UTF-8 - \ No newline at end of file diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProvider.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java similarity index 70% rename from Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProvider.java rename to Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java index b7391f4..67abb67 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProvider.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java @@ -22,7 +22,7 @@ /** * An interface that can be used for persisting/retrieving the state of real-time digital twins. */ -public interface PersistenceProvider { +public interface AzureDigitalTwinsProvider { /** * Returns true if this PersistenceProvider is active, false otherwise. @@ -30,12 +30,6 @@ public interface PersistenceProvider { */ public abstract boolean isActive(); - /** - * Retrieves this persistence providers type. Currently supported provider types: AzureDigitalTwins. - * @return the persistence provider type. - */ - public PersistenceProviderType getProviderType(); - /** * Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist. * @param containerName the container name. @@ -121,42 +115,4 @@ public interface PersistenceProvider { * @return the property or null if the property does not exist. */ public T getProperty(String containerName, String instanceId, String propertyName, Class clazz); - - /** - * Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated. - * Updates a RTDT property for the provided instance id specified by the property name and property value. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param propertyValue the property value. - * @return a future that will complete exceptionally or return void. - */ - public CompletableFuture updateRtdtPropertyAsync(String instanceId, String propertyName, Object propertyValue); - - /** - * Updates a RTDT property for the provided instance id specified by the property name and property value. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param propertyValue the property value. - */ - public void updateRtdtProperty(String instanceId, String propertyName, Object propertyValue); - - /** - * Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param clazz the class of the property type - * @param the type of the property to return. - * @return a future that will return a property value for a RTDT instance. - */ - public CompletableFuture getRtdtPropertyAsync(String instanceId, String propertyName, Class clazz); - - /** - * Retrieves a property for a RTDT instance or null if the property does not exist. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param clazz the class of the property type. - * @param the type of the property to return. - * @return the property value. - */ - public T getRtdtProperty(String instanceId, String propertyName, Class clazz); } diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java index f44e10a..b99ea3a 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java @@ -22,7 +22,7 @@ * A real-time digital twin of a data source. The implementation of the real-time DigitalTwin should have a parameterless constructor for * basic initialization. */ -public abstract class DigitalTwinBase { +public abstract class DigitalTwinBase> { /* capitalized to match .NET serialization */ /** @@ -62,7 +62,7 @@ public String getModel() { * @param context the initialization context. * @throws IllegalStateException if init is called after initialization. */ - public void init(InitContext context) throws IllegalStateException { + public void init(InitContext context) throws IllegalStateException { this.Id = context.getId(); this.Model = context.getModel(); } diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java index 405fff4..a513665 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java @@ -21,7 +21,7 @@ * The InitContext is passed as a parameter to the {@link DigitalTwinBase#init(InitContext)} method of an initializing * digital twin. */ -public abstract class InitContext { +public abstract class InitContext> { /** * Default constructor. @@ -34,11 +34,10 @@ public InitContext() {} * @param interval the timer interval * @param timerType the timer type * @param timerHandler the time handler callback - * @param the type of the digital twin * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); /** * Retrieve a {@link SharedData} accessor for this model's shared data. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java index b192984..4849612 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java @@ -21,7 +21,7 @@ * Processes messages for a real-time digital twin. * @param the real type of the DigitalTwinBase */ -public abstract class MessageProcessor { +public abstract class MessageProcessor> { /** * Default constructor. @@ -36,6 +36,6 @@ public MessageProcessor() {} * @return processing results for updating the state object. * @throws Exception if an exception occurs during processing */ - public abstract ProcessingResult processMessage(ProcessingContext context, T stateObject, byte[] incomingMessage) throws Exception; + public abstract ProcessingResult processMessage(ProcessingContext context, T stateObject, byte[] incomingMessage) throws Exception; } diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java index 19d69b9..ecf0b53 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java @@ -18,7 +18,7 @@ import java.io.Serializable; /** - * Available {@link PersistenceProvider} types. + * Available PersistenceProvider types configured through the UI. */ public enum PersistenceProviderType implements Serializable { diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index f8b7ce7..6f88e68 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -18,14 +18,14 @@ import java.io.Serializable; import java.time.Duration; import java.util.Date; -import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.logging.Level; /** * Context object that allows the user to send a message to a DataSource. + * the type of the digital twin */ -public abstract class ProcessingContext implements Serializable { +public abstract class ProcessingContext implements Serializable { /** * Default constructor. @@ -87,10 +87,10 @@ public ProcessingContext() {} public abstract CompletableFuture sendAlert(String alertingProviderName, AlertMessage alert); /** - * Returns the configured persistence provider or null if no persistence provider configuration can be found. - * @return a PersistenceProvider . + * Returns an {@link AzureDigitalTwinsProvider} or null if no AzureDigitalTwinsProvider configuration can be found. + * @return a {@link AzureDigitalTwinsProvider} or null. */ - public abstract PersistenceProvider getPersistenceProvider(); + public abstract AzureDigitalTwinsProvider getAzureDigitalTwinsProvider(); /** * Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID) @@ -120,11 +120,10 @@ public ProcessingContext() {} * @param interval the timer interval * @param timerType the timer type * @param timerHandler the time handler callback - * @param the type of the digital twin * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); /** * Stops the specified timer. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java index 26711fd..6141e57 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java @@ -16,7 +16,7 @@ package com.scaleoutsoftware.digitaltwin.abstractions; /** - * Marks a message as Delivered or not Delivered + * Marks a message as Handled, Enqueued, or Not Handled */ public enum SendingResult { /** diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java index a2b4340..8a0b5f2 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java @@ -76,7 +76,7 @@ public interface SimulationController { * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} * if the delay was not processed. */ - SendingResult delay(Duration duration); + void delay(Duration duration); /** *

            @@ -90,7 +90,7 @@ public interface SimulationController { * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} * if the delay was not processed. */ - SendingResult delayIndefinitely(); + void delayIndefinitely(); /** *

            @@ -113,7 +113,7 @@ public interface SimulationController { * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. * @param the type of the digital twin to create. */ - CompletableFuture createInstance(String modelName, String instanceId, T base); + > CompletableFuture createInstance(String modelName, String instanceId, T base); /** * Create a new digital twin instance for simulation processing from a persistence store. @@ -143,7 +143,7 @@ public interface SimulationController { * * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. * @param the type of the digital twin to create. */ - CompletableFuture createInstanceFromPersistenceStore(String model, String id, T def); + > CompletableFuture createInstanceFromPersistenceStore(String model, String id, T def); /** * Delete and remove a digital twin instance from simulation processing. @@ -164,8 +164,7 @@ public interface SimulationController { * Run this instance during this simulation step. The instance will be run using the models {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)} * implementation. * - * This will cause the simulation sub-system to run this instance regardless of the instances current - * {@link DigitalTwinBase#NextSimulationTime}. + * This will cause the simulation sub-system to run this instance during the current simulation step. */ void runThisInstance(); diff --git a/Development/build.bat b/Development/build.bat new file mode 100644 index 0000000..f8a5f33 --- /dev/null +++ b/Development/build.bat @@ -0,0 +1,8 @@ +rem ******************** +rem * Requirements * +rem ******************** +rem * Java JDK 8 +rem * MVN 3.x +SET JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.452.9-hotspot +SET MVN_HOME=C:\JavaBuildTools\apache-maven-3.9.8 +call mvn clean package install \ No newline at end of file diff --git a/Development/pom.xml b/Development/pom.xml index 69ded9a..a1b585c 100644 --- a/Development/pom.xml +++ b/Development/pom.xml @@ -6,7 +6,7 @@ com.scaleoutsoftware.digitaltwin development - 4.0.0 + 1.0-SNAPSHOT 8 diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java index 92e678b..f3bbbf8 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -19,7 +19,6 @@ import java.nio.charset.StandardCharsets; import java.util.Date; -import java.util.Objects; class SimulationEventTwinImpl extends SimulationEvent { SimulationProcessor _processor; @@ -41,7 +40,7 @@ SimulationEventResult processSimulationEvent(ProcessingContext context, Date cur DigitalTwinBase base = _proxy.getInstance(); synchronized (_proxy) { WorkbenchProcessingContext wpc = (WorkbenchProcessingContext)context; - wpc.resetInstance(base); + wpc.resetProxy(_proxy); _processor.processModel(wpc, base, currentTime); _proxy.setInstance(base); } @@ -63,9 +62,6 @@ void setProxyState(ProxyState newState) { @Override void handleResetNextSimulationTime() { - DigitalTwinBase base = _proxy.getInstance(); - base.NextSimulationTime = _nextSimulationTime; - _proxy.setInstance(base); } @Override diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index bc35f73..d49e4ee 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -28,9 +28,9 @@ class TwinExecutionEngine implements Closeable { private List _modelNames; - private ConcurrentHashMap> _digitalTwins; - private ConcurrentHashMap _messageProcessors; - private ConcurrentHashMap _simulationProcessors; + private ConcurrentHashMap>> _digitalTwins; + private ConcurrentHashMap> _messageProcessors; + private ConcurrentHashMap> _simulationProcessors; private ConcurrentHashMap> _modelInstances; private ConcurrentHashMap> _alertProviders; private ConcurrentHashMap> _modelsSharedData; @@ -245,13 +245,13 @@ public void recordAlertMessage(String model, String alertProvider, AlertMessage } public void createInstance(String modelName, String id, DigitalTwinBase instance) { - TwinProxy proxy = new TwinProxy(instance); + TwinProxy proxy = new TwinProxy(instance, new HashMap<>()); ConcurrentHashMap modelInstances = _modelInstances.get(modelName); if(modelInstances == null) { modelInstances = new ConcurrentHashMap<>(); } modelInstances.put(id, proxy); - InitContext initContext = new WorkbenchInitContext(this, instance, modelName, id); + InitContext initContext = new WorkbenchInitContext<>(this, proxy, modelName, id); instance.init(initContext); SimulationScheduler scheduler = _simulationSchedulers.get(modelName); if(scheduler != null) { @@ -283,9 +283,9 @@ ProcessingResult run(String model, String id, String source, byte[] message) thr throw new WorkbenchException(String.format("DigitalTwin model \"%s\" does not exist on this workbench.", model)); } instance = dtClazz.getConstructor().newInstance(); - InitContext initContext = new WorkbenchInitContext(this, instance, model, id); + InitContext initContext = new WorkbenchInitContext(this, proxy, model, id); instance.init(initContext); - proxy = new TwinProxy(instance); + proxy = new TwinProxy(instance, new HashMap<>()); SimulationScheduler scheduler = _simulationSchedulers.get(model); if(scheduler != null) { proxy.setProxyState(ProxyState.Active); @@ -304,7 +304,7 @@ ProcessingResult run(String model, String id, String source, byte[] message) thr simulationController = new WorkbenchSimulationController(this, scheduler); } WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController); - context.reset(model, id, source, instance); + context.reset(model, id, source, proxy); if(simulationController != null) { simulationController.reset(model, id); } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java index dcc9216..78b3c1c 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java @@ -16,13 +16,20 @@ package com.scaleoutsoftware.digitaltwin.development; import com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase; +import com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata; + +import java.util.HashMap; class TwinProxy { - private DigitalTwinBase _instance; - private ProxyState _state; - public TwinProxy(DigitalTwinBase instance) { - _instance = instance; - _state = ProxyState.Unspecified; + private DigitalTwinBase _instance; + private ProxyState _state; + private long _nextSimulationTime; + private HashMap> _timerHandlers; + public TwinProxy(DigitalTwinBase instance, HashMap> timerHandlers) { + _instance = instance; + _timerHandlers = timerHandlers; + _state = ProxyState.Unspecified; + _nextSimulationTime = 0L; } void setProxyState(ProxyState state) { @@ -41,6 +48,10 @@ public void setInstance(DigitalTwinBase instance) { _instance = instance; } + HashMap> getTimerHandlers() { + return _timerHandlers; + } + @Override public String toString() { return "TwinProxy{" + diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index aa07539..fa3cf89 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -291,7 +291,7 @@ public Workbench(int numSimulationWorkers) { * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message * processor must be serializable, and the digital twin implementation must have a parameterless constructor). */ - public void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { + public ,V> void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { if(modelName == null || modelName.isEmpty() || digitalTwinMessageProcessor == null || dtType == null) { String errorMessage = String.format("modelName null: %b messageProcessor null: %b dtType null: %b",modelName == null, digitalTwinMessageProcessor == null, dtType == null); throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); @@ -313,7 +313,7 @@ public void addRealTimeModel(String modelName, Mes * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message * processor must be serializable, and the digital twin implementation must have a parameterless constructor). */ - public void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType) throws WorkbenchException { + public ,V> void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType) throws WorkbenchException { if(modelName == null || modelName.isEmpty() || digitalTwinMessageProcessor == null || simulationProcessor == null || dtType == null) { String errorMessage = String.format("modelName null: %b messageProcessor null: %b simulationProcessor null: %b dtType null: %b",modelName == null, digitalTwinMessageProcessor == null, simulationProcessor == null, dtType == null); throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); @@ -333,7 +333,7 @@ public void addSimulationModel(String modelName, M * @param instance the real-time or simulation instance. * @throws WorkbenchException If the model does not exist or if a simulation is already running. */ - public void addInstance(String modelName, String id, DigitalTwinBase instance) throws WorkbenchException { + public > void addInstance(String modelName, String id, V instance) throws WorkbenchException { if(_simulationStarted) throw new WorkbenchException("Cannot add new instance while simulation is active."); if(!_twinExecutionEngine.hasModel(modelName)) throw new WorkbenchException("The model does not exist on this workbench."); _twinExecutionEngine.createInstance(modelName, id, instance); @@ -593,7 +593,7 @@ public SendingResult send(String modelName, String id, byte[] message) throws Wo return SendingResult.Handled; } - static void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { + static , V> void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { try { Class mpType = digitalTwinMessageProcessor.getClass(); // instantiate TwinInstance @@ -630,7 +630,11 @@ public void addGlobalModelData(String key, byte[] value) { } @Override - public void close() throws Exception { - _twinExecutionEngine.close(); + public void close() { + try { + _twinExecutionEngine.close(); + } catch (Exception e) { + } + } } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java index 9099198..094bce5 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -19,22 +19,22 @@ import java.time.Duration; -class WorkbenchInitContext extends InitContext { +class WorkbenchInitContext> extends InitContext { TwinExecutionEngine _twinExecutionEngine; - DigitalTwinBase _instance; + TwinProxy _proxy; String _model; String _id; - WorkbenchInitContext(TwinExecutionEngine twinExecutionEngine, DigitalTwinBase instance, String model, String id) { + WorkbenchInitContext(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id) { _twinExecutionEngine = twinExecutionEngine; - _instance = instance; + _proxy = proxy; _model = model; _id = id; } @Override - public TimerActionResult startTimer(String timerName, Duration duration, TimerType timerType, TimerHandler timerHandler) { - return WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_instance, _model, _id, timerName, duration, timerType, timerHandler); + public TimerActionResult startTimer(String timerName, Duration duration, TimerType timerType, TimerHandler timerHandler) { + return WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, duration, timerType, timerHandler); } @Override diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index cd57d4a..2a0bd2e 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -15,23 +15,19 @@ */ package com.scaleoutsoftware.digitaltwin.development; -import com.google.gson.Gson; - import com.scaleoutsoftware.digitaltwin.abstractions.*; -import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; -import java.util.concurrent.Callable; import java.util.concurrent.CompletableFuture; import java.util.logging.Level; -class WorkbenchProcessingContext extends ProcessingContext { +class WorkbenchProcessingContext> extends ProcessingContext { final TwinExecutionEngine _twinExecutionEngine; String _model; String _id; String _source; - DigitalTwinBase _twinInstance; + TwinProxy _proxy; SimulationController _controller; HashMap _modelData; HashMap _globalData; @@ -49,10 +45,10 @@ class WorkbenchProcessingContext extends ProcessingContext { _controller = controller; } - void reset(String model, String id, String source, DigitalTwinBase instance) { + void reset(String model, String id, String source, TwinProxy proxy) { _model = model; _id = id; - _twinInstance = instance; + _proxy = proxy; _forceSave = false; _source = source; _modelData = _twinExecutionEngine.getModelData(model); @@ -68,8 +64,8 @@ void reset(String model, String id, String source) { _globalData = _twinExecutionEngine.getGlobalSharedData(); } - void resetInstance(DigitalTwinBase instance) { - _twinInstance = instance; + void resetProxy(TwinProxy proxy) { + _proxy = proxy; } boolean forceSave() { @@ -124,14 +120,14 @@ public String getDigitalTwinModel() { } @Override - public CompletableFuture sendUIAlert(Level level, String msg) { + public CompletableFuture logMessage(Level level, String msg) { _twinExecutionEngine.logMessage(_model, new LogMessage(level, msg)); return CompletableFuture.completedFuture(null); } @Override - public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { - TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_twinInstance, _model, _id, timerName, interval, timerType, timerHandler); + public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { + TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, interval, timerType, timerHandler); if(ret != TimerActionResult.Success) { _forceSave = false; } else { @@ -142,7 +138,7 @@ public TimerActionResult startTimer(String timerName @Override public TimerActionResult stopTimer(String timerName) { - TimerActionResult ret = WorkbenchTimerService.stopTimer(_twinExecutionEngine, _twinInstance, _model, _id, timerName); + TimerActionResult ret = WorkbenchTimerService.stopTimer(_twinExecutionEngine, _proxy, _model, _id, timerName); if(ret != TimerActionResult.Success) { _forceSave = false; } else { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index 74a1226..1ab6e9a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -51,17 +51,15 @@ public Date getSimulationStartTime() { } @Override - public SendingResult delay(Duration duration) { + public void delay(Duration duration) { _requestedDelay = duration.toMillis(); _delayRequested = true; - return SendingResult.Handled; } @Override - public SendingResult delayIndefinitely() { + public void delayIndefinitely() { _requestedDelay = 0x0000e677d21fdbffL; _delayRequested = true; - return SendingResult.Handled; } @Override @@ -75,7 +73,7 @@ public CompletableFuture emitTelemetry(String modelName, byte[] m } @Override - public CompletableFuture createInstance(String modelName, String id, T instance) { + public > CompletableFuture createInstance(String modelName, String id, T instance) { try { _engine.createInstance(modelName, id, instance); return CompletableFuture.completedFuture(SendingResult.Handled); @@ -94,7 +92,7 @@ public CompletableFuture createInstanceFromPersistenceStore(Strin } @Override - public CompletableFuture createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { + public > CompletableFuture createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { try { throw new NoSuchMethodException("Not available on the workbench."); } catch (NoSuchMethodException e) { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index 1e96a7d..02b95ec 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -21,7 +21,7 @@ class WorkbenchTimerService { - static TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { + static TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { if(timerName == null || timerName.isEmpty() || interval == null || interval.isZero() || interval.isNegative() || timerType == null || timerHandler == null) { String msg = String.format("Empty, blank, zero, or null parameter provided: timerName %s interval %s timerType %s timerHandler %s", @@ -29,16 +29,16 @@ static TimerActionResult startTimer(TwinExecutionEng throw new IllegalArgumentException(msg); } - if (instance.TimerHandlers.size() >= Constants.MAX_TIMER_COUNT) // all timer slots are occupied + if (proxy.getTimerHandlers().size() >= Constants.MAX_TIMER_COUNT) // all timer slots are occupied return TimerActionResult.FailedTooManyTimers; - if(instance.TimerHandlers.containsKey(timerName)) return TimerActionResult.FailedTimerAlreadyExists; + if(proxy.getTimerHandlers().containsKey(timerName)) return TimerActionResult.FailedTimerAlreadyExists; int timerId = -1; boolean[] taken = new boolean[Constants.MAX_TIMER_COUNT]; // List of all timer Ids - for (TimerMetadata md : instance.TimerHandlers.values()) { + for (TimerMetadata md : proxy.getTimerHandlers().values()) { taken[md.getTimerId()] = true; } @@ -52,13 +52,13 @@ static TimerActionResult startTimer(TwinExecutionEng twinExecutionEngine.addTimer(model, id, timerName, timerType, interval, timerHandler); TimerMetadata metadata = new TimerMetadata<>(timerHandler, timerType, interval.toMillis(), timerId); - instance.TimerHandlers.put(timerName, metadata); + proxy.getTimerHandlers().put(timerName, metadata); return TimerActionResult.Success; } - static TimerActionResult stopTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName) { + static TimerActionResult stopTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName) { twinExecutionEngine.stopTimer(model, id, timerName); - instance.TimerHandlers.remove(timerName); + proxy.getTimerHandlers().remove(timerName); return TimerActionResult.Success; } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java index 79ce6b7..3e30d9b 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java @@ -45,7 +45,7 @@ class WorkbenchTimerTask extends TimerTask { public void run() { DigitalTwinBase instance = _proxy.getInstance(); WorkbenchProcessingContext context = new WorkbenchProcessingContext(_engine, null); - context.reset(_modelName, _id, null, instance); + context.reset(_modelName, _id, null, _proxy); ProcessingResult result; synchronized (instance) { result = _handler.onTimedMessage(_timerName, instance, context); diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index a47ba6a..744a501 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -24,11 +24,12 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; +import java.util.concurrent.ExecutionException; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; public class TestWorkbench { - public static class SimpleDigitalTwin extends DigitalTwinBase { + public static class SimpleDigitalTwin extends DigitalTwinBase { private String _stringProp; public SimpleDigitalTwin() {} public SimpleDigitalTwin(String stringProp) { @@ -51,7 +52,7 @@ public static class SimpleMessageProcessor extends MessageProcessor processingContext, SimpleDigitalTwin instance, byte[] message) throws ExecutionException, InterruptedException { Gson gson = new Gson(); Date currentTime = processingContext.getCurrentTime(); PersistenceProvider provider = processingContext.getPersistenceProvider(); @@ -81,9 +82,9 @@ public ProcessingResult processMessage(ProcessingContext processingContext, Simp break; case "StartTimer": processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, - new TimerHandler() { + new TimerHandler() { @Override - public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { + public ProcessingResult onTimedMessage(String s, SimpleDigitalTwin simpleDigitalTwin, ProcessingContext processingContext) { System.out.println("Hello from real-time timer."); return ProcessingResult.UpdateDigitalTwin; } @@ -94,33 +95,33 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase break; case "SharedData": SharedData sharedData = processingContext.getSharedModelData(); - CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); + CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)).get(); if(result.getStatus() == CacheOperationStatus.ObjectPut) { System.out.println("Successfully stored object in model storage."); } - result = sharedData.get("Hello"); + result = sharedData.get("Hello").get(); if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); } - result = sharedData.remove("Hello"); + result = sharedData.remove("Hello").get(); if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); } - result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)); + result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)).get(); sharedData = processingContext.getSharedGlobalData(); - result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); + result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)).get(); if(result.getStatus() == CacheOperationStatus.ObjectPut) { System.out.println("Successfully stored object in global storage."); } - result = sharedData.get("Hello"); + result = sharedData.get("Hello").get(); if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); } - result = sharedData.remove("Hello"); + result = sharedData.remove("Hello").get(); if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); } - result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)); + result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)).get(); break; case "WakeUp": SimulationController controller = processingContext.getSimulationController(); @@ -136,7 +137,7 @@ public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase } } - public static class RealTimeCar extends DigitalTwinBase { + public static class RealTimeCar extends DigitalTwinBase { private int _tirePressure; public RealTimeCar() { _tirePressure=0; } public RealTimeCar(int startingTirePressure) { @@ -166,7 +167,7 @@ public int getPressureChange() { public static class RealTimeCarMessageProcessor extends MessageProcessor implements Serializable { final int TIRE_PRESSURE_FULL = 100; @Override - public ProcessingResult processMessage(ProcessingContext processingContext, RealTimeCar car, byte[] message) throws Exception { + public ProcessingResult processMessage(ProcessingContext processingContext, RealTimeCar car, byte[] message) throws Exception { Gson gson = new Gson(); TirePressureMessage msg = gson.fromJson(new String(message, StandardCharsets.UTF_8), TirePressureMessage.class); // apply the updates from the messages @@ -178,7 +179,7 @@ public ProcessingResult processMessage(ProcessingContext processingContext, Real } } - public static class SimulationPump extends DigitalTwinBase { + public static class SimulationPump extends DigitalTwinBase { private double _tirePressureChange; private boolean _tirePressureReached = false; public SimulationPump() {} @@ -771,11 +772,11 @@ public void TestWorkbenchSharedData() throws Exception { workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); byte[] message = gson.toJson(new SimpleMessage("SharedData", 29)).getBytes(StandardCharsets.UTF_8); workbench.send("Simple", "23", message); - CacheResult result = workbench.getSharedModelData("Simple").get("modelTest"); + CacheResult result = workbench.getSharedModelData("Simple").get("modelTest").get(); Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); Assert.assertEquals("modelTest", result.getKey()); Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); - result = workbench.getSharedGlobalData().get("globalTest"); + result = workbench.getSharedGlobalData().get("globalTest").get(); Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); Assert.assertEquals("globalTest", result.getKey()); Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); From ce943896c0726e6e1cb4844fa8e97a1e2e9a333c Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 12 Mar 2026 12:57:23 -0700 Subject: [PATCH 17/35] Update all headers + purge warnings from abstractions --- .../digitaltwin/abstractions/AlertMessage.java | 2 +- .../abstractions/AlertProviderConfiguration.java | 3 ++- .../abstractions/AzureDigitalTwinsProvider.java | 2 +- .../abstractions/CacheOperationStatus.java | 2 +- .../digitaltwin/abstractions/CacheResult.java | 2 +- .../digitaltwin/abstractions/DigitalTwinBase.java | 2 +- .../abstractions/DigitalTwinTimerMessage.java | 2 +- .../digitaltwin/abstractions/InitContext.java | 2 +- .../abstractions/InitSimulationContext.java | 15 +++++++++++++++ .../abstractions/MessageProcessor.java | 2 +- .../digitaltwin/abstractions/ModelSchema.java | 2 +- .../abstractions/PersistenceProviderType.java | 2 +- .../abstractions/ProcessingContext.java | 5 +++-- .../abstractions/ProcessingResult.java | 2 +- .../digitaltwin/abstractions/SendingResult.java | 2 +- .../digitaltwin/abstractions/SharedData.java | 2 +- .../abstractions/SimulationController.java | 2 +- .../abstractions/SimulationProcessor.java | 8 ++++---- .../abstractions/SimulationStatus.java | 2 +- .../abstractions/TimerActionResult.java | 2 +- .../digitaltwin/abstractions/TimerHandler.java | 6 +++--- .../digitaltwin/abstractions/TimerMetadata.java | 4 ++-- .../digitaltwin/abstractions/TimerType.java | 2 +- .../digitaltwin/abstractions/package-info.java | 2 +- .../digitaltwin/development/Constants.java | 2 +- .../digitaltwin/development/LogMessage.java | 2 +- .../digitaltwin/development/ProxyState.java | 2 +- .../digitaltwin/development/SimulationEvent.java | 2 +- .../development/SimulationEventResult.java | 2 +- .../development/SimulationEventTimerImpl.java | 2 +- .../development/SimulationEventTwinImpl.java | 2 +- .../development/SimulationScheduler.java | 2 +- .../digitaltwin/development/SimulationStep.java | 2 +- .../development/SimulationStepArgs.java | 2 +- .../digitaltwin/development/SimulationTime.java | 2 +- .../digitaltwin/development/SimulationWorker.java | 2 +- .../development/TwinExecutionEngine.java | 2 +- .../digitaltwin/development/TwinProxy.java | 2 +- .../digitaltwin/development/Util.java | 15 +++++++++++++++ .../digitaltwin/development/Workbench.java | 2 +- .../development/WorkbenchException.java | 2 +- .../development/WorkbenchInitContext.java | 2 +- .../WorkbenchInitSimulationContext.java | 2 +- .../development/WorkbenchProcessingContext.java | 2 +- .../development/WorkbenchSharedData.java | 2 +- .../WorkbenchSimulationController.java | 2 +- .../development/WorkbenchSimulationFlags.java | 2 +- .../development/WorkbenchTimerService.java | 4 ++-- .../development/WorkbenchTimerTask.java | 2 +- .../digitaltwin/development/package-info.java | 2 +- .../digitaltwin/development/TestWorkbench.java | 3 +-- 51 files changed, 89 insertions(+), 58 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java index 8b4b910..f622cba 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java index b3f2895..4dc9896 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,6 +21,7 @@ * Configuration for an alert provider. */ public class AlertProviderConfiguration implements Serializable { + private static final long serialVersionUID = 1L; /** * The alert provider type. */ diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java index 67abb67..5557f62 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java index 7bc8b29..820ebf8 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java index 4e36746..5a99d65 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java index b99ea3a..ae72580 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java index 3b0ceea..b0d2f9a 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java index a513665..c3d341c 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java index 3961b65..df0d5d4 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.java @@ -1,3 +1,18 @@ +/* + Copyright (c) 2026 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ package com.scaleoutsoftware.digitaltwin.abstractions; import java.util.Date; diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java index 4849612..1392203 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java index d576f20..f568828 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java index ecf0b53..a35b079 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index 6f88e68..70d7ad0 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -25,7 +25,8 @@ * Context object that allows the user to send a message to a DataSource. * the type of the digital twin */ -public abstract class ProcessingContext implements Serializable { +public abstract class ProcessingContext> implements Serializable { + private static final long serialVersionUID = 1L; /** * Default constructor. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java index 0a740c1..90521cc 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java index 6141e57..dfd1f01 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java index 4b7dd9f..088b2f4 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java index 8a0b5f2..8f5f27c 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java index dad11e2..2ac8fae 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -22,8 +22,8 @@ * Processes simulation events for a digital twin. * @param the type of the digital twin. */ -public abstract class SimulationProcessor implements Serializable { - +public abstract class SimulationProcessor> implements Serializable { + private static final long serialVersionUID = 1L; /** * Default constructor. */ @@ -37,7 +37,7 @@ public SimulationProcessor() {} * @return {@link ProcessingResult#UpdateDigitalTwin} to update the digital twin, or * {@link ProcessingResult#NoUpdate} to ignore the changes. */ - public abstract ProcessingResult processModel(ProcessingContext context, T instance, Date epoch); + public abstract ProcessingResult processModel(ProcessingContext context, T instance, Date epoch); /** *

            diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java index 943386b..11e6d0b 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java index d7f2a76..df1f203 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java index f5c0cf0..337ca61 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ * Callback to a handle a timer message for a {@link DigitalTwinBase}. * @param the type of the {@link DigitalTwinBase}. */ -public interface TimerHandler { +public interface TimerHandler> { /** * Callback to handle a timer message. @@ -29,5 +29,5 @@ public interface TimerHandler { * @return {@link ProcessingResult#UpdateDigitalTwin} to update the digital twin instance or * {@link ProcessingResult#NoUpdate} to leave the instance state as is. */ - public ProcessingResult onTimedMessage(String timerName, T instance, ProcessingContext ctx); + public ProcessingResult onTimedMessage(String timerName, T instance, ProcessingContext ctx); } diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java index 98662f4..191dc29 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -19,7 +19,7 @@ * Metadata class for a timer. * @param the type of the {@link DigitalTwinBase} implementation. */ -public class TimerMetadata { +public class TimerMetadata> { final String timerHandler; final TimerType timerType; final long timerIntervalMs; diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java index d3f4c21..e7ef13e 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java index 53c1b23..956efa9 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/package-info.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java index 5948de6..0e69eab 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java index 4708e20..8990d1d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java index 0dd7e68..2b97438 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java index 4de9597..7bc8af7 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java index f917da6..deb5d75 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java index b0a8544..6824686 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java index f3bbbf8..ddea566 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java index 244d1c3..1c2ad82 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java index f237771..6d9489c 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java index c65ad79..76ab354 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java index e09c0e7..7bbe1b5 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java index 0917624..f0b84bf 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index d49e4ee..0d718ea 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java index 78b3c1c..9d5cda4 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java index 9327844..5dd373c 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java @@ -1,3 +1,18 @@ +/* + Copyright (c) 2026 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ package com.scaleoutsoftware.digitaltwin.development; import java.util.ArrayList; diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index fa3cf89..74dab4b 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java index b983f6c..f529ac0 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java @@ -19,7 +19,7 @@ * A Workbench exception indicates that a real-time or simulated twin caused an exception. */ public class WorkbenchException extends Exception { - + private static final long serialVersionUID = 1L; /** * The string message for this workbench exception. */ diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java index 094bce5..0bd8815 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java index a019b6e..4526ae3 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index 2a0bd2e..6a192b6 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -105,7 +105,7 @@ public CompletableFuture sendAlert(String alertProviderName, Aler } @Override - public PersistenceProvider getPersistenceProvider() { + public AzureDigitalTwinsProvider getAzureDigitalTwinsProvider() { return null; } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java index 6796b15..a6ea640 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index 1ab6e9a..2546c39 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java index 4e7acff..b8da409 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index 02b95ec..eb78740 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -21,7 +21,7 @@ class WorkbenchTimerService { - static TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { + static > TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { if(timerName == null || timerName.isEmpty() || interval == null || interval.isZero() || interval.isNegative() || timerType == null || timerHandler == null) { String msg = String.format("Empty, blank, zero, or null parameter provided: timerName %s interval %s timerType %s timerHandler %s", diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java index 3e30d9b..e725b63 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java index c8df4a2..61ac790 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 744a501..42a5898 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -1,5 +1,5 @@ /* - Copyright (c) 2025 by ScaleOut Software, Inc. + Copyright (c) 2026 by ScaleOut Software, Inc. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -55,7 +55,6 @@ public SimpleMessageProcessor() {} public ProcessingResult processMessage(ProcessingContext processingContext, SimpleDigitalTwin instance, byte[] message) throws ExecutionException, InterruptedException { Gson gson = new Gson(); Date currentTime = processingContext.getCurrentTime(); - PersistenceProvider provider = processingContext.getPersistenceProvider(); if(processingContext.getDigitalTwinModel().compareTo(instance.getModel()) != 0) { throw new IllegalStateException(String.format("context.getModel and instance.getModel difer. %s:%s", processingContext.getDigitalTwinModel(), instance.getModel())); } From 8701fa2f1477cd90dc9953bcb865bbe4777a7b0c Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 13 Mar 2026 10:57:40 -0700 Subject: [PATCH 18/35] Update pom.xml to show warnings --- Abstractions/pom.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/Abstractions/pom.xml b/Abstractions/pom.xml index fbd45f4..8ac3d65 100644 --- a/Abstractions/pom.xml +++ b/Abstractions/pom.xml @@ -11,4 +11,20 @@ UTF-8 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + none + true + + -Xlint:all + + + + + \ No newline at end of file From fbea455121cbe3735fa6abfdfbfa701864a8b5a8 Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 17 Mar 2026 15:39:48 -0700 Subject: [PATCH 19/35] Updates for Alert Providers --- .../AlertProviderConfiguration.java | 129 --- .../digitaltwin/abstractions/ModelSchema.java | 788 ------------------ .../abstractions/PersistenceProviderType.java | 139 --- .../abstractions/ProcessingContext.java | 16 +- .../development/TwinExecutionEngine.java | 8 +- .../digitaltwin/development/Workbench.java | 6 +- .../development/TestWorkbench.java | 6 +- 7 files changed, 13 insertions(+), 1079 deletions(-) delete mode 100644 Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java delete mode 100644 Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java delete mode 100644 Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java deleted file mode 100644 index 4dc9896..0000000 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertProviderConfiguration.java +++ /dev/null @@ -1,129 +0,0 @@ -/* - Copyright (c) 2026 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.abstractions; - -import java.io.Serializable; - -/** - * Configuration for an alert provider. - */ -public class AlertProviderConfiguration implements Serializable { - private static final long serialVersionUID = 1L; - /** - * The alert provider type. - */ - final String alertProviderType; - /** - * The required url for the alert provider type. - */ - final String url; - /** - * The required integration key for the alert provider type. - */ - final String integrationKey; - /** - * The required routing key for the alert provider type. - */ - final String routingKey; - /** - * The name of this alert provider. - */ - final String name; - /** - * The entity ID of this alert provider type. - */ - final String entityId; - - private AlertProviderConfiguration() {alertProviderType = url = integrationKey = routingKey = name = entityId = null;} - - /** - * Construct an alert provider configuration. - * @param alertProviderType the alert provider type. - * @param url the alert provider URL where alerts should be posted. - * @param integrationKey the integration key. - * @param routingKey the routing key. - * @param name the name of the alert provider. - * @param entityId the entity Id. - */ - public AlertProviderConfiguration(String alertProviderType, String url, String integrationKey, String routingKey, String name, String entityId) { - this.alertProviderType = alertProviderType; - this.url = url; - this.integrationKey = integrationKey; - this.routingKey = routingKey; - this.name = name; - this.entityId = entityId; - } - - /** - * Retrieve the alert provider type for this configuration. - * @return the alert provider type. - */ - public String getAlertProviderType() { - return alertProviderType; - } - - /** - * Retrieve the URL for this alert provider configuration. - * @return the URL for this alert provider configuration. - */ - public String getURL() { - return url; - } - - /** - * Retrieve the integration key for this alert provider configuration. - * @return the integration key for this alert provider configuration. - */ - public String getIntegrationKey() { - return integrationKey; - } - - /** - * Retrieve the routing key for this alert provider configuration. - * @return the routing key for this alert provider configuration. - */ - public String getRoutingKey() { - return routingKey; - } - - /** - * Retrieve the name of this alert provider configuration. - * @return the name of this alert provider configuration. - */ - public String getName() { - return name; - } - - /** - * Retrieve the entity ID for this alert provider configuration. - * @return the entity ID for this alert provider configuration. - */ - public String getEntityId() { - return entityId; - } - - @Override - public String toString() { - return "AlertProviderConfiguration{" + - "alertProviderType=" + alertProviderType + '\'' + - ", URL='" + url + '\'' + - ", IntegrationKey='" + integrationKey + '\'' + - ", RoutingKey='" + routingKey + '\'' + - ", Name='" + name + '\'' + - ", EntityId='" + entityId + '\'' + - '}'; - } -} diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java deleted file mode 100644 index f568828..0000000 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ModelSchema.java +++ /dev/null @@ -1,788 +0,0 @@ -/* - Copyright (c) 2026 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.abstractions; - -import java.util.List; - -/** - * The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - * digital twin model to the real-time digital twin cloud service. - */ -public class ModelSchema { - private final String modelType; - private final String messageProcessorType; - private final String simulationProcessorType; - private final String messageType; - private final String assemblyName; - private final String entryPoint; - private final String azureDigitalTwinModelName; - private final String persistenceProvider; - private final boolean enablePersistence; - private final boolean enableSimulationSupport; - private final boolean enableMessageRecording; - private final List alertProviders; - - private ModelSchema() { - modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = entryPoint = azureDigitalTwinModelName = persistenceProvider = null; - enablePersistence = false; - enableSimulationSupport = false; - enableMessageRecording = false; - alertProviders = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, and a message class. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = false; - persistenceProvider = null; - } - - /** - * Model schema with a defined entry point. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param ep the invocation grid entry point. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String ep) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = false; - persistenceProvider = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, and a message class. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = emr; - persistenceProvider = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, and a message class. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param ep the invocation grid entry point. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String ep, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = emr; - persistenceProvider = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = false; - persistenceProvider = null; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = false; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param ep the invocation grid entry point. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = false; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param alertingProviders the alerting provider configurations. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = emr; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param alertingProviders the alerting provider configurations. - * @param ep the invocation grid entry point. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = emr; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - enableMessageRecording = false; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - case CosmosDb: - case Warp10: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - enableMessageRecording = emr; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, - * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - * and an alert provider configuration. - * - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param simulationProcessorClass the simulation processor class implementation. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = simulationProcessorClass; - enableSimulationSupport = true; - enableMessageRecording = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, - * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - * and an alert provider configuration. - * - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param simulationProcessorClass the simulation processor class implementation. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = simulationProcessorClass; - enableSimulationSupport = true; - enableMessageRecording = emr; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - case CosmosDb: - case Warp10: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, - * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - * and an alert provider configuration. - * - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param simulationProcessorClass the simulation processor class implementation. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - * @param ep the invocation grid entry point. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - String ep, - PersistenceProviderType persistenceType, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = simulationProcessorClass; - enableSimulationSupport = true; - enableMessageRecording = emr; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - case CosmosDb: - case Warp10: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Retrieve the digital twin model type (a {@link DigitalTwinBase} implementation). - * @return the model type. - */ - public String getModelType() { - return modelType; - } - - /** - * Retrieve the message type (JSON serializable message implementation). - * @return the message type. - */ - public String getMessageType() { - return messageType; - } - - /** - * Retrieve the message processor type (a {@link MessageProcessor} implementation). - * @return the message processor type. - */ - public String getMessageProcessorType() { - return messageProcessorType; - } - - /** - * Retrieve the simulation processor type (a {@link SimulationProcessor} implementation). - * @return the simulation processor type. - */ - public String getSimulationProcessorType() { - return simulationProcessorType; - } - - /** - * NOT USED BY JAVA MODEL SCHEMA - * @return NOT USED BY JAVA MODEL SCHEMA - */ - public String getAssemblyName() { - return assemblyName; - } - - /** - * Retrieve the alert provider configurations. - * @return the alert provider configurations. - */ - public List getAlertProviders() {return alertProviders; } - - /** - * Retrieve the Azure Digital Twin model name. - * @return the Azure Digital Twin model name. - */ - public String getAzureDigitalTwinModelName() { - return azureDigitalTwinModelName; - } - - /** - * Retrieve persistence status. True if persistence is enabled, false otherwise. - * @return True if persistence is enabled, false otherwise. - */ - public boolean persistenceEnabled() { return enablePersistence; } - - /** - * Retrieve simulation support enabled status. True if simulation support is enabled, false otherwise. - * @return True if simulation support is enabled, false otherwise. - */ - public boolean simulationSupportEnabled() {return enableSimulationSupport;} - - /** - * Retrieve the persistence provider type. - * @return the persistence provider type. - */ - public PersistenceProviderType getPersistenceProvider() { return PersistenceProviderType.fromString(persistenceProvider); } - - /** - * Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, - * false otherwise. - * @return True if message recording is enabled, false otherwise. - */ - public boolean messageRecordingEnabled() { - return enableMessageRecording; - } - - /** - * Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching. - * @return the entry point for launching. - */ - public String getEntryPoint() { - return entryPoint; - } -} diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java deleted file mode 100644 index a35b079..0000000 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/PersistenceProviderType.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - Copyright (c) 2026 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.abstractions; - -import java.io.Serializable; - -/** - * Available PersistenceProvider types configured through the UI. - */ -public enum PersistenceProviderType implements Serializable { - - /** - * Enum for the Azure Digital Twin service. - */ - AzureDigitalTwinsService("AzureDigitalTwinsService", 1), - /** - * Enum for CosmosDB - */ - CosmosDb("Azure Cosmos DB", 6), - - /** - * Enum for DynamoDB - */ - DynamoDb("DynamoDB", 5), - /** - * Enum for SQLite - */ - SQLite("SQLite", 4), - /** - * Enum for SQLServer - */ - SQLServer("SQLServer", 3), - - /** - * Enum for SenX Warp10 - */ - Warp10("Warp10", 7), - - /** - * Enum for an unconfigured PersistenceProvider - */ - Unconfigured("", 0); - - private final String _name; - private final int _value; - PersistenceProviderType(String name, int ordinal) { - _name = name; - _value = ordinal; - } - - - /** - * Retrieve the name of the persistence provider type. - * @return the name of the persistence provider type. - */ - public String getName() { - return _name; - } - - /** - * Retrieve the ordinal value (used by the DTBuidler service). - * @return the ordinal value. - */ - public int getServiceOrdinalValue() { - return _value; - } - - /** - * Return the PersistenceProviderType from a string value. We do not rely on Java's naming - * because the string values need to be cross-platform and the names may be different in each language. - * @param name the enums name. - * @return the associated PersistenceProviderType, or null if no association exists. - */ - public static PersistenceProviderType fromString(String name) { - if(name != null && !name.isEmpty()) { - switch(name) { - case "AzureDigitalTwinsService": - return AzureDigitalTwinsService; - case "SQLite": - return SQLite; - case "SQLServer": - return SQLServer; - case "DynamoDB": - return DynamoDb; - case "Azure Cosmos DB": - return CosmosDb; - case "Warp10": - return Warp10; - case "Default": - case "default": - return Unconfigured; - default: - return null; - } - } else { - return null; - } - } - - /** - * Return the PersistenceProviderType from an ordinal value. We do not rely on Java's ordering - * because the ordinal values need to be cross-platform, and the values may be ordered differently. - * @param ordinal the enums ordinal value. - * @return the associated PersistenceProviderType, or null if no association exists. - */ - public static PersistenceProviderType fromOrdinal(int ordinal) { - switch(ordinal) { - case 0: - return Unconfigured; - case 1: - return AzureDigitalTwinsService; - case 3: - return SQLServer; - case 4: - return SQLite; - case 5: - return DynamoDb; - case 6: - return CosmosDb; - case 7: - return Warp10; - default: - return null; - } - } -} diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index 70d7ad0..8595e48 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -66,26 +66,16 @@ public ProcessingContext() {} /** *

            - * This method sends an alert message to supported systems. + * This method sends an alert message to configured systems. *

            * *

            - * When a model is deployed, an optional alerting provider configuration can be supplied. The provider name corresponds - * to the name of the configured alerting provider. For example, if an alerting provider configuration is called - * "SREPod1", then the processing context will send an alert message to the alerting provider configured with the name - * "SREPod1". + * If the message cannot be sent then the returned CompletableFuture will complete exceptionally. *

            - * - *

            - * If the message cannot be sent then {@link SendingResult#NotHandled} will be returned. If the message is sent - * and in process of sending then {@link SendingResult#Enqueued} will be returned. Once the message is successfully sent - * then the returned enum will be changed to {@link SendingResult#Handled}. - *

            - * @param alertingProviderName the alerting provider name. Note, must match a valid configuration. * @param alert the alert message. * @return the sending result. */ - public abstract CompletableFuture sendAlert(String alertingProviderName, AlertMessage alert); + public abstract CompletableFuture sendAlert(AlertMessage alert); /** * Returns an {@link AzureDigitalTwinsProvider} or null if no AzureDigitalTwinsProvider configuration can be found. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 0d718ea..85b5e1d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -32,7 +32,7 @@ class TwinExecutionEngine implements Closeable { private ConcurrentHashMap> _messageProcessors; private ConcurrentHashMap> _simulationProcessors; private ConcurrentHashMap> _modelInstances; - private ConcurrentHashMap> _alertProviders; + private ConcurrentHashMap> _alertProviders; private ConcurrentHashMap> _modelsSharedData; private HashMap _globalSharedData; private Workbench _workbench; @@ -106,9 +106,9 @@ void stopTimer(String modelName, String id, String timerName) { } } - void addAlertProvider(String modelName, AlertProviderConfiguration configuration) { - ConcurrentHashMap configMap = new ConcurrentHashMap<>(); - configMap.put(configuration.getName(), configuration); + void addAlertProvider(String modelName, String configuration) { + ConcurrentHashMap configMap = _alertProviders.getOrDefault(modelName, new ConcurrentHashMap<>()); + configMap.put(configuration, configuration); _alertProviders.put(modelName, configMap); } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index 74dab4b..c5f7ad9 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -345,13 +345,13 @@ public > void addInstance(String modelName, String * {@link Workbench#initializeSimulation(long, long, long)} has been called. * * @param modelName the instances model. - * @param configuration the alert provider configuration. + * @param alertProviderName the alert provider configuration. * @throws WorkbenchException If the model does not exist or if a simulation is already running. */ - public void addAlertProvider(String modelName, AlertProviderConfiguration configuration) throws WorkbenchException { + public void addAlertProvider(String modelName, String alertProviderName) throws WorkbenchException { if(_simulationStarted) throw new WorkbenchException("Cannot add new alert provider while simulation is active."); if(!_twinExecutionEngine.hasModel(modelName)) throw new WorkbenchException("The model does not exist on this workbench."); - _twinExecutionEngine.addAlertProvider(modelName, configuration); + _twinExecutionEngine.addAlertProvider(modelName, alertProviderName); } /** diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 42a5898..9c2757e 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -265,7 +265,7 @@ public ProcessingResult onTimedMessage(String s, SimpleDigitalTwin digitalTwinBa processingContext.logMessage(Level.SEVERE, simpleDigitalTwin._stringProp); return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().contains("alert")) { - processingContext.sendAlert("alert", new AlertMessage(simpleDigitalTwin.getId(), simpleDigitalTwin.getId(), simpleDigitalTwin._stringProp)); + processingContext.sendAlert(new AlertMessage(simpleDigitalTwin.getId(), simpleDigitalTwin.getId(), simpleDigitalTwin._stringProp)); return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().contains("sleeper")) { if(simpleDigitalTwin._stringProp.compareTo("WakeUp") == 0) { @@ -693,7 +693,7 @@ public void TestWorkbenchSimulationAlertMessage() throws WorkbenchException { try (Workbench workbench = new Workbench()) { workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class); workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class); - workbench.addAlertProvider("SimSimple", new AlertProviderConfiguration("test", "www.url.com", "integrationkey", "routingKey", "alert", "entityId")); + workbench.addAlertProvider("SimSimple", "test"); String alertMessageContent = "this is an alert message"; String id = "alert"; @@ -708,7 +708,7 @@ public void TestWorkbenchSimulationAlertMessage() throws WorkbenchException { Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); Assert.assertEquals(stop, result.getTime()); Assert.assertEquals(exp, processor.getTimesInvoked()); - List messages = workbench.getAlertMessages("SimSimple", "alert"); + List messages = workbench.getAlertMessages("SimSimple", "test"); Assert.assertEquals(messages.size(), exp); for(AlertMessage msg : messages) { Assert.assertSame(msg.getMessage(), alertMessageContent); From f3e7bcd6b779819eed5bce9cce9e39f40ff6cef4 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 18 Mar 2026 17:23:40 -0700 Subject: [PATCH 20/35] Update init context/processing context to store true type information about timers --- .../digitaltwin/abstractions/InitContext.java | 2 +- .../abstractions/ProcessingContext.java | 2 +- .../abstractions/TimerMetadata.java | 19 +++++++++++++------ 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java index c3d341c..96a8f75 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java @@ -37,7 +37,7 @@ public InitContext() {} * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> timerHandlerClass); /** * Retrieve a {@link SharedData} accessor for this model's shared data. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index 8595e48..50365f3 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -114,7 +114,7 @@ public ProcessingContext() {} * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> timerHandlerClass); /** * Stops the specified timer. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java index 191dc29..1f84567 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java @@ -20,10 +20,11 @@ * @param the type of the {@link DigitalTwinBase} implementation. */ public class TimerMetadata> { - final String timerHandler; - final TimerType timerType; - final long timerIntervalMs; - final int timerId; + final String timerHandler; + final Class> handlerClass; + final TimerType timerType; + final long timerIntervalMs; + final int timerId; /** * Constructs a timer metadata. @@ -32,8 +33,9 @@ public class TimerMetadata> { * @param timerIntervalMs the timer interval. * @param timerIdx the timer index. */ - public TimerMetadata(TimerHandler handler, TimerType timerType, long timerIntervalMs, int timerIdx) { + public TimerMetadata(TimerHandler handler, Class> handlerClass, TimerType timerType, long timerIntervalMs, int timerIdx) { this.timerHandler = handler.getClass().getName(); + this.handlerClass = handlerClass; this.timerType = timerType; this.timerIntervalMs = timerIntervalMs; this.timerId = timerIdx; @@ -43,7 +45,7 @@ public TimerMetadata(TimerHandler handler, TimerType timerType, long timerInt * Retrieves the timer handler class name. * @return the timer handler class name. */ - public String getTimerHandlerClass() { + public String getTimerHandlerClassName() { return timerHandler; } @@ -70,4 +72,9 @@ public long getTimerIntervalMs() { public int getTimerId() { return timerId; } + + public Class> getHandlerClass() { + return handlerClass; + } + } From 51bdeb412f3e915e534b04adaf22491083307f65 Mon Sep 17 00:00:00 2001 From: Brandon Date: Tue, 24 Mar 2026 10:00:31 -0700 Subject: [PATCH 21/35] Update abstractions/development artifact id, update development for alert provider change --- Abstractions/pom.xml | 2 +- .../abstractions/AlertMessage.java | 2 +- .../digitaltwin/abstractions/InitContext.java | 2 +- .../abstractions/ProcessingContext.java | 2 +- .../abstractions/TimerMetadata.java | 14 ++++----- Development/pom.xml | 4 +-- .../development/TwinExecutionEngine.java | 16 +++++----- .../digitaltwin/development/Util.java | 7 +++++ .../digitaltwin/development/Workbench.java | 2 +- .../development/WorkbenchInitContext.java | 4 +-- .../WorkbenchProcessingContext.java | 18 +++++------- .../development/WorkbenchTimerService.java | 4 +-- .../development/TestWorkbench.java | 29 +++++++++---------- docs/digitaltwin-core-docs/build.gradle | 10 +++---- docs/digitaltwin-core-docs/settings.gradle | 2 +- 15 files changed, 58 insertions(+), 60 deletions(-) diff --git a/Abstractions/pom.xml b/Abstractions/pom.xml index 8ac3d65..5fb4677 100644 --- a/Abstractions/pom.xml +++ b/Abstractions/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.scaleoutsoftware.digitaltwin - abstractions + digitaltwin-abstractions 4.0.0 diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java index f622cba..df63f13 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.java @@ -26,7 +26,7 @@ public class AlertMessage { private final String _message; private final HashMap _optionalTwinInstanceProperties; - private AlertMessage() {_title = _severity = _message = null; _optionalTwinInstanceProperties = null;} + private AlertMessage() { _title = _severity = _message = null; _optionalTwinInstanceProperties = null;} /** * Construct an alert message with a title, severity, and custom message. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java index 96a8f75..9dc77de 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java @@ -37,7 +37,7 @@ public InitContext() {} * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> timerHandlerClass); + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> timerHandlerClass); /** * Retrieve a {@link SharedData} accessor for this model's shared data. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index 50365f3..b1c8f13 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -114,7 +114,7 @@ public ProcessingContext() {} * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> timerHandlerClass); + public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> timerHandlerClass); /** * Stops the specified timer. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java index 1f84567..3a7194a 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java @@ -20,11 +20,11 @@ * @param the type of the {@link DigitalTwinBase} implementation. */ public class TimerMetadata> { - final String timerHandler; - final Class> handlerClass; - final TimerType timerType; - final long timerIntervalMs; - final int timerId; + final String timerHandler; + final Class> handlerClass; + final TimerType timerType; + final long timerIntervalMs; + final int timerId; /** * Constructs a timer metadata. @@ -33,7 +33,7 @@ public class TimerMetadata> { * @param timerIntervalMs the timer interval. * @param timerIdx the timer index. */ - public TimerMetadata(TimerHandler handler, Class> handlerClass, TimerType timerType, long timerIntervalMs, int timerIdx) { + public TimerMetadata(TimerHandler handler, Class> handlerClass, TimerType timerType, long timerIntervalMs, int timerIdx) { this.timerHandler = handler.getClass().getName(); this.handlerClass = handlerClass; this.timerType = timerType; @@ -73,7 +73,7 @@ public int getTimerId() { return timerId; } - public Class> getHandlerClass() { + public Class> getHandlerClass() { return handlerClass; } diff --git a/Development/pom.xml b/Development/pom.xml index a1b585c..683c2b1 100644 --- a/Development/pom.xml +++ b/Development/pom.xml @@ -5,7 +5,7 @@ 4.0.0 com.scaleoutsoftware.digitaltwin - development + digitaltwin-development 1.0-SNAPSHOT @@ -26,7 +26,7 @@ com.scaleoutsoftware.digitaltwin - abstractions + digitaltwin-abstractions 4.0.0 diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 85b5e1d..3f7a403 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -32,7 +32,7 @@ class TwinExecutionEngine implements Closeable { private ConcurrentHashMap> _messageProcessors; private ConcurrentHashMap> _simulationProcessors; private ConcurrentHashMap> _modelInstances; - private ConcurrentHashMap> _alertProviders; + private ConcurrentHashMap _alertProviders; private ConcurrentHashMap> _modelsSharedData; private HashMap _globalSharedData; private Workbench _workbench; @@ -107,9 +107,7 @@ void stopTimer(String modelName, String id, String timerName) { } void addAlertProvider(String modelName, String configuration) { - ConcurrentHashMap configMap = _alertProviders.getOrDefault(modelName, new ConcurrentHashMap<>()); - configMap.put(configuration, configuration); - _alertProviders.put(modelName, configMap); + _alertProviders.put(modelName, configuration); } void updateTwin(String model, String id, TwinProxy proxy) { @@ -169,9 +167,9 @@ TwinProxy getTwinProxy(String model, String id) { return proxy; } - boolean hasAlertProviderConfiguration(String model, String alertProviderName) { + boolean hasAlertProviderConfiguration(String model) { if(hasModel(model)) { - return _alertProviders.containsKey(model) && _alertProviders.getOrDefault(model, new ConcurrentHashMap<>()).containsKey(alertProviderName); + return _alertProviders.containsKey(model); } else { return false; } @@ -236,11 +234,11 @@ public void logMessage(String model, LogMessage message) { _workbench.LOGGED_MESSAGES.put(model, prev); } - public void recordAlertMessage(String model, String alertProvider, AlertMessage message) { + public void recordAlertMessage(String model, AlertMessage message) { ConcurrentHashMap> perModelMessages = _workbench.ALERT_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); - ConcurrentLinkedQueue perApMessages = perModelMessages.getOrDefault(alertProvider, new ConcurrentLinkedQueue<>()); + ConcurrentLinkedQueue perApMessages = perModelMessages.getOrDefault(_alertProviders.get(model), new ConcurrentLinkedQueue<>()); perApMessages.add(message); - perModelMessages.put(alertProvider, perApMessages); + perModelMessages.put(_alertProviders.get(model), perApMessages); _workbench.ALERT_MESSAGES.put(model, perModelMessages); } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java index 5dd373c..de5cda4 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java @@ -19,6 +19,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.concurrent.CompletableFuture; public class Util { public static List copyOf(Collection source) { @@ -37,4 +38,10 @@ public static List copyOf(Collection source) { return Collections.unmodifiableList(copy); } + + public static CompletableFuture failedFuture(Throwable t) { + CompletableFuture future = new CompletableFuture<>(); + future.completeExceptionally(t); + return future; + } } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index c5f7ad9..a6dc468 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -542,7 +542,7 @@ public List getLoggedMessages(String model, long timestamp) { */ public List getAlertMessages(String model, String alertProvider) throws WorkbenchException { if(!_twinExecutionEngine.hasModel(model)) throw new WorkbenchException(String.format("No registered model with name %s found.", model)); - if(!_twinExecutionEngine.hasAlertProviderConfiguration(model, alertProvider)) throw new WorkbenchException(String.format("No alert provider configuration, registered for model %s, for %s found.", model, alertProvider)); + if(!_twinExecutionEngine.hasAlertProviderConfiguration(model)) throw new WorkbenchException(String.format("No alert provider configuration, registered for model %s, for %s found.", model, alertProvider)); ConcurrentHashMap> perModelMessages = ALERT_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0])); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java index 0bd8815..be7a84e 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java @@ -33,8 +33,8 @@ class WorkbenchInitContext> extends InitContext } @Override - public TimerActionResult startTimer(String timerName, Duration duration, TimerType timerType, TimerHandler timerHandler) { - return WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, duration, timerType, timerHandler); + public TimerActionResult startTimer(String timerName, Duration duration, TimerType timerType, TimerHandler timerHandler, Class> aClass) { + return WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, duration, timerType, timerHandler, aClass); } @Override diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index 6a192b6..a5e4901 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -91,16 +91,12 @@ public CompletableFuture sendToDigitalTwin(String model, String i } @Override - public CompletableFuture sendAlert(String alertProviderName, AlertMessage alertMessage) { - if(alertProviderName.isEmpty() || alertMessage == null) return CompletableFuture.completedFuture(SendingResult.NotHandled); - else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) return CompletableFuture.completedFuture(SendingResult.NotHandled); + public CompletableFuture sendAlert(AlertMessage alertMessage) { + if(alertMessage == null) return Util.failedFuture(new IllegalArgumentException("Alert message was null.")); + else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model)) return Util.failedFuture(new IllegalStateException("No alert provider configuration available to model.")); else { - if(_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) { - _twinExecutionEngine.recordAlertMessage(_model, alertProviderName, alertMessage); - return CompletableFuture.completedFuture(SendingResult.Handled); - } else { - return CompletableFuture.completedFuture(SendingResult.NotHandled); - } + _twinExecutionEngine.recordAlertMessage(_model, alertMessage); + return CompletableFuture.completedFuture(null); } } @@ -126,8 +122,8 @@ public CompletableFuture logMessage(Level level, String msg) { } @Override - public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { - TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, interval, timerType, timerHandler); + public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> aClass) { + TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, interval, timerType, timerHandler, aClass); if(ret != TimerActionResult.Success) { _forceSave = false; } else { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index eb78740..660ed24 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -21,7 +21,7 @@ class WorkbenchTimerService { - static > TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { + static > TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> handlerClass) { if(timerName == null || timerName.isEmpty() || interval == null || interval.isZero() || interval.isNegative() || timerType == null || timerHandler == null) { String msg = String.format("Empty, blank, zero, or null parameter provided: timerName %s interval %s timerType %s timerHandler %s", @@ -51,7 +51,7 @@ static > TimerActionResult startTimer(TwinExecution twinExecutionEngine.addTimer(model, id, timerName, timerType, interval, timerHandler); - TimerMetadata metadata = new TimerMetadata<>(timerHandler, timerType, interval.toMillis(), timerId); + TimerMetadata metadata = new TimerMetadata<>(timerHandler, handlerClass, timerType, interval.toMillis(), timerId); proxy.getTimerHandlers().put(timerName, metadata); return TimerActionResult.Success; } diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 9c2757e..2a86ffe 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -80,14 +80,7 @@ public ProcessingResult processMessage(ProcessingContext proc processingContext.logMessage(Level.INFO, msg.payload); break; case "StartTimer": - processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, - new TimerHandler() { - @Override - public ProcessingResult onTimedMessage(String s, SimpleDigitalTwin simpleDigitalTwin, ProcessingContext processingContext) { - System.out.println("Hello from real-time timer."); - return ProcessingResult.UpdateDigitalTwin; - } - }); + processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, new SimpleTimer(), SimpleTimer.class); break; case "StopTimer": processingContext.stopTimer("timer"); @@ -223,6 +216,15 @@ public ProcessingResult processModel(ProcessingContext processingContext, Simula } } + public static class SimpleTimer implements TimerHandler { + + @Override + public ProcessingResult onTimedMessage(String s, SimpleDigitalTwin simpleDigitalTwin, ProcessingContext processingContext) { + System.out.println("timer called!"); + return ProcessingResult.UpdateDigitalTwin; + } + } + public static class SimpleSimProcessor extends SimulationProcessor implements Serializable { private Gson _gson = new Gson(); private AtomicInteger timesInvoked = new AtomicInteger(0); @@ -241,7 +243,7 @@ public int getTimesInvoked() { } @Override - public ProcessingResult processModel(ProcessingContext processingContext, SimpleDigitalTwin simpleDigitalTwin, Date date) { + public ProcessingResult processModel(ProcessingContext processingContext, SimpleDigitalTwin simpleDigitalTwin, Date date) { timesInvoked.addAndGet(1); SimulationController controller = processingContext.getSimulationController(); if(simpleDigitalTwin.getId().compareTo("stop") == 0) { @@ -251,13 +253,8 @@ public ProcessingResult processModel(ProcessingContext processingContext, Simple controller.delay(Duration.ofSeconds(600)); return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().contains("timer")) { - processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.OneTime, new TimerHandler() { - @Override - public ProcessingResult onTimedMessage(String s, SimpleDigitalTwin digitalTwinBase, ProcessingContext processingContext) { - System.out.println("timer called!"); - return ProcessingResult.UpdateDigitalTwin; - } - }); + Class timerHandlerClass = SimpleTimer.class; + TimerActionResult timer = processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.OneTime, new SimpleTimer(), timerHandlerClass); return ProcessingResult.UpdateDigitalTwin; } else if (simpleDigitalTwin.getId().contains("log")) { processingContext.logMessage(Level.INFO, simpleDigitalTwin._stringProp); diff --git a/docs/digitaltwin-core-docs/build.gradle b/docs/digitaltwin-core-docs/build.gradle index 21815d2..fdf2907 100644 --- a/docs/digitaltwin-core-docs/build.gradle +++ b/docs/digitaltwin-core-docs/build.gradle @@ -3,7 +3,7 @@ plugins { } group 'com.scaleout.digitaltwin' -version '3.0.5' +version '4.0.0' repositories { mavenCentral() @@ -31,8 +31,8 @@ artifacts { } -task copyDTCore(type: Copy) { - from "../../Core/src/" +task copyDTAbstractions(type: Copy) { + from "../../Abstractions/src/" into "./src" } @@ -49,11 +49,11 @@ dependencies { } compileJava { - dependsOn 'copyDTCore' + dependsOn 'copyDTAbstractions' dependsOn 'copyDTDevelopment' } processResources { - dependsOn 'copyDTCore' + dependsOn 'copyDTAbstractions' dependsOn 'copyDTDevelopment' } \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/settings.gradle b/docs/digitaltwin-core-docs/settings.gradle index 16c6d6b..b72c16e 100644 --- a/docs/digitaltwin-core-docs/settings.gradle +++ b/docs/digitaltwin-core-docs/settings.gradle @@ -1,2 +1,2 @@ -rootProject.name = 'digitaltwin-core-docs' +rootProject.name = 'digitaltwin-docs' From 6c23ea85bc90453fa5213a3eb75947d879206131 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 27 Mar 2026 14:40:40 -0700 Subject: [PATCH 22/35] Adding next sim time + source app id to base class, removing timer handler string from timer metadata --- .../abstractions/DigitalTwinBase.java | 52 +++++++++++++++++++ .../abstractions/TimerMetadata.java | 14 +---- .../development/WorkbenchTimerService.java | 4 +- 3 files changed, 56 insertions(+), 14 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java index ae72580..3001711 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java @@ -35,6 +35,17 @@ public abstract class DigitalTwinBase> { */ public String Model = ""; + /** + * DO NOT MODIFY. This property is managed by the service. Used to send messages to the instances data source. + */ + public int SourceAppIdNamespace; + + /** + * DO NOT MODIFY. This property is managed by the service. Used to store the instances next simulation time; managed by the + * service in case of load balancing or server failures. + */ + public long NextSimulationTimeUnixMsec; + /** * Default constructor. */ @@ -56,6 +67,47 @@ public String getModel() { return Model; } + /** + * INTERNAL: DO NOT MODIFY. This property is managed by the service. + * + * Used for sending messages back to the instances data source. + * + * @return the source App ID namespace + */ + public int getSourceAppIdNamespace() { + return SourceAppIdNamespace; + } + + /** + * INTERNAL: DO NOT MODIFY. This property is managed by the service. + * @param sourceAppIdNamespace assign this instance a new source app ID namespace. + */ + public void setSourceAppIdNamespace(int sourceAppIdNamespace) { + SourceAppIdNamespace = sourceAppIdNamespace; + } + + /** + * INTERNAL: DO NOT MODIFY. This property is managed by the service. + * + * Retrieve the next simulation time for this instance. + * + * @return the next simulation time for this instance. + */ + public long getNextSimulationTimeUnixMsec() { + return NextSimulationTimeUnixMsec; + } + + /** + * INTERNAL: DO NOT MODIFY. This property is managed by the service. + * + * Assign this instance the next simulation time when the instance will be run. + * + * @param nextSimulationTimeUnixMsec the next simulation time when the instance will be run. + */ + public void setNextSimulationTimeUnixMsec(long nextSimulationTimeUnixMsec) { + NextSimulationTimeUnixMsec = nextSimulationTimeUnixMsec; + } + /** * Initialization method to set the identifier and model for a DigitalTwin instance. Optionally use the * {@link InitContext} to start a timer. diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java index 3a7194a..2e4cb85 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java @@ -20,7 +20,6 @@ * @param the type of the {@link DigitalTwinBase} implementation. */ public class TimerMetadata> { - final String timerHandler; final Class> handlerClass; final TimerType timerType; final long timerIntervalMs; @@ -28,27 +27,18 @@ public class TimerMetadata> { /** * Constructs a timer metadata. - * @param handler the timer handler. + * @param handlerClass the timer handler. * @param timerType the timer type. * @param timerIntervalMs the timer interval. * @param timerIdx the timer index. */ - public TimerMetadata(TimerHandler handler, Class> handlerClass, TimerType timerType, long timerIntervalMs, int timerIdx) { - this.timerHandler = handler.getClass().getName(); + public TimerMetadata(Class> handlerClass, TimerType timerType, long timerIntervalMs, int timerIdx) { this.handlerClass = handlerClass; this.timerType = timerType; this.timerIntervalMs = timerIntervalMs; this.timerId = timerIdx; } - /** - * Retrieves the timer handler class name. - * @return the timer handler class name. - */ - public String getTimerHandlerClassName() { - return timerHandler; - } - /** * Retrieves the timer type. * @return the timer type. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index 660ed24..a497c6a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -51,12 +51,12 @@ static > TimerActionResult startTimer(TwinExecution twinExecutionEngine.addTimer(model, id, timerName, timerType, interval, timerHandler); - TimerMetadata metadata = new TimerMetadata<>(timerHandler, handlerClass, timerType, interval.toMillis(), timerId); + TimerMetadata metadata = new TimerMetadata<>(handlerClass, timerType, interval.toMillis(), timerId); proxy.getTimerHandlers().put(timerName, metadata); return TimerActionResult.Success; } - static TimerActionResult stopTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName) { + static > TimerActionResult stopTimer(TwinExecutionEngine twinExecutionEngine, TwinProxy proxy, String model, String id, String timerName) { twinExecutionEngine.stopTimer(model, id, timerName); proxy.getTimerHandlers().remove(timerName); return TimerActionResult.Success; From 2d80af85b27bca9f3d353d3b1ad1acade399127e Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 2 Apr 2026 09:43:59 -0700 Subject: [PATCH 23/35] Update base class to match .NET, Timer improvements Update property names in DigitalTwinBase Improve timers Remove unused DigitalTwinTimerMessage --- .../abstractions/DigitalTwinBase.java | 6 +- .../abstractions/DigitalTwinTimerMessage.java | 84 ------------------- .../abstractions/TimerMetadata.java | 21 +++-- .../development/WorkbenchTimerService.java | 4 +- 4 files changed, 15 insertions(+), 100 deletions(-) delete mode 100644 Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java index 3001711..5b54875 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.java @@ -38,7 +38,7 @@ public abstract class DigitalTwinBase> { /** * DO NOT MODIFY. This property is managed by the service. Used to send messages to the instances data source. */ - public int SourceAppIdNamespace; + public int SourceNamespaceAppId; /** * DO NOT MODIFY. This property is managed by the service. Used to store the instances next simulation time; managed by the @@ -75,7 +75,7 @@ public String getModel() { * @return the source App ID namespace */ public int getSourceAppIdNamespace() { - return SourceAppIdNamespace; + return SourceNamespaceAppId; } /** @@ -83,7 +83,7 @@ public int getSourceAppIdNamespace() { * @param sourceAppIdNamespace assign this instance a new source app ID namespace. */ public void setSourceAppIdNamespace(int sourceAppIdNamespace) { - SourceAppIdNamespace = sourceAppIdNamespace; + SourceNamespaceAppId = sourceAppIdNamespace; } /** diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java deleted file mode 100644 index b0d2f9a..0000000 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinTimerMessage.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (c) 2026 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.abstractions; - -/** - * A message sent to a digital twin instance's message processor. - */ -public class DigitalTwinTimerMessage { - - private String _modelName; - private String _twinId; - private int _timerId; - private String _timerName; - private TimerType _timerType; - - /** - * Construct a digital twin timer message. - * @param modelName the digital twin model name. - * @param twinId the digital twin instance ID - * @param timerId the timer ID - * @param timerName the timer name - * @param timerType the timer type - */ - public DigitalTwinTimerMessage(String modelName, String twinId, int timerId, String timerName, TimerType timerType) { - _modelName = modelName; - _twinId = twinId; - _timerId = timerId; - _timerName = timerName; - _timerType = timerType; - } - - /** - * Retrieve the digital twin model name. - * @return the digital twin model name. - */ - public String getModelName() { - return _modelName; - } - - /** - * Retrieve the digital twin ID. - * @return the digital twin ID. - */ - public String getTwinId() { - return _twinId; - } - - /** - * Retrieve the timer ID. - * @return the timer ID. - */ - public int getTimerId() { - return _timerId; - } - - /** - * Retrieve the timer name. - * @return the timer name. - */ - public String getTimerName() { - return _timerName; - } - - /** - * Retrieve the {@link TimerType}. - * @return the {@link TimerType} - */ - public TimerType getTimerType() { - return _timerType; - } -} diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java index 2e4cb85..120e09e 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.java @@ -20,23 +20,23 @@ * @param the type of the {@link DigitalTwinBase} implementation. */ public class TimerMetadata> { - final Class> handlerClass; - final TimerType timerType; - final long timerIntervalMs; - final int timerId; + final TimerHandler handlerClass; + final TimerType timerType; + final long timerIntervalMs; + final int timerSlot; /** * Constructs a timer metadata. * @param handlerClass the timer handler. * @param timerType the timer type. * @param timerIntervalMs the timer interval. - * @param timerIdx the timer index. + * @param timerSlot the timer index. */ - public TimerMetadata(Class> handlerClass, TimerType timerType, long timerIntervalMs, int timerIdx) { + public TimerMetadata(TimerHandler handlerClass, TimerType timerType, long timerIntervalMs, int timerSlot) { this.handlerClass = handlerClass; this.timerType = timerType; this.timerIntervalMs = timerIntervalMs; - this.timerId = timerIdx; + this.timerSlot = timerSlot; } /** @@ -59,12 +59,11 @@ public long getTimerIntervalMs() { * Retrieves the timer ID. * @return the timer ID. */ - public int getTimerId() { - return timerId; + public int getTimerSlot() { + return timerSlot; } - public Class> getHandlerClass() { + public TimerHandler getHandler() { return handlerClass; } - } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java index a497c6a..8666fe7 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java @@ -39,7 +39,7 @@ static > TimerActionResult startTimer(TwinExecution boolean[] taken = new boolean[Constants.MAX_TIMER_COUNT]; // List of all timer Ids for (TimerMetadata md : proxy.getTimerHandlers().values()) { - taken[md.getTimerId()] = true; + taken[md.getTimerSlot()] = true; } for(int i = 0; i < taken.length; i++) { @@ -51,7 +51,7 @@ static > TimerActionResult startTimer(TwinExecution twinExecutionEngine.addTimer(model, id, timerName, timerType, interval, timerHandler); - TimerMetadata metadata = new TimerMetadata<>(handlerClass, timerType, interval.toMillis(), timerId); + TimerMetadata metadata = new TimerMetadata<>(timerHandler, timerType, interval.toMillis(), timerId); proxy.getTimerHandlers().put(timerName, metadata); return TimerActionResult.Success; } From dd08b071e7edfc45e6db32e92b5a0cf4f1c24e47 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 8 Apr 2026 17:28:23 -0700 Subject: [PATCH 24/35] Changes for twin removal Adding DeleteResult and CreateResult enums Updating ProcessingResult to include Remove value Updating ProcessingContext to include removeRealTimeTwin method --- .../abstractions/CreateResult.java | 27 +++++++++++++++++ .../abstractions/DeleteResult.java | 30 +++++++++++++++++++ .../abstractions/ProcessingContext.java | 10 +++++++ .../abstractions/ProcessingResult.java | 9 ++++-- 4 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java create mode 100644 Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.java diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java new file mode 100644 index 0000000..7718e4d --- /dev/null +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java @@ -0,0 +1,27 @@ +/* + Copyright (c) 2026 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.abstractions; + +public enum CreateResult { + /** + * The twin instance was successfully created. + */ + Success, + /** + * The twin instance already existed and could not be created. + */ + ObjectExists +} diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.java new file mode 100644 index 0000000..a141807 --- /dev/null +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.java @@ -0,0 +1,30 @@ +/* + Copyright (c) 2026 by ScaleOut Software, Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +package com.scaleoutsoftware.digitaltwin.abstractions; + +/** + * Enum indicating the status of a delete operation. + */ +public enum DeleteResult { + /** + * The twin instance was successfully deleted. + */ + Success, + /** + * The target twin instance was not found. + */ + NotFound +} diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index b1c8f13..bc80534 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -102,9 +102,19 @@ public ProcessingContext() {} * * @param severity the severity of the log message * @param message the message to log + * @return A future that will complete successfully with no result or exceptionally. */ public abstract CompletableFuture logMessage(Level severity, String message); + /** + * Delete the target real-time twin instance. + * @param targetTwinModel the model of the real-time twin instance + * @param targetTwinId the id of the real-time twin instance. + * @return a completable future that will complete with a {@link DeleteResult} indicating the status of the operation, or + * exceptionally indicating that an error occurred. + */ + public abstract CompletableFuture removeRealTimeTwin(String targetTwinModel, String targetTwinId); + /** * Starts a new timer for the digital twin * @param timerName the timer name diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java index 90521cc..0465ce3 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.java @@ -16,7 +16,8 @@ package com.scaleoutsoftware.digitaltwin.abstractions; /** - * The result from a message processor which indicates to update the state object or to ignore + * The result from a message processor which indicates to update the twin instance, not update the twin instance, or + * remove the twin instance. */ public enum ProcessingResult { /** @@ -26,5 +27,9 @@ public enum ProcessingResult { /** * Do not update the digital twin. */ - NoUpdate + NoUpdate, + /** + * The twin instance should be removed after processing. + */ + Remove } From ba9ba7570cb7a0702e8a9cb3d028efa0d60e27e9 Mon Sep 17 00:00:00 2001 From: Brandon Date: Wed, 8 Apr 2026 17:52:29 -0700 Subject: [PATCH 25/35] Update workbench to support remove --- .../development/SimulationEventTwinImpl.java | 5 ++++- .../digitaltwin/development/SimulationWorker.java | 8 +++++--- .../digitaltwin/development/TwinExecutionEngine.java | 12 ++++++++++++ .../development/WorkbenchProcessingContext.java | 5 +++++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java index ddea566..337102e 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java @@ -41,7 +41,10 @@ SimulationEventResult processSimulationEvent(ProcessingContext context, Date cur synchronized (_proxy) { WorkbenchProcessingContext wpc = (WorkbenchProcessingContext)context; wpc.resetProxy(_proxy); - _processor.processModel(wpc, base, currentTime); + ProcessingResult result = _processor.processModel(wpc, base, currentTime); + if(result == ProcessingResult.Remove) { + _proxy.setProxyState(ProxyState.Removed); + } _proxy.setInstance(base); } } catch (Exception e) { diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java index f0b84bf..6abfe08 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java @@ -125,8 +125,10 @@ public void runThisInstance(String model, String id) throws WorkbenchException { event.setPriority(_curSimulationTime + _simulationInterval); event.setNextSimulationTime(_curSimulationTime + _simulationInterval); } - _events.put(String.format("%s%s",model,id), event); - _timeOrderedQueue.add(event); + if(!simulationController.deleted() && !(event.getProxyState() == ProxyState.Removed)) { + _events.put(String.format("%s%s",model,id), event); + _timeOrderedQueue.add(event); + } } @Override @@ -198,7 +200,7 @@ public SimulationStep call() throws Exception { } keepProcessing = false; } - if(!simulationController.deleted() && addToBuffer) { + if(!simulationController.deleted() && addToBuffer && !(next.getProxyState() == ProxyState.Removed)) { buffer.add(next); } } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 3f7a403..25553bb 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -23,6 +23,7 @@ import java.nio.charset.StandardCharsets; import java.time.Duration; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; @@ -267,6 +268,14 @@ public void deleteSimulationInstance(String modelName, String id) { _modelInstances.put(modelName, modelInstances); } + public CompletableFuture deleteRealTimeInstance(String modelName, String id) { + ConcurrentHashMap modelInstances = _modelInstances.get(modelName); + TwinProxy proxy = modelInstances.remove(id); + proxy.setProxyState(ProxyState.Removed); + _modelInstances.put(modelName, modelInstances); + return CompletableFuture.completedFuture(DeleteResult.Success); + } + ProcessingResult run(String model, String id, String source, byte[] message) throws WorkbenchException { try { ConcurrentHashMap twinInstances = _modelInstances.get(model); @@ -317,6 +326,9 @@ ProcessingResult run(String model, String id, String source, byte[] message) thr break; case NoUpdate: break; + case Remove: + twinInstances.remove(id); + _modelInstances.put(model, twinInstances); default: break; } diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java index a5e4901..f542d0d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java @@ -121,6 +121,11 @@ public CompletableFuture logMessage(Level level, String msg) { return CompletableFuture.completedFuture(null); } + @Override + public CompletableFuture removeRealTimeTwin(String targetModelName, String targetInstanceId) { + return _twinExecutionEngine.deleteRealTimeInstance(targetModelName, targetInstanceId); + } + @Override public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler, Class> aClass) { TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, _proxy, _model, _id, timerName, interval, timerType, timerHandler, aClass); From e5a276261a19b47fea2d1f7d86596c43070cf6b2 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 17 Apr 2026 12:09:01 -0700 Subject: [PATCH 26/35] Removing unused special creates from simulation controller --- .../abstractions/SimulationController.java | 36 ++----------------- 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java index 8f5f27c..1b5a49b 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java @@ -113,37 +113,7 @@ public interface SimulationController { * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. * @param the type of the digital twin to create. */ - > CompletableFuture createInstance(String modelName, String instanceId, T base); - - /** - * Create a new digital twin instance for simulation processing from a persistence store. - * - * The twin instance will be loaded via model name and id from a persistence store. - * - * If no instance can be found, then an exception will be thrown and no instance will be created. - * - * @param model The model name. - * @param id the instance id. - * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance - * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. - */ - CompletableFuture createInstanceFromPersistenceStore(String model, String id); - - /** - * The twin instance will be loaded via model name and id from a persistence store. - * - * The twin instance will be loaded via model name and id from a persistence store. - * - * If no instance can be found, then the default parameter instance will be used. - * - * @param model the model name. - * @param id the instance id. - * @param def the default instance to create. - * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance - * * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. - * @param the type of the digital twin to create. - */ - > CompletableFuture createInstanceFromPersistenceStore(String model, String id, T def); + > CompletableFuture createInstance(String modelName, String instanceId, T base); /** * Delete and remove a digital twin instance from simulation processing. @@ -152,13 +122,13 @@ public interface SimulationController { * @return {@link SendingResult#Handled} if the instance was deleted, {@link SendingResult#Enqueued} if the instance * is in process of being deleted, or {@link SendingResult#NotHandled} if the instance could not be deleted. */ - CompletableFuture deleteInstance(String modelName, String instanceId); + CompletableFuture deleteInstance(String modelName, String instanceId); /** * Delete and remove this digital twin instance from simulation processing. * @return this local request will always return {@link SendingResult#Handled}. */ - CompletableFuture deleteThisInstance(); + CompletableFuture deleteThisInstance(); /** * Run this instance during this simulation step. The instance will be run using the models {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)} From e02187f27ef3bef602a24e8a770521508e2bcda7 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 17 Apr 2026 13:51:34 -0700 Subject: [PATCH 27/35] Remove serializable from SimulationProcessor --- .../digitaltwin/abstractions/SimulationProcessor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java index 2ac8fae..331705f 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.java @@ -22,8 +22,7 @@ * Processes simulation events for a digital twin. * @param the type of the digital twin. */ -public abstract class SimulationProcessor> implements Serializable { - private static final long serialVersionUID = 1L; +public abstract class SimulationProcessor> { /** * Default constructor. */ From 4f90a97eae400b0d2e8bf1e8fb28c7ea5ec5d4f9 Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 8 May 2026 10:20:52 -0700 Subject: [PATCH 28/35] Doc fixes, workbench synchronization --- Abstractions/build.bat | 2 +- Abstractions/pom.xml | 2 +- .../digitaltwin/abstractions/InitContext.java | 1 + .../abstractions/ProcessingContext.java | 5 +-- .../abstractions/SimulationController.java | 2 -- Development/build.bat | 2 +- Development/pom.xml | 13 ++++--- .../development/TwinExecutionEngine.java | 8 ++--- .../digitaltwin/development/Workbench.java | 30 +++------------- .../WorkbenchSimulationController.java | 34 +++++-------------- .../development/TestWorkbench.java | 2 +- 11 files changed, 34 insertions(+), 67 deletions(-) diff --git a/Abstractions/build.bat b/Abstractions/build.bat index f8a5f33..54626e9 100644 --- a/Abstractions/build.bat +++ b/Abstractions/build.bat @@ -5,4 +5,4 @@ rem * Java JDK 8 rem * MVN 3.x SET JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.452.9-hotspot SET MVN_HOME=C:\JavaBuildTools\apache-maven-3.9.8 -call mvn clean package install \ No newline at end of file +call mvn clean package install javadoc:jar source:jar \ No newline at end of file diff --git a/Abstractions/pom.xml b/Abstractions/pom.xml index 5fb4677..d48fe60 100644 --- a/Abstractions/pom.xml +++ b/Abstractions/pom.xml @@ -6,7 +6,7 @@ com.scaleoutsoftware.digitaltwin digitaltwin-abstractions - 4.0.0 + 3.0.0 UTF-8 diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java index 9dc77de..1f7dddd 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.java @@ -34,6 +34,7 @@ public InitContext() {} * @param interval the timer interval * @param timerType the timer type * @param timerHandler the time handler callback + * @param timerHandlerClass the timer handler callback class * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java index bc80534..693e2f2 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.java @@ -23,7 +23,7 @@ /** * Context object that allows the user to send a message to a DataSource. - * the type of the digital twin + * @param the type of the digital twin */ public abstract class ProcessingContext> implements Serializable { private static final long serialVersionUID = 1L; @@ -109,7 +109,7 @@ public ProcessingContext() {} /** * Delete the target real-time twin instance. * @param targetTwinModel the model of the real-time twin instance - * @param targetTwinId the id of the real-time twin instance. + * @param targetTwinId the id of the real-time twin instance * @return a completable future that will complete with a {@link DeleteResult} indicating the status of the operation, or * exceptionally indicating that an error occurred. */ @@ -121,6 +121,7 @@ public ProcessingContext() {} * @param interval the timer interval * @param timerType the timer type * @param timerHandler the time handler callback + * @param timerHandlerClass the timer handler callback class * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. */ diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java index 1b5a49b..5f2f103 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.java @@ -73,7 +73,6 @@ public interface SimulationController { *

            * * @param duration the duration to delay. - * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} * if the delay was not processed. */ void delay(Duration duration); @@ -87,7 +86,6 @@ public interface SimulationController { * Simulation processing will be delayed until this instance is run with {@link SimulationController#runThisInstance()}. *

            * - * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} * if the delay was not processed. */ void delayIndefinitely(); diff --git a/Development/build.bat b/Development/build.bat index f8a5f33..54626e9 100644 --- a/Development/build.bat +++ b/Development/build.bat @@ -5,4 +5,4 @@ rem * Java JDK 8 rem * MVN 3.x SET JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.452.9-hotspot SET MVN_HOME=C:\JavaBuildTools\apache-maven-3.9.8 -call mvn clean package install \ No newline at end of file +call mvn clean package install javadoc:jar source:jar \ No newline at end of file diff --git a/Development/pom.xml b/Development/pom.xml index 683c2b1..ec1c9fa 100644 --- a/Development/pom.xml +++ b/Development/pom.xml @@ -6,7 +6,7 @@ com.scaleoutsoftware.digitaltwin digitaltwin-development - 1.0-SNAPSHOT + 3.0.0 8 @@ -17,17 +17,22 @@ com.google.code.gson gson - 2.13.2 + 2.14.0 + + + org.apache.logging.log4j + log4j-api + 2.25.4 org.apache.logging.log4j log4j-core - 2.25.3 + 2.25.4 com.scaleoutsoftware.digitaltwin digitaltwin-abstractions - 4.0.0 + 3.0.0 junit diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java index 25553bb..4733898 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java @@ -135,8 +135,8 @@ List runningModels() { return _modelNames; } - HashMap getTwinInstances(String model) { - HashMap ret = new HashMap<>(); + HashMap> getTwinInstances(String model) { + HashMap> ret = new HashMap<>(); ConcurrentHashMap instances = _modelInstances.get(model); if(instances!= null) { for(Map.Entry entry : instances.entrySet()) { @@ -146,8 +146,8 @@ HashMap getTwinInstances(String model) { return ret; } - DigitalTwinBase getTwinInstance(String model, String id) { - DigitalTwinBase ret = null; + DigitalTwinBase getTwinInstance(String model, String id) { + DigitalTwinBase ret = null; ConcurrentHashMap instances = _modelInstances.get(model); if(instances != null) { TwinProxy proxy = instances.get(id); diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java index a6dc468..281efe1 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java @@ -287,17 +287,14 @@ public Workbench(int numSimulationWorkers) { * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. * @param dtType the model's {@link DigitalTwinBase} implementation. * @param the type of the digital twin. - * @param the type of the message. * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message * processor must be serializable, and the digital twin implementation must have a parameterless constructor). */ - public ,V> void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { + public > void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { if(modelName == null || modelName.isEmpty() || digitalTwinMessageProcessor == null || dtType == null) { String errorMessage = String.format("modelName null: %b messageProcessor null: %b dtType null: %b",modelName == null, digitalTwinMessageProcessor == null, dtType == null); throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); } - - validate(digitalTwinMessageProcessor, dtType); _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, dtType); } @@ -309,17 +306,14 @@ public ,V> void addRealTimeModel(String modelName, * @param simulationProcessor the model's {@link SimulationProcessor} implementation. Must be marked as {@link Serializable}. * @param dtType the model's {@link DigitalTwinBase} implementation. * @param the type of the digital twin. - * @param the type of the message. * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message * processor must be serializable, and the digital twin implementation must have a parameterless constructor). */ - public ,V> void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType) throws WorkbenchException { + public > void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType) throws WorkbenchException { if(modelName == null || modelName.isEmpty() || digitalTwinMessageProcessor == null || simulationProcessor == null || dtType == null) { String errorMessage = String.format("modelName null: %b messageProcessor null: %b simulationProcessor null: %b dtType null: %b",modelName == null, digitalTwinMessageProcessor == null, simulationProcessor == null, dtType == null); throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); } - - validate(digitalTwinMessageProcessor, dtType); _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, _numWorkers); } @@ -331,6 +325,7 @@ public ,V> void addSimulationModel(String modelName * @param modelName the instances model. * @param id the instance identifier. * @param instance the real-time or simulation instance. + * @param the type of the Digital Twin * @throws WorkbenchException If the model does not exist or if a simulation is already running. */ public > void addInstance(String modelName, String id, V instance) throws WorkbenchException { @@ -491,7 +486,7 @@ public Date peek() throws WorkbenchException { * @return the instances associated with the parameter model * @throws WorkbenchException if an exception occurs while retrieving digital twin instances for the parameter modelName */ - public HashMap getInstances(String modelName) throws WorkbenchException { + public HashMap> getInstances(String modelName) throws WorkbenchException { if(_twinExecutionEngine.getTwinInstances(modelName) == null) throw new WorkbenchException(String.format("No instances for model %s.", modelName)); return _twinExecutionEngine.getTwinInstances(modelName); @@ -593,23 +588,6 @@ public SendingResult send(String modelName, String id, byte[] message) throws Wo return SendingResult.Handled; } - static , V> void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { - try { - Class mpType = digitalTwinMessageProcessor.getClass(); - // instantiate TwinInstance - MessageProcessor instance = mpType.getConstructor().newInstance(); - } catch (Exception e) { - throw new WorkbenchException("Could not instantiate MessageProcessor instance. Default constructor required.", e); - } - - try { - // instantiate TwinInstance - DigitalTwinBase instance = dtType.getConstructor().newInstance(); - } catch (Exception e) { - throw new WorkbenchException("Could not instantiate DigitalTwin instance. Default constructor required.", e); - } - } - /** * Add a key/value pair to {@link SharedData} for a model. * @param modelName the model name. diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java index 2546c39..33e261d 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java @@ -73,44 +73,28 @@ public CompletableFuture emitTelemetry(String modelName, byte[] m } @Override - public > CompletableFuture createInstance(String modelName, String id, T instance) { + public > CompletableFuture createInstance(String modelName, String id, T instance) { try { _engine.createInstance(modelName, id, instance); - return CompletableFuture.completedFuture(SendingResult.Handled); + return CompletableFuture.completedFuture(CreateResult.Success); } catch (Exception e) { - return CompletableFuture.completedFuture(SendingResult.NotHandled); - } - } - - @Override - public CompletableFuture createInstanceFromPersistenceStore(String modelName, String id) { - try { - throw new NoSuchMethodException("Not available on the workbench."); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - @Override - public > CompletableFuture createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { - try { - throw new NoSuchMethodException("Not available on the workbench."); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); + CompletableFuture future = new CompletableFuture<>(); + future.completeExceptionally(e); + return future; } } @Override - public CompletableFuture deleteInstance(String modelName, String id) { + public CompletableFuture deleteInstance(String modelName, String id) { _engine.deleteSimulationInstance(modelName, id); - return CompletableFuture.completedFuture(SendingResult.Handled); + return CompletableFuture.completedFuture(DeleteResult.Success); } @Override - public CompletableFuture deleteThisInstance() { + public CompletableFuture deleteThisInstance() { _engine.deleteSimulationInstance(_modelName, _id); _deleted = true; - return CompletableFuture.completedFuture(SendingResult.Handled); + return CompletableFuture.completedFuture(DeleteResult.Success); } @Override diff --git a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java index 2a86ffe..c349f15 100644 --- a/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ b/Development/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java @@ -352,7 +352,7 @@ public void TestWorkbenchSample() throws WorkbenchException { while (step.getStatus() == SimulationStatus.Running) { step = workbench.step(); - HashMap realTimeCars = workbench.getInstances("RealTimeCar"); + HashMap> realTimeCars = workbench.getInstances("RealTimeCar"); RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23"); System.out.println("rtCar: " + rtCar.getTirePressure()); } From 2d20e9fe22039ffa23d1d6d789bea67be390d4af Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 14 May 2026 10:38:44 -0700 Subject: [PATCH 29/35] Update createresult docs --- .../digitaltwin/abstractions/CreateResult.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java index 7718e4d..6095592 100644 --- a/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java +++ b/Abstractions/src/main/java/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.java @@ -15,6 +15,9 @@ */ package com.scaleoutsoftware.digitaltwin.abstractions; +/** + * Enum indicating the status of a delete operation. + */ public enum CreateResult { /** * The twin instance was successfully created. From d068f76a16fc4e0f070a0370245c9a77be050c12 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 14 May 2026 10:41:09 -0700 Subject: [PATCH 30/35] Removing old docs --- docs/allclasses-index.html | 192 --- docs/allpackages-index.html | 69 - .../digitaltwin/core/AlertMessage.html | 263 ---- .../core/AlertProviderConfiguration.html | 293 ----- .../core/CacheOperationStatus.html | 256 ---- .../digitaltwin/core/CacheResult.html | 163 --- .../digitaltwin/core/DigitalTwinBase.html | 305 ----- .../core/DigitalTwinTimerMessage.html | 248 ---- .../digitaltwin/core/InitContext.html | 248 ---- .../core/InitSimulationContext.html | 148 --- .../digitaltwin/core/MessageFactory.html | 133 -- .../digitaltwin/core/MessageProcessor.html | 228 ---- .../core/MessageProcessorBase.html | 187 --- .../digitaltwin/core/ModelSchema.html | 772 ----------- .../digitaltwin/core/PersistenceProvider.html | 471 ------- .../core/PersistenceProviderType.html | 338 ----- .../digitaltwin/core/ProcessingContext.html | 592 --------- .../digitaltwin/core/ProcessingResult.html | 223 ---- .../digitaltwin/core/SendingResult.html | 235 ---- .../digitaltwin/core/SharedData.html | 188 --- .../core/SimulationController.html | 430 ------- .../digitaltwin/core/SimulationProcessor.html | 232 ---- .../digitaltwin/core/SimulationStatus.html | 278 ---- .../digitaltwin/core/TimerActionResult.html | 279 ---- .../digitaltwin/core/TimerHandler.html | 144 --- .../digitaltwin/core/TimerMetadata.html | 233 ---- .../digitaltwin/core/TimerType.html | 223 ---- .../digitaltwin/core/package-summary.html | 191 --- .../digitaltwin/core/package-tree.html | 115 -- .../digitaltwin/development/LogMessage.html | 170 --- .../development/SimulationEventResult.html | 127 -- .../development/SimulationStep.html | 154 --- .../digitaltwin/development/Workbench.html | 872 ------------- .../development/WorkbenchException.html | 221 ---- .../development/package-summary.html | 108 -- .../digitaltwin/development/package-tree.html | 82 -- docs/digitaltwin-core-docs/LICENSE | 201 --- docs/digitaltwin-core-docs/build.gradle | 59 - .../build/docs/javadoc/allclasses-index.html | 192 --- .../build/docs/javadoc/allpackages-index.html | 69 - .../digitaltwin/core/AlertMessage.html | 263 ---- .../core/AlertProviderConfiguration.html | 293 ----- .../core/CacheOperationStatus.html | 256 ---- .../digitaltwin/core/CacheResult.html | 163 --- .../digitaltwin/core/DigitalTwinBase.html | 305 ----- .../core/DigitalTwinTimerMessage.html | 248 ---- .../digitaltwin/core/InitContext.html | 248 ---- .../core/InitSimulationContext.html | 148 --- .../digitaltwin/core/MessageFactory.html | 133 -- .../digitaltwin/core/MessageProcessor.html | 228 ---- .../core/MessageProcessorBase.html | 187 --- .../digitaltwin/core/ModelSchema.html | 772 ----------- .../digitaltwin/core/PersistenceProvider.html | 471 ------- .../core/PersistenceProviderType.html | 338 ----- .../digitaltwin/core/ProcessingContext.html | 592 --------- .../digitaltwin/core/ProcessingResult.html | 223 ---- .../digitaltwin/core/SendingResult.html | 235 ---- .../digitaltwin/core/SharedData.html | 188 --- .../core/SimulationController.html | 430 ------- .../digitaltwin/core/SimulationProcessor.html | 232 ---- .../digitaltwin/core/SimulationStatus.html | 278 ---- .../digitaltwin/core/TimerActionResult.html | 279 ---- .../digitaltwin/core/TimerHandler.html | 144 --- .../digitaltwin/core/TimerMetadata.html | 233 ---- .../digitaltwin/core/TimerType.html | 223 ---- .../digitaltwin/core/package-summary.html | 191 --- .../digitaltwin/core/package-tree.html | 115 -- .../digitaltwin/development/LogMessage.html | 170 --- .../development/SimulationEventResult.html | 127 -- .../development/SimulationStep.html | 154 --- .../digitaltwin/development/Workbench.html | 872 ------------- .../development/WorkbenchException.html | 221 ---- .../development/package-summary.html | 108 -- .../digitaltwin/development/package-tree.html | 82 -- .../build/docs/javadoc/element-list | 2 - .../build/docs/javadoc/help-doc.html | 180 --- .../build/docs/javadoc/index-all.html | 1137 ----------------- .../build/docs/javadoc/index.html | 71 - .../docs/javadoc/jquery-ui.overrides.css | 34 - .../javadoc/legal/ADDITIONAL_LICENSE_INFO | 1 - .../docs/javadoc/legal/ASSEMBLY_EXCEPTION | 1 - .../build/docs/javadoc/legal/LICENSE | 1 - .../build/docs/javadoc/legal/jquery.md | 72 -- .../build/docs/javadoc/legal/jqueryUI.md | 49 - .../build/docs/javadoc/member-search-index.js | 1 - .../build/docs/javadoc/module-search-index.js | 1 - .../build/docs/javadoc/overview-summary.html | 25 - .../build/docs/javadoc/overview-tree.html | 129 -- .../docs/javadoc/package-search-index.js | 1 - .../build/docs/javadoc/resources/glass.png | Bin 499 -> 0 bytes .../build/docs/javadoc/resources/x.png | Bin 394 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 335 -> 0 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 332 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 280 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_454545_256x240.png | Bin 6992 -> 0 bytes .../images/ui-icons_888888_256x240.png | Bin 6999 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 4549 -> 0 bytes .../javadoc/script-dir/jquery-3.5.1.min.js | 2 - .../docs/javadoc/script-dir/jquery-ui.min.css | 7 - .../docs/javadoc/script-dir/jquery-ui.min.js | 6 - .../script-dir/jquery-ui.structure.min.css | 5 - .../build/docs/javadoc/script.js | 132 -- .../build/docs/javadoc/search.js | 354 ----- .../build/docs/javadoc/serialized-form.html | 160 --- .../build/docs/javadoc/stylesheet.css | 865 ------------- .../build/docs/javadoc/tag-search-index.js | 1 - .../build/docs/javadoc/type-search-index.js | 1 - .../SimulationWorker.class.uniqueId0 | Bin 12234 -> 0 bytes .../stash-dir/Workbench.class.uniqueId6 | Bin 20564 -> 0 bytes .../WorkbenchInitContext.class.uniqueId5 | Bin 3017 -> 0 bytes ...WorkbenchProcessingContext.class.uniqueId3 | Bin 11067 -> 0 bytes .../WorkbenchSharedData$1.class.uniqueId8 | Bin 1702 -> 0 bytes .../WorkbenchSharedData$2.class.uniqueId4 | Bin 1441 -> 0 bytes .../WorkbenchSharedData$3.class.uniqueId7 | Bin 1515 -> 0 bytes .../WorkbenchSharedData$4.class.uniqueId1 | Bin 1288 -> 0 bytes .../WorkbenchSharedData.class.uniqueId2 | Bin 2145 -> 0 bytes .../compileJava/previous-compilation-data.bin | Bin 7453 -> 0 bytes .../build/tmp/createJavadocs/javadoc.options | 58 - .../build/tmp/jar/MANIFEST.MF | 2 - .../build/tmp/javadocJar/MANIFEST.MF | 2 - .../gradle/wrapper/gradle-wrapper.jar | Bin 60756 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 5 - docs/digitaltwin-core-docs/pom.xml | 29 + docs/digitaltwin-core-docs/settings.gradle | 2 - .../digitaltwin/core/AlertMessage.java | 99 -- .../core/AlertProviderConfiguration.java | 128 -- .../core/CacheOperationStatus.java | 48 - .../digitaltwin/core/CacheResult.java | 39 - .../digitaltwin/core/DigitalTwinBase.java | 95 -- .../core/DigitalTwinTimerMessage.java | 84 -- .../digitaltwin/core/InitContext.java | 67 - .../core/InitSimulationContext.java | 21 - .../digitaltwin/core/MessageFactory.java | 29 - .../digitaltwin/core/MessageProcessor.java | 56 - .../core/MessageProcessorBase.java | 38 - .../digitaltwin/core/ModelSchema.java | 785 ------------ .../digitaltwin/core/PersistenceProvider.java | 162 --- .../core/PersistenceProviderType.java | 125 -- .../digitaltwin/core/ProcessingContext.java | 243 ---- .../digitaltwin/core/ProcessingResult.java | 30 - .../digitaltwin/core/SendingResult.java | 35 - .../digitaltwin/core/SharedData.java | 49 - .../core/SimulationController.java | 190 --- .../digitaltwin/core/SimulationProcessor.java | 66 - .../digitaltwin/core/SimulationStatus.java | 50 - .../digitaltwin/core/TimerActionResult.java | 79 -- .../digitaltwin/core/TimerHandler.java | 33 - .../digitaltwin/core/TimerMetadata.java | 76 -- .../digitaltwin/core/TimerType.java | 30 - .../digitaltwin/core/package-info.java | 21 - .../digitaltwin/development/Constants.java | 99 -- .../digitaltwin/development/LogMessage.java | 56 - .../digitaltwin/development/ProxyState.java | 25 - .../development/SimulationEvent.java | 69 - .../development/SimulationEventResult.java | 22 - .../development/SimulationEventTimerImpl.java | 63 - .../development/SimulationEventTwinImpl.java | 93 -- .../development/SimulationScheduler.java | 177 --- .../development/SimulationStep.java | 57 - .../development/SimulationStepArgs.java | 40 - .../development/SimulationTime.java | 36 - .../development/SimulationWorker.java | 229 ---- .../development/TwinExecutionEngine.java | 439 ------- .../digitaltwin/development/TwinProxy.java | 52 - .../digitaltwin/development/Workbench.java | 769 ----------- .../development/WorkbenchException.java | 66 - .../development/WorkbenchInitContext.java | 59 - .../WorkbenchInitSimulationContext.java | 39 - .../WorkbenchMessageListFactory.java | 67 - .../WorkbenchProcessingContext.java | 237 ---- .../development/WorkbenchSharedData.java | 112 -- .../WorkbenchSimulationController.java | 182 --- .../development/WorkbenchSimulationFlags.java | 25 - .../development/WorkbenchTimerService.java | 65 - .../development/WorkbenchTimerTask.java | 63 - .../digitaltwin/development/package-info.java | 21 - .../development/TestWorkbench.java | 873 ------------- docs/element-list | 2 - docs/help-doc.html | 180 --- docs/index-all.html | 1137 ----------------- docs/index.html | 71 - docs/jquery-ui.overrides.css | 34 - docs/legal/ADDITIONAL_LICENSE_INFO | 1 - docs/legal/ASSEMBLY_EXCEPTION | 1 - docs/legal/LICENSE | 1 - docs/legal/jquery.md | 72 -- docs/legal/jqueryUI.md | 49 - docs/member-search-index.js | 1 - docs/module-search-index.js | 1 - docs/overview-summary.html | 25 - docs/overview-tree.html | 129 -- docs/package-search-index.js | 1 - docs/resources/glass.png | Bin 499 -> 0 bytes docs/resources/x.png | Bin 394 -> 0 bytes .../images/ui-bg_glass_55_fbf9ee_1x400.png | Bin 335 -> 0 bytes .../images/ui-bg_glass_65_dadada_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_75_dadada_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_75_e6e6e6_1x400.png | Bin 262 -> 0 bytes .../images/ui-bg_glass_95_fef1ec_1x400.png | Bin 332 -> 0 bytes .../ui-bg_highlight-soft_75_cccccc_1x100.png | Bin 280 -> 0 bytes .../images/ui-icons_222222_256x240.png | Bin 6922 -> 0 bytes .../images/ui-icons_2e83ff_256x240.png | Bin 4549 -> 0 bytes .../images/ui-icons_454545_256x240.png | Bin 6992 -> 0 bytes .../images/ui-icons_888888_256x240.png | Bin 6999 -> 0 bytes .../images/ui-icons_cd0a0a_256x240.png | Bin 4549 -> 0 bytes docs/script-dir/jquery-3.5.1.min.js | 2 - docs/script-dir/jquery-ui.min.css | 7 - docs/script-dir/jquery-ui.min.js | 6 - docs/script-dir/jquery-ui.structure.min.css | 5 - docs/script.js | 132 -- docs/search.js | 354 ----- docs/serialized-form.html | 160 --- docs/stylesheet.css | 865 ------------- docs/tag-search-index.js | 1 - docs/type-search-index.js | 1 - 220 files changed, 29 insertions(+), 32340 deletions(-) delete mode 100644 docs/allclasses-index.html delete mode 100644 docs/allpackages-index.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html delete mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html delete mode 100644 docs/digitaltwin-core-docs/LICENSE delete mode 100644 docs/digitaltwin-core-docs/build.gradle delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/element-list delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/index.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/jquery-ui.overrides.css delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/legal/ADDITIONAL_LICENSE_INFO delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/legal/ASSEMBLY_EXCEPTION delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/legal/LICENSE delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/legal/jquery.md delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/legal/jqueryUI.md delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/module-search-index.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/package-search-index.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/resources/glass.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/resources/x.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_65_dadada_1x400.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_75_dadada_1x400.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_222222_256x240.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_2e83ff_256x240.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_454545_256x240.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_888888_256x240.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_cd0a0a_256x240.png delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-3.5.1.min.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-ui.min.css delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-ui.min.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-ui.structure.min.css delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/script.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/search.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/stylesheet.css delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/tag-search-index.js delete mode 100644 docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$4.class.uniqueId1 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData.class.uniqueId2 delete mode 100644 docs/digitaltwin-core-docs/build/tmp/compileJava/previous-compilation-data.bin delete mode 100644 docs/digitaltwin-core-docs/build/tmp/createJavadocs/javadoc.options delete mode 100644 docs/digitaltwin-core-docs/build/tmp/jar/MANIFEST.MF delete mode 100644 docs/digitaltwin-core-docs/build/tmp/javadocJar/MANIFEST.MF delete mode 100644 docs/digitaltwin-core-docs/gradle/wrapper/gradle-wrapper.jar delete mode 100644 docs/digitaltwin-core-docs/gradle/wrapper/gradle-wrapper.properties create mode 100644 docs/digitaltwin-core-docs/pom.xml delete mode 100644 docs/digitaltwin-core-docs/settings.gradle delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java delete mode 100644 docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java delete mode 100644 docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java delete mode 100644 docs/element-list delete mode 100644 docs/help-doc.html delete mode 100644 docs/index-all.html delete mode 100644 docs/index.html delete mode 100644 docs/jquery-ui.overrides.css delete mode 100644 docs/legal/ADDITIONAL_LICENSE_INFO delete mode 100644 docs/legal/ASSEMBLY_EXCEPTION delete mode 100644 docs/legal/LICENSE delete mode 100644 docs/legal/jquery.md delete mode 100644 docs/legal/jqueryUI.md delete mode 100644 docs/member-search-index.js delete mode 100644 docs/module-search-index.js delete mode 100644 docs/overview-summary.html delete mode 100644 docs/overview-tree.html delete mode 100644 docs/package-search-index.js delete mode 100644 docs/resources/glass.png delete mode 100644 docs/resources/x.png delete mode 100644 docs/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png delete mode 100644 docs/script-dir/images/ui-bg_glass_65_dadada_1x400.png delete mode 100644 docs/script-dir/images/ui-bg_glass_75_dadada_1x400.png delete mode 100644 docs/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png delete mode 100644 docs/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png delete mode 100644 docs/script-dir/images/ui-bg_highlight-soft_75_cccccc_1x100.png delete mode 100644 docs/script-dir/images/ui-icons_222222_256x240.png delete mode 100644 docs/script-dir/images/ui-icons_2e83ff_256x240.png delete mode 100644 docs/script-dir/images/ui-icons_454545_256x240.png delete mode 100644 docs/script-dir/images/ui-icons_888888_256x240.png delete mode 100644 docs/script-dir/images/ui-icons_cd0a0a_256x240.png delete mode 100644 docs/script-dir/jquery-3.5.1.min.js delete mode 100644 docs/script-dir/jquery-ui.min.css delete mode 100644 docs/script-dir/jquery-ui.min.js delete mode 100644 docs/script-dir/jquery-ui.structure.min.css delete mode 100644 docs/script.js delete mode 100644 docs/search.js delete mode 100644 docs/serialized-form.html delete mode 100644 docs/stylesheet.css delete mode 100644 docs/tag-search-index.js delete mode 100644 docs/type-search-index.js diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html deleted file mode 100644 index a1e1471..0000000 --- a/docs/allclasses-index.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - -All Classes and Interfaces (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            All Classes and Interfaces

            -
            -
            -
            -
            -
            -
            Class
            -
            Description
            - -
            -
            A message that should be sent to a configured alert provider.
            -
            - -
            -
            Configuration for an alert provider.
            -
            - -
            -
            Status of a cache operation.
            -
            - -
            -
            Represents a response from a SharedData operation.
            -
            - -
            -
            A real-time digital twin of a data source.
            -
            - -
            -
            A message sent to a digital twin instance's message processor.
            -
            - -
            -
            The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing - digital twin.
            -
            - -
            -
            The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of - digital twin instance when a simulation is initializing.
            -
            - -
            -
            A messaged that was logged by a digital twin.
            -
            - -
            -
            Message list factory retrieves message lists for a MessageProcessor
            -
            - -
            -
            Processes messages for a real-time digital twin.
            -
            - -
            -
            Base class for the MessageProcessor to help with typing.
            -
            - -
            -
            The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - digital twin model to the real-time digital twin cloud service.
            -
            - -
            -
            An interface that can be used for persisting/retrieving the state of real-time digital twins.
            -
            - -
            -
            Available PersistenceProvider types.
            -
            - -
            -
            Context object that allows the user to send a message to a DataSource.
            -
            - -
            -
            The result from a message processor which indicates to update the state object or to ignore
            -
            - -
            -
            Marks a message as Delivered or not Delivered
            -
            - -
            -
            SharedData is used to access a model's, or globally, shared cache.
            -
            - -
            -
            The SimulationController interface is used to interact with the running DigitalTwin simulation.
            -
            - -
            -
            A simulation event result.
            -
            - -
            -
            Processes simulation events for a digital twin.
            -
            - -
            -
            The status of a simulation.
            -
            - -
            -
            The simulation step class encases the metadata for a completed interval of a simulation.
            -
            - -
            -
            The result of a timer action.
            -
            - -
            -
            Callback to a handle a timer message for a DigitalTwinBase.
            -
            - -
            -
            Metadata class for a timer.
            -
            - -
            -
            Enum representation of the available timer types
            -
            - -
            -
            The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
            -
            - -
            -
            A Workbench exception indicates that a real-time or simulated twin caused an exception.
            -
            -
            -
            -
            -
            -
            -
            - - diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html deleted file mode 100644 index cdc7533..0000000 --- a/docs/allpackages-index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - -All Packages (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            All Packages

            -
            -
            Package Summary
            -
            -
            Package
            -
            Description
            - -
            -
            Digital twin model API - Create a digital twin model.
            -
            - -
            -
            Digital twin development API - Develop and test simulation/real-time digital twins.
            -
            -
            -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html b/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html deleted file mode 100644 index 75ab8d8..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - -AlertMessage (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class AlertMessage

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            -
            -
            public class AlertMessage -extends Object
            -
            A message that should be sent to a configured alert provider.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                AlertMessage

                -
                public AlertMessage(String title, - String severity, - String message)
                -
                Construct an alert message with a title, severity, and custom message.
                -
                -
                Parameters:
                -
                title - the title for the alert message.
                -
                severity - the severity for this alert.
                -
                message - the custom message for this alert.
                -
                -
                -
              • -
              • -
                -

                AlertMessage

                -
                public AlertMessage(String title, - String severity, - String message, - HashMap<String,String> optProps)
                -
                Construct an alert message with a title, severity, and custom message.
                -
                -
                Parameters:
                -
                title - the title for the alert message.
                -
                severity - the severity for this alert.
                -
                message - the custom message for this alert.
                -
                optProps - the optional properties that should be sent to the alerting provider.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getTitle

                -
                public String getTitle()
                -
                Retrieve the title for this alert message.
                -
                -
                Returns:
                -
                the title of this alert message.
                -
                -
                -
              • -
              • -
                -

                getSeverity

                -
                public String getSeverity()
                -
                Retrieve the severity for this alert message.
                -
                -
                Returns:
                -
                the severity for this alert message.
                -
                -
                -
              • -
              • -
                -

                getMessage

                -
                public String getMessage()
                -
                Retrieve the message for this alert message.
                -
                -
                Returns:
                -
                the message for this alert message.
                -
                -
                -
              • -
              • -
                -

                getOptionalTwinInstanceProperties

                -
                public HashMap<String,String> getOptionalTwinInstanceProperties()
                -
                Retrieve the optional twin instance properties for this alert message.
                -
                -
                Returns:
                -
                the optional twin instance properties for this alert message.
                -
                -
                -
              • -
              • -
                -

                toString

                -
                public String toString()
                -
                -
                Overrides:
                -
                toString in class Object
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html b/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html deleted file mode 100644 index ae33977..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - -AlertProviderConfiguration (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class AlertProviderConfiguration

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public class AlertProviderConfiguration -extends Object -implements Serializable
            -
            Configuration for an alert provider.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                AlertProviderConfiguration

                -
                public AlertProviderConfiguration(String alertProviderType, - String url, - String integrationKey, - String routingKey, - String name, - String entityId)
                -
                Construct an alert provider configuration.
                -
                -
                Parameters:
                -
                alertProviderType - the alert provider type.
                -
                url - the alert provider URL where alerts should be posted.
                -
                integrationKey - the integration key.
                -
                routingKey - the routing key.
                -
                name - the name of the alert provider.
                -
                entityId - the entity Id.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getAlertProviderType

                -
                public String getAlertProviderType()
                -
                Retrieve the alert provider type for this configuration.
                -
                -
                Returns:
                -
                the alert provider type.
                -
                -
                -
              • -
              • -
                -

                getURL

                -
                public String getURL()
                -
                Retrieve the URL for this alert provider configuration.
                -
                -
                Returns:
                -
                the URL for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getIntegrationKey

                -
                public String getIntegrationKey()
                -
                Retrieve the integration key for this alert provider configuration.
                -
                -
                Returns:
                -
                the integration key for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getRoutingKey

                -
                public String getRoutingKey()
                -
                Retrieve the routing key for this alert provider configuration.
                -
                -
                Returns:
                -
                the routing key for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getName

                -
                public String getName()
                -
                Retrieve the name of this alert provider configuration.
                -
                -
                Returns:
                -
                the name of this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getEntityId

                -
                public String getEntityId()
                -
                Retrieve the entity ID for this alert provider configuration.
                -
                -
                Returns:
                -
                the entity ID for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                toString

                -
                public String toString()
                -
                -
                Overrides:
                -
                toString in class Object
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html deleted file mode 100644 index 9ff6c42..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - -CacheOperationStatus (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class CacheOperationStatus

            -
            -
            java.lang.Object -
            java.lang.Enum<CacheOperationStatus> -
            com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<CacheOperationStatus>, Constable
            -
            -
            -
            public enum CacheOperationStatus -extends Enum<CacheOperationStatus>
            -
            Status of a cache operation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                ObjectRetrieved

                -
                public static final CacheOperationStatus ObjectRetrieved
                -
                The object was successfully retrieved.
                -
                -
              • -
              • -
                -

                ObjectPut

                -
                public static final CacheOperationStatus ObjectPut
                -
                The object was successfully added/updated.
                -
                -
              • -
              • -
                -

                ObjectDoesNotExist

                -
                public static final CacheOperationStatus ObjectDoesNotExist
                -
                The object could not be retrieved because it was not found.
                -
                -
              • -
              • -
                -

                ObjectRemoved

                -
                public static final CacheOperationStatus ObjectRemoved
                -
                The object was removed successfully.
                -
                -
              • -
              • -
                -

                CacheCleared

                -
                public static final CacheOperationStatus CacheCleared
                -
                The cache was cleared successfully.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static CacheOperationStatus[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static CacheOperationStatus valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html deleted file mode 100644 index 9334a2c..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/CacheResult.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - -CacheResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface CacheResult

            -
            -
            -
            -
            public interface CacheResult
            -
            Represents a response from a SharedData operation.
            -
            -
            -
              - -
            • -
              -

              Method Summary

              -
              -
              -
              -
              -
              Modifier and Type
              -
              Method
              -
              Description
              - - -
              -
              Gets the key or null to the object associated with the result.
              -
              - - -
              -
              Gets the status of the cache operation.
              -
              -
              byte[]
              - -
              -
              Get the object returned from a Get operation.
              -
              -
              -
              -
              -
              -
            • -
            -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getKey

                -
                String getKey()
                -
                Gets the key or null to the object associated with the result.
                -
                -
                Returns:
                -
                the key or null.
                -
                -
                -
              • -
              • -
                -

                getValue

                -
                byte[] getValue()
                -
                Get the object returned from a Get operation.
                -
                -
                Returns:
                -
                the object or null.
                -
                -
                -
              • -
              • -
                -

                getStatus

                - -
                Gets the status of the cache operation.
                -
                -
                Returns:
                -
                the operation status.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html deleted file mode 100644 index c013270..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - -DigitalTwinBase (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class DigitalTwinBase

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            -
            -
            public abstract class DigitalTwinBase -extends Object
            -
            A real-time digital twin of a data source. The implementation of the real-time DigitalTwin should have a parameterless constructor for - basic initialization.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Field Details

              - -
              -
            • - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                DigitalTwinBase

                -
                public DigitalTwinBase()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getNextSimulationTimeMs

                -
                public long getNextSimulationTimeMs()
                -
                Retrieve the next simulation time in milliseconds.
                -
                -
                Returns:
                -
                the next simulation time in milliseconds.
                -
                -
                -
              • -
              • -
                -

                setNextSimulationTime

                -
                public void setNextSimulationTime(long nextSimulationTime)
                -
                Set the next simulation time in milliseconds.
                -
                -
                Parameters:
                -
                nextSimulationTime - set the next simulation time.
                -
                -
                -
              • -
              • -
                -

                getId

                -
                public String getId()
                -
                The identifier of this DigitalTwin.
                -
                -
                Returns:
                -
                the identifier of this digital twin
                -
                -
                -
              • -
              • -
                -

                getModel

                -
                public String getModel()
                -
                The model for this DigitalTwin.
                -
                -
                Returns:
                -
                the model for this DigitalTwin
                -
                -
                -
              • -
              • -
                -

                init

                -
                public void init(InitContext context) - throws IllegalStateException
                -
                Initialization method to set the identifier and model for a DigitalTwin instance. Optionally use the - InitContext to start a timer.
                -
                -
                Parameters:
                -
                context - the initialization context.
                -
                Throws:
                -
                IllegalStateException - if init is called after initialization.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html b/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html deleted file mode 100644 index 71116ad..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - -DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class DigitalTwinTimerMessage

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            -
            -
            public class DigitalTwinTimerMessage -extends Object
            -
            A message sent to a digital twin instance's message processor.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                DigitalTwinTimerMessage

                -
                public DigitalTwinTimerMessage(String modelName, - String twinId, - int timerId, - String timerName, - TimerType timerType)
                -
                Construct a digital twin timer message.
                -
                -
                Parameters:
                -
                modelName - the digital twin model name.
                -
                twinId - the digital twin instance ID
                -
                timerId - the timer ID
                -
                timerName - the timer name
                -
                timerType - the timer type
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getModelName

                -
                public String getModelName()
                -
                Retrieve the digital twin model name.
                -
                -
                Returns:
                -
                the digital twin model name.
                -
                -
                -
              • -
              • -
                -

                getTwinId

                -
                public String getTwinId()
                -
                Retrieve the digital twin ID.
                -
                -
                Returns:
                -
                the digital twin ID.
                -
                -
                -
              • -
              • -
                -

                getTimerId

                -
                public int getTimerId()
                -
                Retrieve the timer ID.
                -
                -
                Returns:
                -
                the timer ID.
                -
                -
                -
              • -
              • -
                -

                getTimerName

                -
                public String getTimerName()
                -
                Retrieve the timer name.
                -
                -
                Returns:
                -
                the timer name.
                -
                -
                -
              • -
              • -
                -

                getTimerType

                -
                public TimerType getTimerType()
                -
                Retrieve the TimerType.
                -
                -
                Returns:
                -
                the TimerType
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html deleted file mode 100644 index 4d362ae..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/InitContext.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - -InitContext (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class InitContext

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            -
            -
            public abstract class InitContext -extends Object
            -
            The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing - digital twin.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                InitContext

                -
                public InitContext()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                startTimer

                -
                public abstract <T extends DigitalTwinBase> -TimerActionResult startTimer(String timerName, - Duration interval, - TimerType timerType, - TimerHandler<T> timerHandler)
                -
                Starts a new timer for the digital twin
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin
                -
                Parameters:
                -
                timerName - the timer name
                -
                interval - the timer interval
                -
                timerType - the timer type
                -
                timerHandler - the time handler callback
                -
                Returns:
                -
                returns TimerActionResult.Success if the timer was started, TimerActionResult.FailedTooManyTimers - if too many timers exist, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                -
                -
                -
              • -
              • -
                -

                getSharedModelData

                -
                public abstract SharedData getSharedModelData()
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                public abstract SharedData getSharedGlobalData()
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getId

                -
                public abstract String getId()
                -
                Get the model-unique Id identifier of the initializing digital twin instance.
                -
                -
                Returns:
                -
                the id identifier.
                -
                -
                -
              • -
              • -
                -

                getModel

                -
                public abstract String getModel()
                -
                Get the Model identifier of the initializing digital twin instance.
                -
                -
                Returns:
                -
                the model identifier.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html deleted file mode 100644 index 0640172..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - -InitSimulationContext (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface InitSimulationContext

            -
            -
            -
            -
            public interface InitSimulationContext
            -
            The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of - digital twin instance when a simulation is initializing.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getSharedModelData

                -
                SharedData getSharedModelData()
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                SharedData getSharedGlobalData()
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html deleted file mode 100644 index b9941e1..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -MessageFactory (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface MessageFactory

            -
            -
            -
            -
            public interface MessageFactory
            -
            Message list factory retrieves message lists for a MessageProcessor
            -
            -
            -
              - -
            • -
              -

              Method Summary

              -
              -
              -
              -
              -
              Modifier and Type
              -
              Method
              -
              Description
              -
              <V> Iterable<V>
              - -
              -
              Returns all incoming messages
              -
              -
              -
              -
              -
              -
            • -
            -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getIncomingMessages

                -
                <V> Iterable<V> getIncomingMessages()
                -
                Returns all incoming messages
                -
                -
                Type Parameters:
                -
                V - the type of incoming messages
                -
                Returns:
                -
                an iterable of incoming messages
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html deleted file mode 100644 index 87308d2..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - -MessageProcessor (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class MessageProcessor<T extends DigitalTwinBase,V>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase<T> -
            com.scaleoutsoftware.digitaltwin.core.MessageProcessor<T,V>
            -
            -
            -
            -
            -
            Type Parameters:
            -
            T - the real type of the DigitalTwinBase
            -
            V - the type of messages processed by the real-time digital twin
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public abstract class MessageProcessor<T extends DigitalTwinBase,V> -extends MessageProcessorBase<T> -implements Serializable
            -
            Processes messages for a real-time digital twin.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                MessageProcessor

                -
                public MessageProcessor()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                processMessages

                -
                public abstract ProcessingResult processMessages(ProcessingContext context, - T stateObject, - Iterable<V> incomingMessages) - throws Exception
                -
                Processes a set of incoming messages and determines whether to update the real-time digital twin.
                -
                -
                Parameters:
                -
                context - optional context for processing.
                -
                stateObject - the state object.
                -
                incomingMessages - the incoming messages.
                -
                Returns:
                -
                processing results for updating the state object.
                -
                Throws:
                -
                Exception - if an exception occurs during processing
                -
                -
                -
              • -
              • -
                -

                processMessages

                -
                public ProcessingResult processMessages(ProcessingContext context, - T twin, - MessageFactory factory) - throws Exception
                -
                Helper method to ensure proper typing for user methods.
                -
                -
                Specified by:
                -
                processMessages in class MessageProcessorBase<T extends DigitalTwinBase>
                -
                Parameters:
                -
                context - the processing context.
                -
                twin - the digital twin object.
                -
                factory - the message list factory.
                -
                Returns:
                -
                the implementing class's processing result.
                -
                Throws:
                -
                Exception - if an exception occurs during processing.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html b/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html deleted file mode 100644 index d9eca63..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - -MessageProcessorBase (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class MessageProcessorBase<T extends DigitalTwinBase>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase<T>
            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the DigitalTwin
            -
            -
            -
            Direct Known Subclasses:
            -
            MessageProcessor
            -
            -
            -
            public abstract class MessageProcessorBase<T extends DigitalTwinBase> -extends Object
            -
            Base class for the MessageProcessor to help with typing.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                MessageProcessorBase

                -
                public MessageProcessorBase()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                processMessages

                -
                public abstract ProcessingResult processMessages(ProcessingContext context, - T twin, - MessageFactory messageListFactory) - throws Exception
                -
                Helper method to ensure proper typing for the user methods.
                -
                -
                Parameters:
                -
                context - the processing context
                -
                twin - the real-time digital twin instance
                -
                messageListFactory - the message list factory
                -
                Returns:
                -
                the implementing class's processing result
                -
                Throws:
                -
                Exception - if an exception occurs during processing
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html b/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html deleted file mode 100644 index dd17e2c..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html +++ /dev/null @@ -1,772 +0,0 @@ - - - - -ModelSchema (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class ModelSchema

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            -
            -
            public class ModelSchema -extends Object
            -
            The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - digital twin model to the real-time digital twin cloud service.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass)
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String ep)
                -
                Model schema with a defined entry point.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                ep - the invocation grid entry point.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String ep, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                ep - the invocation grid entry point.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                ep - the invocation grid entry point.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                alertingProviders - the alerting provider configurations.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                alertingProviders - the alerting provider configurations.
                -
                ep - the invocation grid entry point.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                simulationProcessorClass - the simulation processor class implementation.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                simulationProcessorClass - the simulation processor class implementation.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - String ep, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                simulationProcessorClass - the simulation processor class implementation.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                ep - the invocation grid entry point.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getModelType

                -
                public String getModelType()
                -
                Retrieve the digital twin model type (a DigitalTwinBase implementation).
                -
                -
                Returns:
                -
                the model type.
                -
                -
                -
              • -
              • -
                -

                getMessageType

                -
                public String getMessageType()
                -
                Retrieve the message type (JSON serializable message implementation).
                -
                -
                Returns:
                -
                the message type.
                -
                -
                -
              • -
              • -
                -

                getMessageProcessorType

                -
                public String getMessageProcessorType()
                -
                Retrieve the message processor type (a MessageProcessor implementation).
                -
                -
                Returns:
                -
                the message processor type.
                -
                -
                -
              • -
              • -
                -

                getSimulationProcessorType

                -
                public String getSimulationProcessorType()
                -
                Retrieve the simulation processor type (a SimulationProcessor implementation).
                -
                -
                Returns:
                -
                the simulation processor type.
                -
                -
                -
              • -
              • -
                -

                getAssemblyName

                -
                public String getAssemblyName()
                -
                NOT USED BY JAVA MODEL SCHEMA
                -
                -
                Returns:
                -
                NOT USED BY JAVA MODEL SCHEMA
                -
                -
                -
              • -
              • -
                -

                getAlertProviders

                -
                public List<AlertProviderConfiguration> getAlertProviders()
                -
                Retrieve the alert provider configurations.
                -
                -
                Returns:
                -
                the alert provider configurations.
                -
                -
                -
              • -
              • -
                -

                getAzureDigitalTwinModelName

                -
                public String getAzureDigitalTwinModelName()
                -
                Retrieve the Azure Digital Twin model name.
                -
                -
                Returns:
                -
                the Azure Digital Twin model name.
                -
                -
                -
              • -
              • -
                -

                persistenceEnabled

                -
                public boolean persistenceEnabled()
                -
                Retrieve persistence status. True if persistence is enabled, false otherwise.
                -
                -
                Returns:
                -
                True if persistence is enabled, false otherwise.
                -
                -
                -
              • -
              • -
                -

                simulationSupportEnabled

                -
                public boolean simulationSupportEnabled()
                -
                Retrieve simulation support enabled status. True if simulation support is enabled, false otherwise.
                -
                -
                Returns:
                -
                True if simulation support is enabled, false otherwise.
                -
                -
                -
              • -
              • -
                -

                getPersistenceProvider

                -
                public PersistenceProviderType getPersistenceProvider()
                -
                Retrieve the persistence provider type.
                -
                -
                Returns:
                -
                the persistence provider type.
                -
                -
                -
              • -
              • -
                -

                messageRecordingEnabled

                -
                public boolean messageRecordingEnabled()
                -
                Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, - false otherwise.
                -
                -
                Returns:
                -
                True if message recording is enabled, false otherwise.
                -
                -
                -
              • -
              • -
                -

                getEntryPoint

                -
                public String getEntryPoint()
                -
                Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
                -
                -
                Returns:
                -
                the entry point for launching.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html deleted file mode 100644 index 214c380..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - -PersistenceProvider (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface PersistenceProvider

            -
            -
            -
            -
            public interface PersistenceProvider
            -
            An interface that can be used for persisting/retrieving the state of real-time digital twins.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                isActive

                -
                boolean isActive()
                -
                Returns true if this PersistenceProvider is active, false otherwise.
                -
                -
                Returns:
                -
                true if this PersistenceProvider is active, false otherwise.
                -
                -
                -
              • -
              • -
                -

                getProviderType

                -
                PersistenceProviderType getProviderType()
                -
                Retrieves this persistence providers type. Currently supported provider types: AzureDigitalTwins.
                -
                -
                Returns:
                -
                the persistence provider type.
                -
                -
                -
              • -
              • -
                -

                getInstanceIdsAsync

                -
                CompletableFuture<List<String>> getInstanceIdsAsync(String containerName)
                -
                Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a future that will return a list of instances.
                -
                -
                -
              • -
              • -
                -

                getInstanceIds

                -
                List<String> getInstanceIds(String containerName)
                -
                Retrieves the instance IDs stored in a container, or an empty list if no instances exist.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a list of instances.
                -
                -
                -
              • -
              • -
                -

                getInstanceAsync

                -
                CompletableFuture<String> getInstanceAsync(String containerName, - String instanceId)
                -
                Retrieves a future that when complete will return an instance or null if it doesn't exist.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance identifier.
                -
                Returns:
                -
                a future that will return an instance or null.
                -
                -
                -
              • -
              • -
                -

                getInstance

                -
                String getInstance(String containerName, - String instanceId)
                -
                Retrieves an instance or null if it doesn't exist.
                -
                -
                Parameters:
                -
                containerName - the container name
                -
                instanceId - the instance identifier
                -
                Returns:
                -
                the instance or null.
                -
                -
                -
              • -
              • -
                -

                getPropertyMapAsync

                -
                CompletableFuture<Map<String,String>> getPropertyMapAsync(String containerName)
                -
                Retrieves a future that will return a map of property names to property, or an empty map.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a future that will return a map of property names to property types.
                -
                -
                -
              • -
              • -
                -

                getPropertyMap

                -
                Map<String,String> getPropertyMap(String containerName)
                -
                Retrieves a map of property names to property types, or an empty map.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a map of property names to property types.
                -
                -
                -
              • -
              • -
                -

                updatePropertyAsync

                -
                CompletableFuture<Void> updatePropertyAsync(String containerName, - String instanceId, - String propertyName, - Object propertyValue)
                -
                Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated. - Updates a property for the provided instance id in the provided container specified by the property name and property value.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                Returns:
                -
                a future that will complete exceptionally or return void.
                -
                -
                -
              • -
              • -
                -

                updateProperty

                -
                void updateProperty(String containerName, - String instanceId, - String propertyName, - Object propertyValue)
                -
                Updates a property for the provided instance id in the provided container specified by the property name and property value.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                -
                -
              • -
              • -
                -

                getPropertyAsync

                -
                <T> CompletableFuture<T> getPropertyAsync(String containerName, - String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a future that will return a property or null if the property does not exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                clazz - the class representing the property.
                -
                Returns:
                -
                the property or null if the property does not exist.
                -
                -
                -
              • -
              • -
                -

                getProperty

                -
                <T> T getProperty(String containerName, - String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a property or null if the property does not exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return.
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name
                -
                clazz - the class representing the property.
                -
                Returns:
                -
                the property or null if the property does not exist.
                -
                -
                -
              • -
              • -
                -

                updateRtdtPropertyAsync

                -
                CompletableFuture<Void> updateRtdtPropertyAsync(String instanceId, - String propertyName, - Object propertyValue)
                -
                Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated. - Updates a RTDT property for the provided instance id specified by the property name and property value.
                -
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                Returns:
                -
                a future that will complete exceptionally or return void.
                -
                -
                -
              • -
              • -
                -

                updateRtdtProperty

                -
                void updateRtdtProperty(String instanceId, - String propertyName, - Object propertyValue)
                -
                Updates a RTDT property for the provided instance id specified by the property name and property value.
                -
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                -
                -
              • -
              • -
                -

                getRtdtPropertyAsync

                -
                <T> CompletableFuture<T> getRtdtPropertyAsync(String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return.
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                clazz - the class of the property type
                -
                Returns:
                -
                a future that will return a property value for a RTDT instance.
                -
                -
                -
              • -
              • -
                -

                getRtdtProperty

                -
                <T> T getRtdtProperty(String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a property for a RTDT instance or null if the property does not exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return.
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                clazz - the class of the property type.
                -
                Returns:
                -
                the property value.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html b/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html deleted file mode 100644 index cff66a9..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - -PersistenceProviderType (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class PersistenceProviderType

            -
            -
            java.lang.Object -
            java.lang.Enum<PersistenceProviderType> -
            com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<PersistenceProviderType>, Constable
            -
            -
            -
            public enum PersistenceProviderType -extends Enum<PersistenceProviderType> -implements Serializable
            -
            Available PersistenceProvider types.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              - -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static PersistenceProviderType[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static PersistenceProviderType valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              • -
                -

                getName

                -
                public String getName()
                -
                Retrieve the name of the persistence provider type.
                -
                -
                Returns:
                -
                the name of the persistence provider type.
                -
                -
                -
              • -
              • -
                -

                getServiceOrdinalValue

                -
                public int getServiceOrdinalValue()
                -
                Retrieve the ordinal value (used by the DTBuidler service).
                -
                -
                Returns:
                -
                the ordinal value.
                -
                -
                -
              • -
              • -
                -

                fromString

                -
                public static PersistenceProviderType fromString(String name)
                -
                Return the PersistenceProviderType from a string value. We do not rely on Java's naming - because the string values need to be cross-platform and the names may be different in each language.
                -
                -
                Parameters:
                -
                name - the enums name.
                -
                Returns:
                -
                the associated PersistenceProviderType, or null if no association exists.
                -
                -
                -
              • -
              • -
                -

                fromOrdinal

                -
                public static PersistenceProviderType fromOrdinal(int ordinal)
                -
                Return the PersistenceProviderType from an ordinal value. We do not rely on Java's ordering - because the ordinal values need to be cross-platform, and the values may be ordered differently.
                -
                -
                Parameters:
                -
                ordinal - the enums ordinal value.
                -
                Returns:
                -
                the associated PersistenceProviderType, or null if no association exists.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html deleted file mode 100644 index ea553fe..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - -ProcessingContext (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class ProcessingContext

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public abstract class ProcessingContext -extends Object -implements Serializable
            -
            Context object that allows the user to send a message to a DataSource.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                ProcessingContext

                -
                public ProcessingContext()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                sendToDataSource

                -
                public abstract SendingResult sendToDataSource(byte[] payload)
                -

                - Sends a message to a data source. This will route messages through the connector back to the data source. -

                - -

                - if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - of the MessageProcessor. -

                -
                -
                Parameters:
                -
                payload - the message (as a serialized JSON string)
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDataSource

                -
                public abstract SendingResult sendToDataSource(Object jsonSerializableMessage)
                -

                - Sends a message to a data source. This will route messages through the connector back to the data source. -

                - -

                - if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - of the MessageProcessor. -

                -
                -
                Parameters:
                -
                jsonSerializableMessage - a JSON serializable message.
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDataSource

                -
                public abstract SendingResult sendToDataSource(List<Object> jsonSerializableMessages)
                -

                - Sends a list of messages to a data source. This will route messages through the connector back to the data source. -

                - -

                - if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - of the MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable). -

                -
                -
                Parameters:
                -
                jsonSerializableMessages - a list of JSON serializable messages.
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - byte[] payload)
                -

                - This method sends a serialized JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                payload - the serialized JSON message
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - Object jsonSerializableMessage)
                -

                - This method sends a serialized JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                jsonSerializableMessage - a JSON serializable message object
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - String payload)
                -

                - This method sends a JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                payload - the JSON message
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - List<byte[]> payload)
                -

                - This method sends a list of serialized JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                payload - the JSON message
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendAlert

                -
                public abstract SendingResult sendAlert(String alertingProviderName, - AlertMessage alert)
                -

                - This method sends an alert message to supported systems. -

                - -

                - When a model is deployed, an optional alerting provider configuration can be supplied. The provider name corresponds - to the name of the configured alerting provider. For example, if an alerting provider configuration is called - "SREPod1", then the processing context will send an alert message to the alerting provider configured with the name - "SREPod1". -

                - -

                - If the message cannot be sent then SendingResult.NotHandled will be returned. If the message is sent - and in process of sending then SendingResult.Enqueued will be returned. Once the message is successfully sent - then the returned enum will be changed to SendingResult.Handled. -

                -
                -
                Parameters:
                -
                alertingProviderName - the alerting provider name. Note, must match a valid configuration.
                -
                alert - the alert message.
                -
                Returns:
                -
                the sending result.
                -
                -
                -
              • -
              • -
                -

                getPersistenceProvider

                -
                public abstract PersistenceProvider getPersistenceProvider()
                -
                Returns the configured persistence provider or null if no persistence provider configuration can be found.
                -
                -
                Returns:
                -
                a PersistenceProvider .
                -
                -
                -
              • -
              • -
                -

                getDataSourceId

                -
                public abstract String getDataSourceId()
                -
                Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID)
                -
                -
                Returns:
                -
                the digital twin id
                -
                -
                -
              • -
              • -
                -

                getDigitalTwinModel

                -
                public abstract String getDigitalTwinModel()
                -
                Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin)
                -
                -
                Returns:
                -
                the digital twin model
                -
                -
                -
              • -
              • -
                -

                logMessage

                -
                public abstract void logMessage(Level severity, - String message)
                -
                Logs a message to the real-time digital twin cloud service. - - Note: the only supported severity levels are: INFO, WARN, and SEVERE
                -
                -
                Parameters:
                -
                severity - the severity of the log message
                -
                message - the message to log
                -
                -
                -
              • -
              • -
                -

                startTimer

                -
                public abstract <T extends DigitalTwinBase> -TimerActionResult startTimer(String timerName, - Duration interval, - TimerType timerType, - TimerHandler<T> timerHandler)
                -
                Starts a new timer for the digital twin
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin
                -
                Parameters:
                -
                timerName - the timer name
                -
                interval - the timer interval
                -
                timerType - the timer type
                -
                timerHandler - the time handler callback
                -
                Returns:
                -
                returns TimerActionResult.Success if the timer was started, TimerActionResult.FailedTooManyTimers - if too many timers exist, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                -
                -
                -
              • -
              • -
                -

                stopTimer

                -
                public abstract TimerActionResult stopTimer(String timerName)
                -
                Stops the specified timer.
                -
                -
                Parameters:
                -
                timerName - the timer name.
                -
                Returns:
                -
                returns TimerActionResult.Success if the timer was stopped, TimerActionResult.FailedNoSuchTimer - if no timer exists with that name, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                -
                -
                -
              • -
              • -
                -

                getCurrentTime

                -
                public abstract Date getCurrentTime()
                -
                Retrieves the current time. If the model (simulation or real-time) is running inside of a simulation then the - simulation time will be returned.
                -
                -
                Returns:
                -
                The current time (real time, or simulation if running under simulation).
                -
                -
                -
              • -
              • -
                -

                getSimulationController

                -
                public abstract SimulationController getSimulationController()
                -
                Retrieve the running SimulationController or null if no simulation is running.
                -
                -
                Returns:
                -
                the SimulationController or null if no simulation is running.
                -
                -
                -
              • -
              • -
                -

                getSharedModelData

                -
                public abstract SharedData getSharedModelData()
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                public abstract SharedData getSharedGlobalData()
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html deleted file mode 100644 index 99cf30d..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - -ProcessingResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class ProcessingResult

            -
            -
            java.lang.Object -
            java.lang.Enum<ProcessingResult> -
            com.scaleoutsoftware.digitaltwin.core.ProcessingResult
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<ProcessingResult>, Constable
            -
            -
            -
            public enum ProcessingResult -extends Enum<ProcessingResult>
            -
            The result from a message processor which indicates to update the state object or to ignore
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                UpdateDigitalTwin

                -
                public static final ProcessingResult UpdateDigitalTwin
                -
                Update the digital twin.
                -
                -
              • -
              • -
                -

                NoUpdate

                -
                public static final ProcessingResult NoUpdate
                -
                Do not update the digital twin.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static ProcessingResult[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static ProcessingResult valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html deleted file mode 100644 index 3bce6fe..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SendingResult.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - -SendingResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class SendingResult

            -
            -
            java.lang.Object -
            java.lang.Enum<SendingResult> -
            com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<SendingResult>, Constable
            -
            -
            -
            public enum SendingResult -extends Enum<SendingResult>
            -
            Marks a message as Delivered or not Delivered
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Handled

                -
                public static final SendingResult Handled
                -
                Handled indicates that a message was successfully sent and processed
                -
                -
              • -
              • -
                -

                Enqueued

                -
                public static final SendingResult Enqueued
                -
                Enqueued indicates that a message was successfully formed and then sent to an internal messaging service
                -
                -
              • -
              • -
                -

                NotHandled

                -
                public static final SendingResult NotHandled
                -
                NotHandled indicates that the message was not handled. This can occur if an exception occurs - in the message processor or if internal messaging service reached capacity.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static SendingResult[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static SendingResult valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html b/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html deleted file mode 100644 index a0da3b9..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SharedData.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - -SharedData (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface SharedData

            -
            -
            -
            -
            public interface SharedData
            -
            SharedData is used to access a model's, or globally, shared cache.
            -
            -
            -
              - -
            • -
              -

              Method Summary

              -
              -
              -
              -
              -
              Modifier and Type
              -
              Method
              -
              Description
              - - -
              -
              Clear the shared data cache.
              -
              - -
              get(String key)
              -
              -
              Retrieves an existing object from the cache.
              -
              - -
              put(String key, - byte[] value)
              -
              -
              Put a new key/value mapping into the cache.
              -
              - - -
              -
              Remove a key/value mapping from the cache.
              -
              -
              -
              -
              -
              -
            • -
            -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                get

                -
                CacheResult get(String key)
                -
                Retrieves an existing object from the cache.
                -
                -
                Parameters:
                -
                key - the key mapping to a value.
                -
                Returns:
                -
                A cache result.
                -
                -
                -
              • -
              • -
                -

                put

                -
                CacheResult put(String key, - byte[] value)
                -
                Put a new key/value mapping into the cache.
                -
                -
                Parameters:
                -
                key - the key mapping to a value.
                -
                value - the value.
                -
                Returns:
                -
                a cache result.
                -
                -
                -
              • -
              • -
                -

                remove

                -
                CacheResult remove(String key)
                -
                Remove a key/value mapping from the cache.
                -
                -
                Parameters:
                -
                key - the key mapping to a value.
                -
                Returns:
                -
                a cache result.
                -
                -
                -
              • -
              • -
                -

                clear

                -
                CacheResult clear()
                -
                Clear the shared data cache.
                -
                -
                Returns:
                -
                a cache result.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html deleted file mode 100644 index df4c127..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationController.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - -SimulationController (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface SimulationController

            -
            -
            -
            -
            public interface SimulationController
            -
            The SimulationController interface is used to interact with the running DigitalTwin simulation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getSimulationTimeIncrement

                -
                Duration getSimulationTimeIncrement()
                -

                - Retrieves the current simulation time increment. -

                -
                -
                Returns:
                -
                the simulation time increment.
                -
                -
                -
              • -
              • -
                -

                getSimulationStartTime

                -
                Date getSimulationStartTime()
                -

                - Retrieves the simulation start time. -

                -
                -
                Returns:
                -
                the simulation start time.
                -
                -
                -
              • -
              • -
                -

                delay

                -
                SendingResult delay(Duration duration)
                -

                - Delay simulation processing for this DigitalTwin instance for a duration of time. -

                - -

                - Simulation processing will be delayed for the duration specified relative to the current simulation time. -

                - -

                - Examples: -

                - -

                - at a current simulation time of 10, an interval of 20, and a delay of 40 -- the instance would - skip one cycle of processing and be processed at simulation time 50. -

                - -

                - at a current simulation time of 10, an interval of 20, and a delay of 30 -- the instance would - skip one cycle of processing and be processed at simulation time 50. -

                - -

                - at a current simulation time of 10, an interval of 20, and a delay of 50 -- the instance would - skip two cycles of processing and be processed at simulation time 70. -

                -
                -
                Parameters:
                -
                duration - the duration to delay.
                -
                Returns:
                -
                SendingResult.Handled if the delay was processed or SendingResult.NotHandled - if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                delayIndefinitely

                -
                SendingResult delayIndefinitely()
                -

                - Delay simulation processing for this DigitalTwin instance, indefinitely. -

                - -

                - Simulation processing will be delayed until this instance is run with runThisInstance(). -

                -
                -
                Returns:
                -
                SendingResult.Handled if the delay was processed or SendingResult.NotHandled - if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                emitTelemetry

                -
                SendingResult emitTelemetry(String modelName, - byte[] telemetryMessage)
                -

                - Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method. -

                -
                -
                Parameters:
                -
                modelName - the model to send the messages too.
                -
                telemetryMessage - a blob representing a JSON serialized messages.
                -
                Returns:
                -
                SendingResult.Handled if the messages were processed, SendingResult.Enqueued if - the messages are in process of being handled, or SendingResult.NotHandled if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                emitTelemetry

                -
                SendingResult emitTelemetry(String modelName, - Object jsonSerializableMessage)
                -

                - Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method. -

                -
                -
                Parameters:
                -
                modelName - the model to send the messages too.
                -
                jsonSerializableMessage - an object message that is JSON serializable.
                -
                Returns:
                -
                SendingResult.Handled if the messages were processed, SendingResult.Enqueued if - the messages are in process of being handled, or SendingResult.NotHandled if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                createInstance

                -
                <T extends DigitalTwinBase> SendingResult createInstance(String modelName, - String instanceId, - T base)
                -
                Create a new digital twin instance for simulation processing.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin to create.
                -
                Parameters:
                -
                modelName - the model name.
                -
                instanceId - the instance id.
                -
                base - the instance to create.
                -
                Returns:
                -
                SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance - is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                -
                -
                -
              • -
              • -
                -

                createInstanceFromPersistenceStore

                -
                SendingResult createInstanceFromPersistenceStore(String model, - String id)
                -
                Create a new digital twin instance for simulation processing from a persistence store. - - The twin instance will be loaded via model name and id from a persistence store. - - If no instance can be found, then an exception will be thrown and no instance will be created.
                -
                -
                Parameters:
                -
                model - The model name.
                -
                id - the instance id.
                -
                Returns:
                -
                SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance - is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                -
                -
                -
              • -
              • -
                -

                createInstanceFromPersistenceStore

                -
                <T extends DigitalTwinBase> SendingResult createInstanceFromPersistenceStore(String model, - String id, - T def)
                -
                The twin instance will be loaded via model name and id from a persistence store. - - The twin instance will be loaded via model name and id from a persistence store. - - If no instance can be found, then the default parameter instance will be used.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin to create.
                -
                Parameters:
                -
                model - the model name.
                -
                id - the instance id.
                -
                def - the default instance to create.
                -
                Returns:
                -
                SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance - * is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                -
                -
                -
              • -
              • -
                -

                deleteInstance

                -
                SendingResult deleteInstance(String modelName, - String instanceId)
                -
                Delete and remove a digital twin instance from simulation processing.
                -
                -
                Parameters:
                -
                modelName - the model name.
                -
                instanceId - the instance id.
                -
                Returns:
                -
                SendingResult.Handled if the instance was deleted, SendingResult.Enqueued if the instance - is in process of being deleted, or SendingResult.NotHandled if the instance could not be deleted.
                -
                -
                -
              • -
              • -
                -

                deleteThisInstance

                -
                SendingResult deleteThisInstance()
                -
                Delete and remove this digital twin instance from simulation processing.
                -
                -
                Returns:
                -
                this local request will always return SendingResult.Handled.
                -
                -
                -
              • -
              • -
                -

                runThisInstance

                -
                void runThisInstance()
                -
                Run this instance during this simulation step. The instance will be run using the models SimulationProcessor.processModel(ProcessingContext, DigitalTwinBase, Date) - implementation. - - This will cause the simulation sub-system to run this instance regardless of the instances current - DigitalTwinBase.NextSimulationTime.
                -
                -
              • -
              • -
                -

                stopSimulation

                -
                SimulationStatus stopSimulation()
                -
                Stop the simulation.
                -
                -
                Returns:
                -
                a SimulationStatus.InstanceRequestedStop.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html deleted file mode 100644 index 64de0a7..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - -SimulationProcessor (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class SimulationProcessor<T extends DigitalTwinBase>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.SimulationProcessor<T>
            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the digital twin.
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public abstract class SimulationProcessor<T extends DigitalTwinBase> -extends Object -implements Serializable
            -
            Processes simulation events for a digital twin.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                SimulationProcessor

                -
                public SimulationProcessor()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                processModel

                -
                public abstract ProcessingResult processModel(ProcessingContext context, - T instance, - Date epoch)
                -
                Processes simulation events for a real-time digital twin.
                -
                -
                Parameters:
                -
                context - the processing context.
                -
                instance - the digital twin instance.
                -
                epoch - the current time of the simulation.
                -
                Returns:
                -
                ProcessingResult.UpdateDigitalTwin to update the digital twin, or - ProcessingResult.NoUpdate to ignore the changes.
                -
                -
                -
              • -
              • -
                -

                onInitSimulation

                -
                public ProcessingResult onInitSimulation(InitSimulationContext context, - T instance, - Date epoch)
                -

                - Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. -

                - -

                - onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed - between simulation runs. -

                -
                  -
                • Set variables in global or shared data.
                • -
                • Run a simulation.
                • -
                • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
                • -
                • Complete simulation and evaluate the result.
                • -
                -
                -
                Parameters:
                -
                context - The simulation init context.
                -
                instance - The digital twin instance.
                -
                epoch - the simulation start time.
                -
                Returns:
                -
                ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate. Default behavior: ProcessingResult.NoUpdate.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html deleted file mode 100644 index 95a1b09..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - -SimulationStatus (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class SimulationStatus

            -
            -
            java.lang.Object -
            java.lang.Enum<SimulationStatus> -
            com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<SimulationStatus>, Constable
            -
            -
            -
            public enum SimulationStatus -extends Enum<SimulationStatus>
            -
            The status of a simulation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Running

                -
                public static final SimulationStatus Running
                -
                The simulation is running.
                -
                -
              • -
              • -
                -

                NotSet

                -
                public static final SimulationStatus NotSet
                -
                The simulation status is not set.
                -
                -
              • -
              • -
                -

                UserRequested

                -
                public static final SimulationStatus UserRequested
                -
                The user requested a stop.
                -
                -
              • -
              • -
                -

                EndTimeReached

                -
                public static final SimulationStatus EndTimeReached
                -
                The simulation end time has been reached.
                -
                -
              • -
              • -
                -

                NoRemainingWork

                -
                public static final SimulationStatus NoRemainingWork
                -
                There is no remaining work for the simulation.
                -
                -
              • -
              • -
                -

                InstanceRequestedStop

                -
                public static final SimulationStatus InstanceRequestedStop
                -
                A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
                -
                -
              • -
              • -
                -

                UnexpectedChangeInConfiguration

                -
                public static final SimulationStatus UnexpectedChangeInConfiguration
                -
                There was a runtime-change of simulation configuration.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static SimulationStatus[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static SimulationStatus valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html deleted file mode 100644 index 9cb2a82..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - -TimerActionResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class TimerActionResult

            -
            -
            java.lang.Object -
            java.lang.Enum<TimerActionResult> -
            com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<TimerActionResult>, Constable
            -
            -
            -
            public enum TimerActionResult -extends Enum<TimerActionResult>
            -
            The result of a timer action.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Success

                -
                public static final TimerActionResult Success
                -
                The operation completed successfully.
                -
                -
              • -
              • -
                -

                FailedTooManyTimers

                -
                public static final TimerActionResult FailedTooManyTimers
                -
                Failed to start a new timer due to reaching the limit for a number of active timers.
                -
                -
              • -
              • -
                -

                FailedNoSuchTimer

                -
                public static final TimerActionResult FailedNoSuchTimer
                -
                Failed to stop the existing timer, the timer is no longer active.
                -
                -
              • -
              • -
                -

                FailedTimerAlreadyExists

                -
                public static final TimerActionResult FailedTimerAlreadyExists
                -
                Failed to start the timer, the timer with the specified name already exists.
                -
                -
              • -
              • -
                -

                FailedInternalError

                -
                public static final TimerActionResult FailedInternalError
                -
                Failed to start/stop timer due to an internal error.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static TimerActionResult[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static TimerActionResult valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              • -
                -

                fromOrdinal

                -
                public static TimerActionResult fromOrdinal(int val)
                - -
                -
                Parameters:
                -
                val - the ordinal value.
                -
                Returns:
                -
                the associated TimerActionResult or throws an IllegalArgumentException for an unexpected - ordinal value.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html deleted file mode 100644 index 60c2c72..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - -TimerHandler (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface TimerHandler<T extends DigitalTwinBase>

            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the DigitalTwinBase.
            -
            -
            -
            public interface TimerHandler<T extends DigitalTwinBase>
            -
            Callback to a handle a timer message for a DigitalTwinBase.
            -
            -
            - -
            -
            - -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html deleted file mode 100644 index b2824fe..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - -TimerMetadata (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class TimerMetadata<T extends DigitalTwinBase>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.TimerMetadata<T>
            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the DigitalTwinBase implementation.
            -
            -
            -
            public class TimerMetadata<T extends DigitalTwinBase> -extends Object
            -
            Metadata class for a timer.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                TimerMetadata

                -
                public TimerMetadata(TimerHandler<T> handler, - TimerType timerType, - long timerIntervalMs, - int timerIdx)
                -
                Constructs a timer metadata.
                -
                -
                Parameters:
                -
                handler - the timer handler.
                -
                timerType - the timer type.
                -
                timerIntervalMs - the timer interval.
                -
                timerIdx - the timer index.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getTimerHandlerClass

                -
                public String getTimerHandlerClass()
                -
                Retrieves the timer handler class name.
                -
                -
                Returns:
                -
                the timer handler class name.
                -
                -
                -
              • -
              • -
                -

                getTimerType

                -
                public TimerType getTimerType()
                -
                Retrieves the timer type.
                -
                -
                Returns:
                -
                the timer type.
                -
                -
                -
              • -
              • -
                -

                getTimerIntervalMs

                -
                public long getTimerIntervalMs()
                -
                Retrieves the timer interval.
                -
                -
                Returns:
                -
                the timer interval.
                -
                -
                -
              • -
              • -
                -

                getTimerId

                -
                public int getTimerId()
                -
                Retrieves the timer ID.
                -
                -
                Returns:
                -
                the timer ID.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html b/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html deleted file mode 100644 index cef4477..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/TimerType.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - -TimerType (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class TimerType

            -
            -
            java.lang.Object -
            java.lang.Enum<TimerType> -
            com.scaleoutsoftware.digitaltwin.core.TimerType
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<TimerType>, Constable
            -
            -
            -
            public enum TimerType -extends Enum<TimerType>
            -
            Enum representation of the available timer types
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Recurring

                -
                public static final TimerType Recurring
                -
                This timer should reoccur on a schedule.
                -
                -
              • -
              • -
                -

                OneTime

                -
                public static final TimerType OneTime
                -
                This timer should trigger one time.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static TimerType[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static TimerType valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html deleted file mode 100644 index 9fa1f27..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/package-summary.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Package com.scaleoutsoftware.digitaltwin.core

            -
            -
            -
            package com.scaleoutsoftware.digitaltwin.core
            -
            -
            Digital twin model API - Create a digital twin model.
            -
            -
            - -
            -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html deleted file mode 100644 index d2f2c59..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/core/package-tree.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Hierarchy For Package com.scaleoutsoftware.digitaltwin.core

            -Package Hierarchies: - -
            -
            -

            Class Hierarchy

            - -
            -
            -

            Interface Hierarchy

            - -
            -
            -

            Enum Class Hierarchy

            - -
            -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html b/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html deleted file mode 100644 index f94cc8d..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - -LogMessage (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class LogMessage

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.LogMessage
            -
            -
            -
            -
            public class LogMessage -extends Object
            -
            A messaged that was logged by a digital twin.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getMessage

                -
                public String getMessage()
                -
                Retrieve the string message associated with this log message.
                -
                -
                Returns:
                -
                the message.
                -
                -
                -
              • -
              • -
                -

                getSeverity

                -
                public Level getSeverity()
                -
                Retrieve the severity of this log message.
                -
                -
                Returns:
                -
                the severity.
                -
                -
                -
              • -
              • -
                -

                getTimestamp

                -
                public long getTimestamp()
                -
                Retrieve the timestamp from when this message was generated.
                -
                -
                Returns:
                -
                the timestamp.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html deleted file mode 100644 index de93f73..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - -SimulationEventResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class SimulationEventResult

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
            -
            -
            -
            -
            public abstract class SimulationEventResult -extends Object
            -
            A simulation event result.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                SimulationEventResult

                -
                public SimulationEventResult()
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html deleted file mode 100644 index cc34461..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - -SimulationStep (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class SimulationStep

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.SimulationStep
            -
            -
            -
            -
            public class SimulationStep -extends Object
            -
            The simulation step class encases the metadata for a completed interval of a simulation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getStatus

                -
                public SimulationStatus getStatus()
                -
                Retrieve the SimulationStatus of the simulation interval.
                -
                -
                Returns:
                -
                the current simulation status.
                -
                -
                -
              • -
              • -
                -

                getTime

                -
                public long getTime()
                -
                Retrieve the time of the simulation interval.
                -
                -
                Returns:
                -
                the simulation interval time.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html b/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html deleted file mode 100644 index cc54152..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html +++ /dev/null @@ -1,872 +0,0 @@ - - - - -Workbench (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class Workbench

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            AutoCloseable
            -
            -
            -
            public class Workbench -extends Object -implements AutoCloseable
            -
            The Workbench is used to represent an environment where developers can test real-time and simulated digital twins. -

            - Quick start: -

            -

            - Build a real-time digital twin model for testing real-time message processing with messages generated by a simulated - digital twin. -

            -

            - The real-time model will represent a car and the simulated digital twin will - represent a pump increasing the real-time car's tire pressure. The real-time car will process messages from the - simulated pump and send information back to the simulated pump when the tire is full. -

            - -

            The quickstart will demonstrate the following:

            -
              -
            • Define a real-time car digital twin
            • -
            • Define a tire pressure change message
            • -
            • Define a real-time car message processor
            • -
            • Define a simulated pump digital twin
            • -
            • Define a simulated pump message processor
            • -
            • Define a simulated pump simulation processor
            • -
            - -

            - Defining the real-time car model: -

            - -

            - Create a class that extends the DigitalTwinBase class and add an integer property for tire pressure. - When constructed by the Workbench this will be our real-time car instance. -

            -
            -     public class RealTimeCar extends DigitalTwinBase {
            -         private int _tirePressure;
            -         public RealTimeCar() { _tirePressure=0; }
            -         public RealTimeCar(int startingTirePressure) {
            -             _tirePressure = startingTirePressure;
            -         }
            -
            -         public void incrementTirePressure(int increment) {
            -             _tirePressure += increment;
            -         }
            -
            -         public int getTirePressure() {
            -             return _tirePressure;
            -         }
            -     }
            - 
            -

            - Defining the tire pressure change message: -

            -

            - Implement a message to send from the simulated pump, to the real-time model. The message will tell the real-time - car to increase the tire pressure by some value. -

            - -
            -     public class TirePressureMessage {
            -         final int _pressureChange;
            -         public TirePressureMessage(int pressureChange) {
            -             _pressureChange = pressureChange;
            -         }
            -
            -         public int getPressureChange() {
            -             return _pressureChange;
            -         }
            -     }
            - 
            - -

            - Defining the real-time car message processor: -

            - -

            - Create the real-time car MessageProcessor. The message processor will apply the tire pressure change from the tire - pressure message to the real-time car digital twin instance. When the tire is full, the message processor will - send a message back to the simulated pump. -

            -
            -     public class RealTimeCarMessageProcessor extends MessageProcessor<RealTimeCar, TirePressureMessage> implements Serializable {
            -         final int TIRE_PRESSURE_FULL = 100;
            -         public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable<TirePressureMessage> messages) throws Exception {
            -             // apply the updates from the messages
            -             for(TirePressureMessage message : messages) {
            -                 car.incrementTirePressure(message.getPressureChange());
            -             }
            -             if(car.getTirePressure() > TIRE_PRESSURE_FULL) {
            -                 processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure()));
            -             }
            -             return ProcessingResult.UpdateDigitalTwin;
            -         }
            -     }
            - 
            - -

            - Defining the simulated pump model: -

            - -

            - Create a class that extends the DigitalTwinBase class and add a double property for tire pressure change. - When constructed by the Workbench this will be our simulated pump instance. -

            -
            -     public class SimulatedPump extends DigitalTwinBase {
            -     private double _tirePressureChange;
            -     private boolean _tirePressureReached = false;
            -     public SimulatedPump() {}
            -     public SimulatedPump(double pressureChange) {
            -         _tirePressureChange = pressureChange;
            -     }
            -
            -     public double getTirePressureChange() {
            -         return _tirePressureChange;
            -     }
            -
            -     public void setTirePressureReached() {
            -         _tirePressureReached = true;
            -     }
            -
            -     public boolean isTireFull() {
            -         return _tirePressureReached;
            -     }
            - }
            - 
            - -

            - Defining the simulated pump message processor: -

            - -

            - The simulated pump should stop when the simulated pump message processor receives a message. The simulated pump message - processor will update the state of the simulated pump indicating that the tire is full. -

            -
            -     public class PumpMessageProcessor extends MessageProcessor<SimulatedPump, TirePressureMessage> implements Serializable {
            -         public ProcessingResult processMessages(ProcessingContext processingContext, SimulatedPump pump, Iterable<TirePressureMessage> messages) throws Exception {
            -             // apply the updates from the messages
            -             pump.setTirePressureReached();
            -             return ProcessingResult.UpdateDigitalTwin;
            -         }
            -     }
            - 
            - -

            - Defining the pump simulation processor: -

            - -

            - Define the simulated pump SimulationProcessor. This piece of code will be called at each simulation interval so - long as the simulation has instances to run. This pump simulation processor will send a message to the - real-time car with a tire pressure change derived from the state of the simulated pump. While the simulated pump has not been - told to stop, it will continue sending tire pressure changes to the real-time car. -

            -
            -     public class PumpSimulationProcessor extends SimulationProcessor<SimulatedPump> implements Serializable {
            -         public ProcessingResult processModel(ProcessingContext processingContext, SimulatedPump simPump, Date date) {
            -             SimulationController controller = processingContext.getSimulationController();
            -             if(simPump.isTireFull()) {
            -                 controller.deleteThisInstance();
            -             } else {
            -                 int change = (int) (100 * simPump.getTirePressureChange());
            -                 controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change));
            -             }
            -             return ProcessingResult.UpdateDigitalTwin;
            -         }
            -     }
            - 
            - -

            - Using the workbench: -

            - -

            - The real-time and simulation models are complete. The workbench can now load up the models and then run a simulation. - When beginning testing, the "step loop" is used to track the state of the twins and the simulation. Instantiate the - workbench and add the models. -

            - -
            -     Workbench workbench = new Workbench();
            -     workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class);
            -     workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class);
            - 
            - -

            - The workbench is loaded up with the models. Add a single simulated pump instance. - Note that no real-time car digital twin is created and added to the workbench. The first message from the - simulated pump digital twin will cause the workbench to create a new real-time instance. -

            -
            -     workbench.addInstance("SimPump", "23", new SimulationPump(0.29d));
            - 
            - -

            Initialize the simulation and then step through the simulation intervals. Start the simulation now and end the - simulation in 60 seconds.

            - -
            -     SimulationStep step = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis()+60000, 1000);
            - 
            - -

            - At each interval, view the state of the real-time car to ensure the tire pressure is changing as expected. -

            - -
            -     while(step.getStatus() == SimulationStatus.Running) {
            -         step = workbench.step();
            -         HashMap<String, DigitalTwinBase> realTimeCars = workbench.getInstances("RealTimeCar");
            -         RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23");
            -         System.out.println("rtCar: " + rtCar.getTirePressure());
            -     }
            - 
            - -

            - Summary: -

            -

            - The simulated pump at each simulation step emits telemetry to the real-time car digital twin. With each tire pressure - change message, the real-time car twin accrues state about the pressure of the tire. When the real-time car twins tire - is full, it sends a message back to the simulated pump. When the simulated pump receives a message from the real-time car, - it updates some internal state indicating to stop pumping. During the next simulation interval, the simulated pump - deletes itself to stop pumping. This completes the simulation as there are no more remaining simulated pumps. -

            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                Workbench

                -
                public Workbench()
                -
                Instantiate the workbench.
                -
                -
              • -
              • -
                -

                Workbench

                -
                public Workbench(int numSimulationWorkers)
                -
                Instantiate the workbench.
                -
                -
                Parameters:
                -
                numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors().
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                addRealTimeModel

                -
                public <T extends DigitalTwinBase, -V> void addRealTimeModel(String modelName, - MessageProcessor<T,V> digitalTwinMessageProcessor, - Class<T> dtType, - Class<V> messageClass) - throws WorkbenchException
                -
                Adds a real-time digital twin model to the workbench.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin.
                -
                V - the type of the message.
                -
                Parameters:
                -
                modelName - the name of the model.
                -
                digitalTwinMessageProcessor - the model's MessageProcessor implementation. Must be marked as Serializable.
                -
                dtType - the model's DigitalTwinBase implementation.
                -
                messageClass - the model's message type.
                -
                Throws:
                -
                WorkbenchException - if any of the parameters are null or the model does not pass validation (the message - processor must be serializable, and the digital twin implementation must have a parameterless constructor).
                -
                -
                -
              • -
              • -
                -

                addSimulationModel

                -
                public <T extends DigitalTwinBase, -V> void addSimulationModel(String modelName, - MessageProcessor<T,V> digitalTwinMessageProcessor, - SimulationProcessor<T> simulationProcessor, - Class<T> dtType, - Class<V> messageClass) - throws WorkbenchException
                -
                Adds a simulation digital twin model to the workbench.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin.
                -
                V - the type of the message.
                -
                Parameters:
                -
                modelName - the name of the model.
                -
                digitalTwinMessageProcessor - the model's MessageProcessor implementation. Must be marked as Serializable.
                -
                simulationProcessor - the model's SimulationProcessor implementation. Must be marked as Serializable.
                -
                dtType - the model's DigitalTwinBase implementation.
                -
                messageClass - the model's message type.
                -
                Throws:
                -
                WorkbenchException - if any of the parameters are null or the model does not pass validation (the message - processor must be serializable, and the digital twin implementation must have a parameterless constructor).
                -
                -
                -
              • -
              • -
                -

                addInstance

                -
                public void addInstance(String modelName, - String id, - DigitalTwinBase instance) - throws WorkbenchException
                -
                Adds a digital twin instance to the workbench. - Instances cannot be added to the workbench after runSimulation(long, long, double, long) or - initializeSimulation(long, long, long) has been called.
                -
                -
                Parameters:
                -
                modelName - the instances model.
                -
                id - the instance identifier.
                -
                instance - the real-time or simulation instance.
                -
                Throws:
                -
                WorkbenchException - If the model does not exist or if a simulation is already running.
                -
                -
                -
              • -
              • -
                -

                addAlertProvider

                -
                public void addAlertProvider(String modelName, - AlertProviderConfiguration configuration) - throws WorkbenchException
                -
                Adds an alert provider configuration to the specified model on this workbench. - Alert provider configurations cannot be added to the workbench after runSimulation(long, long, double, long) or - initializeSimulation(long, long, long) has been called.
                -
                -
                Parameters:
                -
                modelName - the instances model.
                -
                configuration - the alert provider configuration.
                -
                Throws:
                -
                WorkbenchException - If the model does not exist or if a simulation is already running.
                -
                -
                -
              • -
              • -
                -

                runSimulation

                -
                public SimulationStep runSimulation(long startTime, - long endTime, - double speedup, - long interval) - throws WorkbenchException
                -
                Runs a simulation from the given startTime until the given endTime OR there is no more work to do. - A simulation has reached the end time when the time to run the next interval is greater than the end time or - there are no more simulated twins to run.
                -
                -
                Parameters:
                -
                startTime - the start time of the simulation.
                -
                endTime - the end time of the simulation.
                -
                speedup - the speedup of the interval (in real-time).
                -
                interval - the interval between simulation steps.
                -
                Returns:
                -
                a SimulationStep that details the final runtime and the SimulationStatus.
                -
                Throws:
                -
                WorkbenchException - if an exception is thrown by the simulated model or real-time model.
                -
                -
                -
              • -
              • -
                -

                initializeSimulation

                -
                public SimulationStep initializeSimulation(long startTime, - long endTime, - long interval)
                -
                Initializes the simulation so that each interval can be run separately by calling the step() - function.
                -
                -
                Parameters:
                -
                startTime - the start time of the simulation.
                -
                endTime - the end time of the simulation.
                -
                interval - the interval between simulation steps.
                -
                Returns:
                -
                a SimulationStep that details the startTime and the SimulationStatus -- which will always be SimulationStatus.Running.
                -
                -
                -
              • -
              • -
                -

                step

                -
                public SimulationStep step() - throws WorkbenchException
                -
                Run the next simulation interval.
                -
                -
                Returns:
                -
                a SimulationStep that shows the time interval that was run and the corresponding SimulationStatus
                -
                Throws:
                -
                WorkbenchException - if an exception is thrown by the simulated model or real-time model.
                -
                -
                -
              • -
              • -
                -

                getTime

                -
                public Date getTime() - throws WorkbenchException
                -
                Retrieves the current time interval of the simulation.
                -
                -
                Returns:
                -
                a Date representation for the current interval time for the simulation.
                -
                Throws:
                -
                WorkbenchException - if the simulation is not started or initialized.
                -
                -
                -
              • -
              • -
                -

                peek

                -
                public Date peek() - throws WorkbenchException
                -
                Retrieves the next interval time of the simulation.
                -
                -
                Returns:
                -
                a Date representation for the next interval time for the simulation.
                -
                Throws:
                -
                WorkbenchException - if the simulation is not started or initialized.
                -
                -
                -
              • -
              • -
                -

                getInstances

                -
                public HashMap<String,DigitalTwinBase> getInstances(String modelName) - throws WorkbenchException
                -
                Retrieves DigitalTwin instances for a given model.
                -
                -
                Parameters:
                -
                modelName - the digital twin model name
                -
                Returns:
                -
                the instances associated with the parameter model
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while retrieving digital twin instances for the parameter modelName
                -
                -
                -
              • -
              • -
                -

                getLoggedMessages

                -
                public List<LogMessage> getLoggedMessages(String model, - long timestamp)
                -
                Retrieves messages logged by digital twin instances for a specified mdoel. If the provided timestamp is 0, all messages will be returned. - Timestamps greater than 0 will return a sublist of logged messages where the first message in the returned list - will be greater than the provided timestamp. If no messages exist after the timestamp, the returned list will be - empty.
                -
                -
                Parameters:
                -
                model - the model name for the logged messages.
                -
                timestamp - the timestamp used to filter the retrieved list.
                -
                Returns:
                -
                the list of messages defined by the timestamp
                -
                -
                -
              • -
              • -
                -

                getAlertMessages

                -
                public List<AlertMessage> getAlertMessages(String model, - String alertProvider) - throws WorkbenchException
                -
                Retrieves alert messages from digital twin instances.
                -
                -
                Parameters:
                -
                model - the model to retrieve alert messages from.
                -
                alertProvider - the alert provider that generated the alerts.
                -
                Returns:
                -
                the list of alert messages generated by digital twin instances.
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while retrieving logged messages.
                -
                -
                -
              • -
              • -
                -

                getSharedModelData

                -
                public SharedData getSharedModelData(String model) - throws WorkbenchException
                -
                Retrieve the SharedData for a model.
                -
                -
                Parameters:
                -
                model - the model name.
                -
                Returns:
                -
                the SharedData for a model.
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while creating the working shared data.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                public SharedData getSharedGlobalData() - throws WorkbenchException
                -
                Retrieve the global SharedData.
                -
                -
                Returns:
                -
                the global SharedData of this workbench.
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while creating the working shared data.
                -
                -
                -
              • -
              • -
                -

                generateModelSchema

                -
                public String generateModelSchema(String modelName) - throws WorkbenchException
                -
                Generates a ModelSchema for the defined model
                -
                -
                Parameters:
                -
                modelName - the digital twin model's name to generate a schema.
                -
                Returns:
                -
                a JSON string of the model's schema
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while generating a model schema.
                -
                -
                -
              • -
              • -
                -

                generateModelSchema

                -
                public String generateModelSchema(String modelName, - String outputDirectory) - throws WorkbenchException
                -
                Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system. If the - parameter outputDirectory is null the file will be written to the working directory of the JVM.
                -
                -
                Parameters:
                -
                modelName - the name of the digital twin model
                -
                outputDirectory - the directory to write the file to, or null to write the file to the current working directory.
                -
                Returns:
                -
                the full file path of the model.json schema file
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while generating a model schema.
                -
                -
                -
              • -
              • -
                -

                send

                -
                public SendingResult send(String modelName, - String id, - List<Object> messages) - throws WorkbenchException
                -
                Send a list of messages to a real-time or simulation model.
                -
                -
                Parameters:
                -
                modelName - The model name.
                -
                id - the instance id.
                -
                messages - the messages to send.
                -
                Returns:
                -
                SendingResult.Handled unless an exception is thrown.
                -
                Throws:
                -
                WorkbenchException - if model name, id, or messages are null. Also thrown if the model's MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) - throws an exception.
                -
                -
                -
              • -
              • -
                -

                addSharedModelData

                -
                public void addSharedModelData(String modelName, - String key, - byte[] value)
                -
                Add a key/value pair to SharedData for a model.
                -
                -
                Parameters:
                -
                modelName - the model name.
                -
                key - the key.
                -
                value - the value.
                -
                -
                -
              • -
              • -
                -

                addGlobalModelData

                -
                public void addGlobalModelData(String key, - byte[] value)
                -
                Add a key/value pair to the global SharedData.
                -
                -
                Parameters:
                -
                key - the key.
                -
                value - the value.
                -
                -
                -
              • -
              • -
                -

                close

                -
                public void close() - throws Exception
                -
                -
                Specified by:
                -
                close in interface AutoCloseable
                -
                Throws:
                -
                Exception
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html deleted file mode 100644 index 23c4465..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - -WorkbenchException (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class WorkbenchException

            -
            -
            java.lang.Object -
            java.lang.Throwable -
            java.lang.Exception -
            com.scaleoutsoftware.digitaltwin.development.WorkbenchException
            -
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public class WorkbenchException -extends Exception
            -
            A Workbench exception indicates that a real-time or simulated twin caused an exception.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                WorkbenchException

                -
                public WorkbenchException(String message, - Exception e)
                -
                Instantiates a WorkbenchException with the parameter message and inner exception
                -
                -
                Parameters:
                -
                message - the message of this exception
                -
                e - the inner exception
                -
                -
                -
              • -
              • -
                -

                WorkbenchException

                -
                public WorkbenchException(Exception e)
                -
                Instantiates a WorkbenchException with the parameter inner exception
                -
                -
                Parameters:
                -
                e - the inner exception
                -
                -
                -
              • -
              • -
                -

                WorkbenchException

                -
                public WorkbenchException(String message)
                -
                Instantiates a WorkbenchException with the parameter message
                -
                -
                Parameters:
                -
                message - the message of this exception
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              - -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html deleted file mode 100644 index fcd247c..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Package com.scaleoutsoftware.digitaltwin.development

            -
            -
            -
            package com.scaleoutsoftware.digitaltwin.development
            -
            -
            Digital twin development API - Develop and test simulation/real-time digital twins.
            -
            -
            -
              -
            • -
              -
              -
              -
              -
              Class
              -
              Description
              - -
              -
              A messaged that was logged by a digital twin.
              -
              - -
              -
              A simulation event result.
              -
              - -
              -
              The simulation step class encases the metadata for a completed interval of a simulation.
              -
              - -
              -
              The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
              -
              - -
              -
              A Workbench exception indicates that a real-time or simulated twin caused an exception.
              -
              -
              -
              -
              -
            • -
            -
            -
            -
            -
            - - diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html deleted file mode 100644 index b449414..0000000 --- a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Hierarchy For Package com.scaleoutsoftware.digitaltwin.development

            -Package Hierarchies: - -
            -
            -

            Class Hierarchy

            - -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/LICENSE b/docs/digitaltwin-core-docs/LICENSE deleted file mode 100644 index 989e2c5..0000000 --- a/docs/digitaltwin-core-docs/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ -Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build.gradle b/docs/digitaltwin-core-docs/build.gradle deleted file mode 100644 index fdf2907..0000000 --- a/docs/digitaltwin-core-docs/build.gradle +++ /dev/null @@ -1,59 +0,0 @@ -plugins { - id 'java' -} - -group 'com.scaleout.digitaltwin' -version '4.0.0' - -repositories { - mavenCentral() -} - -configurations { - archives -} - -test { - useJUnitPlatform() -} - -task createJavadocs(type: Javadoc) { - source = sourceSets.main.allJava - classpath = sourceSets.main.runtimeClasspath -} - -task javadocJar(type: Jar, dependsOn: createJavadocs) { - from javadoc.destinationDir -} - -artifacts { - archives javadocJar -} - - -task copyDTAbstractions(type: Copy) { - from "../../Abstractions/src/" - into "./src" -} - -task copyDTDevelopment(type: Copy) { - from "../../Development/src/" - into "./src" -} - -dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' - testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5' - implementation group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.20.0' -} - -compileJava { - dependsOn 'copyDTAbstractions' - dependsOn 'copyDTDevelopment' -} - -processResources { - dependsOn 'copyDTAbstractions' - dependsOn 'copyDTDevelopment' -} \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html deleted file mode 100644 index a1e1471..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/allclasses-index.html +++ /dev/null @@ -1,192 +0,0 @@ - - - - -All Classes and Interfaces (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            All Classes and Interfaces

            -
            -
            -
            -
            -
            -
            Class
            -
            Description
            - -
            -
            A message that should be sent to a configured alert provider.
            -
            - -
            -
            Configuration for an alert provider.
            -
            - -
            -
            Status of a cache operation.
            -
            - -
            -
            Represents a response from a SharedData operation.
            -
            - -
            -
            A real-time digital twin of a data source.
            -
            - -
            -
            A message sent to a digital twin instance's message processor.
            -
            - -
            -
            The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing - digital twin.
            -
            - -
            -
            The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of - digital twin instance when a simulation is initializing.
            -
            - -
            -
            A messaged that was logged by a digital twin.
            -
            - -
            -
            Message list factory retrieves message lists for a MessageProcessor
            -
            - -
            -
            Processes messages for a real-time digital twin.
            -
            - -
            -
            Base class for the MessageProcessor to help with typing.
            -
            - -
            -
            The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - digital twin model to the real-time digital twin cloud service.
            -
            - -
            -
            An interface that can be used for persisting/retrieving the state of real-time digital twins.
            -
            - -
            -
            Available PersistenceProvider types.
            -
            - -
            -
            Context object that allows the user to send a message to a DataSource.
            -
            - -
            -
            The result from a message processor which indicates to update the state object or to ignore
            -
            - -
            -
            Marks a message as Delivered or not Delivered
            -
            - -
            -
            SharedData is used to access a model's, or globally, shared cache.
            -
            - -
            -
            The SimulationController interface is used to interact with the running DigitalTwin simulation.
            -
            - -
            -
            A simulation event result.
            -
            - -
            -
            Processes simulation events for a digital twin.
            -
            - -
            -
            The status of a simulation.
            -
            - -
            -
            The simulation step class encases the metadata for a completed interval of a simulation.
            -
            - -
            -
            The result of a timer action.
            -
            - -
            -
            Callback to a handle a timer message for a DigitalTwinBase.
            -
            - -
            -
            Metadata class for a timer.
            -
            - -
            -
            Enum representation of the available timer types
            -
            - -
            -
            The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
            -
            - -
            -
            A Workbench exception indicates that a real-time or simulated twin caused an exception.
            -
            -
            -
            -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html deleted file mode 100644 index cdc7533..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/allpackages-index.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - -All Packages (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            All Packages

            -
            -
            Package Summary
            -
            -
            Package
            -
            Description
            - -
            -
            Digital twin model API - Create a digital twin model.
            -
            - -
            -
            Digital twin development API - Develop and test simulation/real-time digital twins.
            -
            -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html deleted file mode 100644 index 75ab8d8..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertMessage.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - -AlertMessage (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class AlertMessage

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            -
            -
            public class AlertMessage -extends Object
            -
            A message that should be sent to a configured alert provider.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                AlertMessage

                -
                public AlertMessage(String title, - String severity, - String message)
                -
                Construct an alert message with a title, severity, and custom message.
                -
                -
                Parameters:
                -
                title - the title for the alert message.
                -
                severity - the severity for this alert.
                -
                message - the custom message for this alert.
                -
                -
                -
              • -
              • -
                -

                AlertMessage

                -
                public AlertMessage(String title, - String severity, - String message, - HashMap<String,String> optProps)
                -
                Construct an alert message with a title, severity, and custom message.
                -
                -
                Parameters:
                -
                title - the title for the alert message.
                -
                severity - the severity for this alert.
                -
                message - the custom message for this alert.
                -
                optProps - the optional properties that should be sent to the alerting provider.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getTitle

                -
                public String getTitle()
                -
                Retrieve the title for this alert message.
                -
                -
                Returns:
                -
                the title of this alert message.
                -
                -
                -
              • -
              • -
                -

                getSeverity

                -
                public String getSeverity()
                -
                Retrieve the severity for this alert message.
                -
                -
                Returns:
                -
                the severity for this alert message.
                -
                -
                -
              • -
              • -
                -

                getMessage

                -
                public String getMessage()
                -
                Retrieve the message for this alert message.
                -
                -
                Returns:
                -
                the message for this alert message.
                -
                -
                -
              • -
              • -
                -

                getOptionalTwinInstanceProperties

                -
                public HashMap<String,String> getOptionalTwinInstanceProperties()
                -
                Retrieve the optional twin instance properties for this alert message.
                -
                -
                Returns:
                -
                the optional twin instance properties for this alert message.
                -
                -
                -
              • -
              • -
                -

                toString

                -
                public String toString()
                -
                -
                Overrides:
                -
                toString in class Object
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html deleted file mode 100644 index ae33977..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.html +++ /dev/null @@ -1,293 +0,0 @@ - - - - -AlertProviderConfiguration (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class AlertProviderConfiguration

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public class AlertProviderConfiguration -extends Object -implements Serializable
            -
            Configuration for an alert provider.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                AlertProviderConfiguration

                -
                public AlertProviderConfiguration(String alertProviderType, - String url, - String integrationKey, - String routingKey, - String name, - String entityId)
                -
                Construct an alert provider configuration.
                -
                -
                Parameters:
                -
                alertProviderType - the alert provider type.
                -
                url - the alert provider URL where alerts should be posted.
                -
                integrationKey - the integration key.
                -
                routingKey - the routing key.
                -
                name - the name of the alert provider.
                -
                entityId - the entity Id.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getAlertProviderType

                -
                public String getAlertProviderType()
                -
                Retrieve the alert provider type for this configuration.
                -
                -
                Returns:
                -
                the alert provider type.
                -
                -
                -
              • -
              • -
                -

                getURL

                -
                public String getURL()
                -
                Retrieve the URL for this alert provider configuration.
                -
                -
                Returns:
                -
                the URL for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getIntegrationKey

                -
                public String getIntegrationKey()
                -
                Retrieve the integration key for this alert provider configuration.
                -
                -
                Returns:
                -
                the integration key for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getRoutingKey

                -
                public String getRoutingKey()
                -
                Retrieve the routing key for this alert provider configuration.
                -
                -
                Returns:
                -
                the routing key for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getName

                -
                public String getName()
                -
                Retrieve the name of this alert provider configuration.
                -
                -
                Returns:
                -
                the name of this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                getEntityId

                -
                public String getEntityId()
                -
                Retrieve the entity ID for this alert provider configuration.
                -
                -
                Returns:
                -
                the entity ID for this alert provider configuration.
                -
                -
                -
              • -
              • -
                -

                toString

                -
                public String toString()
                -
                -
                Overrides:
                -
                toString in class Object
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html deleted file mode 100644 index 9ff6c42..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - -CacheOperationStatus (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class CacheOperationStatus

            -
            -
            java.lang.Object -
            java.lang.Enum<CacheOperationStatus> -
            com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<CacheOperationStatus>, Constable
            -
            -
            -
            public enum CacheOperationStatus -extends Enum<CacheOperationStatus>
            -
            Status of a cache operation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                ObjectRetrieved

                -
                public static final CacheOperationStatus ObjectRetrieved
                -
                The object was successfully retrieved.
                -
                -
              • -
              • -
                -

                ObjectPut

                -
                public static final CacheOperationStatus ObjectPut
                -
                The object was successfully added/updated.
                -
                -
              • -
              • -
                -

                ObjectDoesNotExist

                -
                public static final CacheOperationStatus ObjectDoesNotExist
                -
                The object could not be retrieved because it was not found.
                -
                -
              • -
              • -
                -

                ObjectRemoved

                -
                public static final CacheOperationStatus ObjectRemoved
                -
                The object was removed successfully.
                -
                -
              • -
              • -
                -

                CacheCleared

                -
                public static final CacheOperationStatus CacheCleared
                -
                The cache was cleared successfully.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static CacheOperationStatus[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static CacheOperationStatus valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html deleted file mode 100644 index 9334a2c..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/CacheResult.html +++ /dev/null @@ -1,163 +0,0 @@ - - - - -CacheResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface CacheResult

            -
            -
            -
            -
            public interface CacheResult
            -
            Represents a response from a SharedData operation.
            -
            -
            -
              - -
            • -
              -

              Method Summary

              -
              -
              -
              -
              -
              Modifier and Type
              -
              Method
              -
              Description
              - - -
              -
              Gets the key or null to the object associated with the result.
              -
              - - -
              -
              Gets the status of the cache operation.
              -
              -
              byte[]
              - -
              -
              Get the object returned from a Get operation.
              -
              -
              -
              -
              -
              -
            • -
            -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getKey

                -
                String getKey()
                -
                Gets the key or null to the object associated with the result.
                -
                -
                Returns:
                -
                the key or null.
                -
                -
                -
              • -
              • -
                -

                getValue

                -
                byte[] getValue()
                -
                Get the object returned from a Get operation.
                -
                -
                Returns:
                -
                the object or null.
                -
                -
                -
              • -
              • -
                -

                getStatus

                - -
                Gets the status of the cache operation.
                -
                -
                Returns:
                -
                the operation status.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html deleted file mode 100644 index c013270..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - -DigitalTwinBase (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class DigitalTwinBase

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            -
            -
            public abstract class DigitalTwinBase -extends Object
            -
            A real-time digital twin of a data source. The implementation of the real-time DigitalTwin should have a parameterless constructor for - basic initialization.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Field Details

              - -
              -
            • - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                DigitalTwinBase

                -
                public DigitalTwinBase()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getNextSimulationTimeMs

                -
                public long getNextSimulationTimeMs()
                -
                Retrieve the next simulation time in milliseconds.
                -
                -
                Returns:
                -
                the next simulation time in milliseconds.
                -
                -
                -
              • -
              • -
                -

                setNextSimulationTime

                -
                public void setNextSimulationTime(long nextSimulationTime)
                -
                Set the next simulation time in milliseconds.
                -
                -
                Parameters:
                -
                nextSimulationTime - set the next simulation time.
                -
                -
                -
              • -
              • -
                -

                getId

                -
                public String getId()
                -
                The identifier of this DigitalTwin.
                -
                -
                Returns:
                -
                the identifier of this digital twin
                -
                -
                -
              • -
              • -
                -

                getModel

                -
                public String getModel()
                -
                The model for this DigitalTwin.
                -
                -
                Returns:
                -
                the model for this DigitalTwin
                -
                -
                -
              • -
              • -
                -

                init

                -
                public void init(InitContext context) - throws IllegalStateException
                -
                Initialization method to set the identifier and model for a DigitalTwin instance. Optionally use the - InitContext to start a timer.
                -
                -
                Parameters:
                -
                context - the initialization context.
                -
                Throws:
                -
                IllegalStateException - if init is called after initialization.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html deleted file mode 100644 index 71116ad..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - -DigitalTwinTimerMessage (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class DigitalTwinTimerMessage

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            -
            -
            public class DigitalTwinTimerMessage -extends Object
            -
            A message sent to a digital twin instance's message processor.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                DigitalTwinTimerMessage

                -
                public DigitalTwinTimerMessage(String modelName, - String twinId, - int timerId, - String timerName, - TimerType timerType)
                -
                Construct a digital twin timer message.
                -
                -
                Parameters:
                -
                modelName - the digital twin model name.
                -
                twinId - the digital twin instance ID
                -
                timerId - the timer ID
                -
                timerName - the timer name
                -
                timerType - the timer type
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getModelName

                -
                public String getModelName()
                -
                Retrieve the digital twin model name.
                -
                -
                Returns:
                -
                the digital twin model name.
                -
                -
                -
              • -
              • -
                -

                getTwinId

                -
                public String getTwinId()
                -
                Retrieve the digital twin ID.
                -
                -
                Returns:
                -
                the digital twin ID.
                -
                -
                -
              • -
              • -
                -

                getTimerId

                -
                public int getTimerId()
                -
                Retrieve the timer ID.
                -
                -
                Returns:
                -
                the timer ID.
                -
                -
                -
              • -
              • -
                -

                getTimerName

                -
                public String getTimerName()
                -
                Retrieve the timer name.
                -
                -
                Returns:
                -
                the timer name.
                -
                -
                -
              • -
              • -
                -

                getTimerType

                -
                public TimerType getTimerType()
                -
                Retrieve the TimerType.
                -
                -
                Returns:
                -
                the TimerType
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html deleted file mode 100644 index 4d362ae..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitContext.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - -InitContext (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class InitContext

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            -
            -
            public abstract class InitContext -extends Object
            -
            The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing - digital twin.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                InitContext

                -
                public InitContext()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                startTimer

                -
                public abstract <T extends DigitalTwinBase> -TimerActionResult startTimer(String timerName, - Duration interval, - TimerType timerType, - TimerHandler<T> timerHandler)
                -
                Starts a new timer for the digital twin
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin
                -
                Parameters:
                -
                timerName - the timer name
                -
                interval - the timer interval
                -
                timerType - the timer type
                -
                timerHandler - the time handler callback
                -
                Returns:
                -
                returns TimerActionResult.Success if the timer was started, TimerActionResult.FailedTooManyTimers - if too many timers exist, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                -
                -
                -
              • -
              • -
                -

                getSharedModelData

                -
                public abstract SharedData getSharedModelData()
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                public abstract SharedData getSharedGlobalData()
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getId

                -
                public abstract String getId()
                -
                Get the model-unique Id identifier of the initializing digital twin instance.
                -
                -
                Returns:
                -
                the id identifier.
                -
                -
                -
              • -
              • -
                -

                getModel

                -
                public abstract String getModel()
                -
                Get the Model identifier of the initializing digital twin instance.
                -
                -
                Returns:
                -
                the model identifier.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html deleted file mode 100644 index 0640172..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - -InitSimulationContext (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface InitSimulationContext

            -
            -
            -
            -
            public interface InitSimulationContext
            -
            The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of - digital twin instance when a simulation is initializing.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getSharedModelData

                -
                SharedData getSharedModelData()
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                SharedData getSharedGlobalData()
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html deleted file mode 100644 index b9941e1..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageFactory.html +++ /dev/null @@ -1,133 +0,0 @@ - - - - -MessageFactory (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface MessageFactory

            -
            -
            -
            -
            public interface MessageFactory
            -
            Message list factory retrieves message lists for a MessageProcessor
            -
            -
            -
              - -
            • -
              -

              Method Summary

              -
              -
              -
              -
              -
              Modifier and Type
              -
              Method
              -
              Description
              -
              <V> Iterable<V>
              - -
              -
              Returns all incoming messages
              -
              -
              -
              -
              -
              -
            • -
            -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getIncomingMessages

                -
                <V> Iterable<V> getIncomingMessages()
                -
                Returns all incoming messages
                -
                -
                Type Parameters:
                -
                V - the type of incoming messages
                -
                Returns:
                -
                an iterable of incoming messages
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html deleted file mode 100644 index 87308d2..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.html +++ /dev/null @@ -1,228 +0,0 @@ - - - - -MessageProcessor (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class MessageProcessor<T extends DigitalTwinBase,V>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase<T> -
            com.scaleoutsoftware.digitaltwin.core.MessageProcessor<T,V>
            -
            -
            -
            -
            -
            Type Parameters:
            -
            T - the real type of the DigitalTwinBase
            -
            V - the type of messages processed by the real-time digital twin
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public abstract class MessageProcessor<T extends DigitalTwinBase,V> -extends MessageProcessorBase<T> -implements Serializable
            -
            Processes messages for a real-time digital twin.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                MessageProcessor

                -
                public MessageProcessor()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                processMessages

                -
                public abstract ProcessingResult processMessages(ProcessingContext context, - T stateObject, - Iterable<V> incomingMessages) - throws Exception
                -
                Processes a set of incoming messages and determines whether to update the real-time digital twin.
                -
                -
                Parameters:
                -
                context - optional context for processing.
                -
                stateObject - the state object.
                -
                incomingMessages - the incoming messages.
                -
                Returns:
                -
                processing results for updating the state object.
                -
                Throws:
                -
                Exception - if an exception occurs during processing
                -
                -
                -
              • -
              • -
                -

                processMessages

                -
                public ProcessingResult processMessages(ProcessingContext context, - T twin, - MessageFactory factory) - throws Exception
                -
                Helper method to ensure proper typing for user methods.
                -
                -
                Specified by:
                -
                processMessages in class MessageProcessorBase<T extends DigitalTwinBase>
                -
                Parameters:
                -
                context - the processing context.
                -
                twin - the digital twin object.
                -
                factory - the message list factory.
                -
                Returns:
                -
                the implementing class's processing result.
                -
                Throws:
                -
                Exception - if an exception occurs during processing.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html deleted file mode 100644 index d9eca63..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.html +++ /dev/null @@ -1,187 +0,0 @@ - - - - -MessageProcessorBase (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class MessageProcessorBase<T extends DigitalTwinBase>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase<T>
            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the DigitalTwin
            -
            -
            -
            Direct Known Subclasses:
            -
            MessageProcessor
            -
            -
            -
            public abstract class MessageProcessorBase<T extends DigitalTwinBase> -extends Object
            -
            Base class for the MessageProcessor to help with typing.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                MessageProcessorBase

                -
                public MessageProcessorBase()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                processMessages

                -
                public abstract ProcessingResult processMessages(ProcessingContext context, - T twin, - MessageFactory messageListFactory) - throws Exception
                -
                Helper method to ensure proper typing for the user methods.
                -
                -
                Parameters:
                -
                context - the processing context
                -
                twin - the real-time digital twin instance
                -
                messageListFactory - the message list factory
                -
                Returns:
                -
                the implementing class's processing result
                -
                Throws:
                -
                Exception - if an exception occurs during processing
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html deleted file mode 100644 index dd17e2c..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ModelSchema.html +++ /dev/null @@ -1,772 +0,0 @@ - - - - -ModelSchema (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class ModelSchema

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            -
            -
            public class ModelSchema -extends Object
            -
            The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - digital twin model to the real-time digital twin cloud service.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass)
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String ep)
                -
                Model schema with a defined entry point.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                ep - the invocation grid entry point.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String ep, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                ep - the invocation grid entry point.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                ep - the invocation grid entry point.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                alertingProviders - the alerting provider configurations.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                spClass - the simulation processor class implementation.
                -
                alertingProviders - the alerting provider configurations.
                -
                ep - the invocation grid entry point.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                simulationProcessorClass - the simulation processor class implementation.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                simulationProcessorClass - the simulation processor class implementation.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              • -
                -

                ModelSchema

                -
                public ModelSchema(String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - String ep, - PersistenceProviderType persistenceType, - List<AlertProviderConfiguration> alertingProviders, - boolean emr)
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                Parameters:
                -
                dtClass - the digital twin class implementation.
                -
                mpClass - the message processor class implementation.
                -
                msgClass - a JSON serializable message class.
                -
                simulationProcessorClass - the simulation processor class implementation.
                -
                adtName - the Azure Digital Twin model name.
                -
                persistenceType - the persistence provider type.
                -
                alertingProviders - the alerting provider configurations.
                -
                ep - the invocation grid entry point.
                -
                emr - enable message recording for this model.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getModelType

                -
                public String getModelType()
                -
                Retrieve the digital twin model type (a DigitalTwinBase implementation).
                -
                -
                Returns:
                -
                the model type.
                -
                -
                -
              • -
              • -
                -

                getMessageType

                -
                public String getMessageType()
                -
                Retrieve the message type (JSON serializable message implementation).
                -
                -
                Returns:
                -
                the message type.
                -
                -
                -
              • -
              • -
                -

                getMessageProcessorType

                -
                public String getMessageProcessorType()
                -
                Retrieve the message processor type (a MessageProcessor implementation).
                -
                -
                Returns:
                -
                the message processor type.
                -
                -
                -
              • -
              • -
                -

                getSimulationProcessorType

                -
                public String getSimulationProcessorType()
                -
                Retrieve the simulation processor type (a SimulationProcessor implementation).
                -
                -
                Returns:
                -
                the simulation processor type.
                -
                -
                -
              • -
              • -
                -

                getAssemblyName

                -
                public String getAssemblyName()
                -
                NOT USED BY JAVA MODEL SCHEMA
                -
                -
                Returns:
                -
                NOT USED BY JAVA MODEL SCHEMA
                -
                -
                -
              • -
              • -
                -

                getAlertProviders

                -
                public List<AlertProviderConfiguration> getAlertProviders()
                -
                Retrieve the alert provider configurations.
                -
                -
                Returns:
                -
                the alert provider configurations.
                -
                -
                -
              • -
              • -
                -

                getAzureDigitalTwinModelName

                -
                public String getAzureDigitalTwinModelName()
                -
                Retrieve the Azure Digital Twin model name.
                -
                -
                Returns:
                -
                the Azure Digital Twin model name.
                -
                -
                -
              • -
              • -
                -

                persistenceEnabled

                -
                public boolean persistenceEnabled()
                -
                Retrieve persistence status. True if persistence is enabled, false otherwise.
                -
                -
                Returns:
                -
                True if persistence is enabled, false otherwise.
                -
                -
                -
              • -
              • -
                -

                simulationSupportEnabled

                -
                public boolean simulationSupportEnabled()
                -
                Retrieve simulation support enabled status. True if simulation support is enabled, false otherwise.
                -
                -
                Returns:
                -
                True if simulation support is enabled, false otherwise.
                -
                -
                -
              • -
              • -
                -

                getPersistenceProvider

                -
                public PersistenceProviderType getPersistenceProvider()
                -
                Retrieve the persistence provider type.
                -
                -
                Returns:
                -
                the persistence provider type.
                -
                -
                -
              • -
              • -
                -

                messageRecordingEnabled

                -
                public boolean messageRecordingEnabled()
                -
                Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, - false otherwise.
                -
                -
                Returns:
                -
                True if message recording is enabled, false otherwise.
                -
                -
                -
              • -
              • -
                -

                getEntryPoint

                -
                public String getEntryPoint()
                -
                Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
                -
                -
                Returns:
                -
                the entry point for launching.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html deleted file mode 100644 index 214c380..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - -PersistenceProvider (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface PersistenceProvider

            -
            -
            -
            -
            public interface PersistenceProvider
            -
            An interface that can be used for persisting/retrieving the state of real-time digital twins.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                isActive

                -
                boolean isActive()
                -
                Returns true if this PersistenceProvider is active, false otherwise.
                -
                -
                Returns:
                -
                true if this PersistenceProvider is active, false otherwise.
                -
                -
                -
              • -
              • -
                -

                getProviderType

                -
                PersistenceProviderType getProviderType()
                -
                Retrieves this persistence providers type. Currently supported provider types: AzureDigitalTwins.
                -
                -
                Returns:
                -
                the persistence provider type.
                -
                -
                -
              • -
              • -
                -

                getInstanceIdsAsync

                -
                CompletableFuture<List<String>> getInstanceIdsAsync(String containerName)
                -
                Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a future that will return a list of instances.
                -
                -
                -
              • -
              • -
                -

                getInstanceIds

                -
                List<String> getInstanceIds(String containerName)
                -
                Retrieves the instance IDs stored in a container, or an empty list if no instances exist.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a list of instances.
                -
                -
                -
              • -
              • -
                -

                getInstanceAsync

                -
                CompletableFuture<String> getInstanceAsync(String containerName, - String instanceId)
                -
                Retrieves a future that when complete will return an instance or null if it doesn't exist.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance identifier.
                -
                Returns:
                -
                a future that will return an instance or null.
                -
                -
                -
              • -
              • -
                -

                getInstance

                -
                String getInstance(String containerName, - String instanceId)
                -
                Retrieves an instance or null if it doesn't exist.
                -
                -
                Parameters:
                -
                containerName - the container name
                -
                instanceId - the instance identifier
                -
                Returns:
                -
                the instance or null.
                -
                -
                -
              • -
              • -
                -

                getPropertyMapAsync

                -
                CompletableFuture<Map<String,String>> getPropertyMapAsync(String containerName)
                -
                Retrieves a future that will return a map of property names to property, or an empty map.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a future that will return a map of property names to property types.
                -
                -
                -
              • -
              • -
                -

                getPropertyMap

                -
                Map<String,String> getPropertyMap(String containerName)
                -
                Retrieves a map of property names to property types, or an empty map.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                Returns:
                -
                a map of property names to property types.
                -
                -
                -
              • -
              • -
                -

                updatePropertyAsync

                -
                CompletableFuture<Void> updatePropertyAsync(String containerName, - String instanceId, - String propertyName, - Object propertyValue)
                -
                Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated. - Updates a property for the provided instance id in the provided container specified by the property name and property value.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                Returns:
                -
                a future that will complete exceptionally or return void.
                -
                -
                -
              • -
              • -
                -

                updateProperty

                -
                void updateProperty(String containerName, - String instanceId, - String propertyName, - Object propertyValue)
                -
                Updates a property for the provided instance id in the provided container specified by the property name and property value.
                -
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                -
                -
              • -
              • -
                -

                getPropertyAsync

                -
                <T> CompletableFuture<T> getPropertyAsync(String containerName, - String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a future that will return a property or null if the property does not exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                clazz - the class representing the property.
                -
                Returns:
                -
                the property or null if the property does not exist.
                -
                -
                -
              • -
              • -
                -

                getProperty

                -
                <T> T getProperty(String containerName, - String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a property or null if the property does not exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return.
                -
                Parameters:
                -
                containerName - the container name.
                -
                instanceId - the instance id.
                -
                propertyName - the property name
                -
                clazz - the class representing the property.
                -
                Returns:
                -
                the property or null if the property does not exist.
                -
                -
                -
              • -
              • -
                -

                updateRtdtPropertyAsync

                -
                CompletableFuture<Void> updateRtdtPropertyAsync(String instanceId, - String propertyName, - Object propertyValue)
                -
                Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated. - Updates a RTDT property for the provided instance id specified by the property name and property value.
                -
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                Returns:
                -
                a future that will complete exceptionally or return void.
                -
                -
                -
              • -
              • -
                -

                updateRtdtProperty

                -
                void updateRtdtProperty(String instanceId, - String propertyName, - Object propertyValue)
                -
                Updates a RTDT property for the provided instance id specified by the property name and property value.
                -
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                propertyValue - the property value.
                -
                -
                -
              • -
              • -
                -

                getRtdtPropertyAsync

                -
                <T> CompletableFuture<T> getRtdtPropertyAsync(String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return.
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                clazz - the class of the property type
                -
                Returns:
                -
                a future that will return a property value for a RTDT instance.
                -
                -
                -
              • -
              • -
                -

                getRtdtProperty

                -
                <T> T getRtdtProperty(String instanceId, - String propertyName, - Class<T> clazz)
                -
                Retrieves a property for a RTDT instance or null if the property does not exist.
                -
                -
                Type Parameters:
                -
                T - the type of the property to return.
                -
                Parameters:
                -
                instanceId - the instance id.
                -
                propertyName - the property name.
                -
                clazz - the class of the property type.
                -
                Returns:
                -
                the property value.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html deleted file mode 100644 index cff66a9..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.html +++ /dev/null @@ -1,338 +0,0 @@ - - - - -PersistenceProviderType (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class PersistenceProviderType

            -
            -
            java.lang.Object -
            java.lang.Enum<PersistenceProviderType> -
            com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<PersistenceProviderType>, Constable
            -
            -
            -
            public enum PersistenceProviderType -extends Enum<PersistenceProviderType> -implements Serializable
            -
            Available PersistenceProvider types.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              - -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static PersistenceProviderType[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static PersistenceProviderType valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              • -
                -

                getName

                -
                public String getName()
                -
                Retrieve the name of the persistence provider type.
                -
                -
                Returns:
                -
                the name of the persistence provider type.
                -
                -
                -
              • -
              • -
                -

                getServiceOrdinalValue

                -
                public int getServiceOrdinalValue()
                -
                Retrieve the ordinal value (used by the DTBuidler service).
                -
                -
                Returns:
                -
                the ordinal value.
                -
                -
                -
              • -
              • -
                -

                fromString

                -
                public static PersistenceProviderType fromString(String name)
                -
                Return the PersistenceProviderType from a string value. We do not rely on Java's naming - because the string values need to be cross-platform and the names may be different in each language.
                -
                -
                Parameters:
                -
                name - the enums name.
                -
                Returns:
                -
                the associated PersistenceProviderType, or null if no association exists.
                -
                -
                -
              • -
              • -
                -

                fromOrdinal

                -
                public static PersistenceProviderType fromOrdinal(int ordinal)
                -
                Return the PersistenceProviderType from an ordinal value. We do not rely on Java's ordering - because the ordinal values need to be cross-platform, and the values may be ordered differently.
                -
                -
                Parameters:
                -
                ordinal - the enums ordinal value.
                -
                Returns:
                -
                the associated PersistenceProviderType, or null if no association exists.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html deleted file mode 100644 index ea553fe..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.html +++ /dev/null @@ -1,592 +0,0 @@ - - - - -ProcessingContext (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class ProcessingContext

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public abstract class ProcessingContext -extends Object -implements Serializable
            -
            Context object that allows the user to send a message to a DataSource.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                ProcessingContext

                -
                public ProcessingContext()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                sendToDataSource

                -
                public abstract SendingResult sendToDataSource(byte[] payload)
                -

                - Sends a message to a data source. This will route messages through the connector back to the data source. -

                - -

                - if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - of the MessageProcessor. -

                -
                -
                Parameters:
                -
                payload - the message (as a serialized JSON string)
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDataSource

                -
                public abstract SendingResult sendToDataSource(Object jsonSerializableMessage)
                -

                - Sends a message to a data source. This will route messages through the connector back to the data source. -

                - -

                - if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - of the MessageProcessor. -

                -
                -
                Parameters:
                -
                jsonSerializableMessage - a JSON serializable message.
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDataSource

                -
                public abstract SendingResult sendToDataSource(List<Object> jsonSerializableMessages)
                -

                - Sends a list of messages to a data source. This will route messages through the connector back to the data source. -

                - -

                - if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - of the MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable). -

                -
                -
                Parameters:
                -
                jsonSerializableMessages - a list of JSON serializable messages.
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - byte[] payload)
                -

                - This method sends a serialized JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                payload - the serialized JSON message
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - Object jsonSerializableMessage)
                -

                - This method sends a serialized JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                jsonSerializableMessage - a JSON serializable message object
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - String payload)
                -

                - This method sends a JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                payload - the JSON message
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendToDigitalTwin

                -
                public abstract SendingResult sendToDigitalTwin(String model, - String id, - List<byte[]> payload)
                -

                - This method sends a list of serialized JSON message to a real-time digital twin -

                - -

                - Note, the message contents must be serialized so that the registered message type - of the digital twin model will be sufficient to deserialize the message. -

                -
                -
                Parameters:
                -
                model - the model of the digital twin
                -
                id - the id of the digital twin
                -
                payload - the JSON message
                -
                Returns:
                -
                the sending result
                -
                -
                -
              • -
              • -
                -

                sendAlert

                -
                public abstract SendingResult sendAlert(String alertingProviderName, - AlertMessage alert)
                -

                - This method sends an alert message to supported systems. -

                - -

                - When a model is deployed, an optional alerting provider configuration can be supplied. The provider name corresponds - to the name of the configured alerting provider. For example, if an alerting provider configuration is called - "SREPod1", then the processing context will send an alert message to the alerting provider configured with the name - "SREPod1". -

                - -

                - If the message cannot be sent then SendingResult.NotHandled will be returned. If the message is sent - and in process of sending then SendingResult.Enqueued will be returned. Once the message is successfully sent - then the returned enum will be changed to SendingResult.Handled. -

                -
                -
                Parameters:
                -
                alertingProviderName - the alerting provider name. Note, must match a valid configuration.
                -
                alert - the alert message.
                -
                Returns:
                -
                the sending result.
                -
                -
                -
              • -
              • -
                -

                getPersistenceProvider

                -
                public abstract PersistenceProvider getPersistenceProvider()
                -
                Returns the configured persistence provider or null if no persistence provider configuration can be found.
                -
                -
                Returns:
                -
                a PersistenceProvider .
                -
                -
                -
              • -
              • -
                -

                getDataSourceId

                -
                public abstract String getDataSourceId()
                -
                Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID)
                -
                -
                Returns:
                -
                the digital twin id
                -
                -
                -
              • -
              • -
                -

                getDigitalTwinModel

                -
                public abstract String getDigitalTwinModel()
                -
                Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin)
                -
                -
                Returns:
                -
                the digital twin model
                -
                -
                -
              • -
              • -
                -

                logMessage

                -
                public abstract void logMessage(Level severity, - String message)
                -
                Logs a message to the real-time digital twin cloud service. - - Note: the only supported severity levels are: INFO, WARN, and SEVERE
                -
                -
                Parameters:
                -
                severity - the severity of the log message
                -
                message - the message to log
                -
                -
                -
              • -
              • -
                -

                startTimer

                -
                public abstract <T extends DigitalTwinBase> -TimerActionResult startTimer(String timerName, - Duration interval, - TimerType timerType, - TimerHandler<T> timerHandler)
                -
                Starts a new timer for the digital twin
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin
                -
                Parameters:
                -
                timerName - the timer name
                -
                interval - the timer interval
                -
                timerType - the timer type
                -
                timerHandler - the time handler callback
                -
                Returns:
                -
                returns TimerActionResult.Success if the timer was started, TimerActionResult.FailedTooManyTimers - if too many timers exist, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                -
                -
                -
              • -
              • -
                -

                stopTimer

                -
                public abstract TimerActionResult stopTimer(String timerName)
                -
                Stops the specified timer.
                -
                -
                Parameters:
                -
                timerName - the timer name.
                -
                Returns:
                -
                returns TimerActionResult.Success if the timer was stopped, TimerActionResult.FailedNoSuchTimer - if no timer exists with that name, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                -
                -
                -
              • -
              • -
                -

                getCurrentTime

                -
                public abstract Date getCurrentTime()
                -
                Retrieves the current time. If the model (simulation or real-time) is running inside of a simulation then the - simulation time will be returned.
                -
                -
                Returns:
                -
                The current time (real time, or simulation if running under simulation).
                -
                -
                -
              • -
              • -
                -

                getSimulationController

                -
                public abstract SimulationController getSimulationController()
                -
                Retrieve the running SimulationController or null if no simulation is running.
                -
                -
                Returns:
                -
                the SimulationController or null if no simulation is running.
                -
                -
                -
              • -
              • -
                -

                getSharedModelData

                -
                public abstract SharedData getSharedModelData()
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                public abstract SharedData getSharedGlobalData()
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                Returns:
                -
                a SharedData instance.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html deleted file mode 100644 index 99cf30d..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - -ProcessingResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class ProcessingResult

            -
            -
            java.lang.Object -
            java.lang.Enum<ProcessingResult> -
            com.scaleoutsoftware.digitaltwin.core.ProcessingResult
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<ProcessingResult>, Constable
            -
            -
            -
            public enum ProcessingResult -extends Enum<ProcessingResult>
            -
            The result from a message processor which indicates to update the state object or to ignore
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                UpdateDigitalTwin

                -
                public static final ProcessingResult UpdateDigitalTwin
                -
                Update the digital twin.
                -
                -
              • -
              • -
                -

                NoUpdate

                -
                public static final ProcessingResult NoUpdate
                -
                Do not update the digital twin.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static ProcessingResult[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static ProcessingResult valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html deleted file mode 100644 index 3bce6fe..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SendingResult.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - -SendingResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class SendingResult

            -
            -
            java.lang.Object -
            java.lang.Enum<SendingResult> -
            com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<SendingResult>, Constable
            -
            -
            -
            public enum SendingResult -extends Enum<SendingResult>
            -
            Marks a message as Delivered or not Delivered
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Handled

                -
                public static final SendingResult Handled
                -
                Handled indicates that a message was successfully sent and processed
                -
                -
              • -
              • -
                -

                Enqueued

                -
                public static final SendingResult Enqueued
                -
                Enqueued indicates that a message was successfully formed and then sent to an internal messaging service
                -
                -
              • -
              • -
                -

                NotHandled

                -
                public static final SendingResult NotHandled
                -
                NotHandled indicates that the message was not handled. This can occur if an exception occurs - in the message processor or if internal messaging service reached capacity.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static SendingResult[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static SendingResult valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html deleted file mode 100644 index a0da3b9..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SharedData.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - -SharedData (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface SharedData

            -
            -
            -
            -
            public interface SharedData
            -
            SharedData is used to access a model's, or globally, shared cache.
            -
            -
            -
              - -
            • -
              -

              Method Summary

              -
              -
              -
              -
              -
              Modifier and Type
              -
              Method
              -
              Description
              - - -
              -
              Clear the shared data cache.
              -
              - -
              get(String key)
              -
              -
              Retrieves an existing object from the cache.
              -
              - -
              put(String key, - byte[] value)
              -
              -
              Put a new key/value mapping into the cache.
              -
              - - -
              -
              Remove a key/value mapping from the cache.
              -
              -
              -
              -
              -
              -
            • -
            -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                get

                -
                CacheResult get(String key)
                -
                Retrieves an existing object from the cache.
                -
                -
                Parameters:
                -
                key - the key mapping to a value.
                -
                Returns:
                -
                A cache result.
                -
                -
                -
              • -
              • -
                -

                put

                -
                CacheResult put(String key, - byte[] value)
                -
                Put a new key/value mapping into the cache.
                -
                -
                Parameters:
                -
                key - the key mapping to a value.
                -
                value - the value.
                -
                Returns:
                -
                a cache result.
                -
                -
                -
              • -
              • -
                -

                remove

                -
                CacheResult remove(String key)
                -
                Remove a key/value mapping from the cache.
                -
                -
                Parameters:
                -
                key - the key mapping to a value.
                -
                Returns:
                -
                a cache result.
                -
                -
                -
              • -
              • -
                -

                clear

                -
                CacheResult clear()
                -
                Clear the shared data cache.
                -
                -
                Returns:
                -
                a cache result.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html deleted file mode 100644 index df4c127..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationController.html +++ /dev/null @@ -1,430 +0,0 @@ - - - - -SimulationController (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface SimulationController

            -
            -
            -
            -
            public interface SimulationController
            -
            The SimulationController interface is used to interact with the running DigitalTwin simulation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getSimulationTimeIncrement

                -
                Duration getSimulationTimeIncrement()
                -

                - Retrieves the current simulation time increment. -

                -
                -
                Returns:
                -
                the simulation time increment.
                -
                -
                -
              • -
              • -
                -

                getSimulationStartTime

                -
                Date getSimulationStartTime()
                -

                - Retrieves the simulation start time. -

                -
                -
                Returns:
                -
                the simulation start time.
                -
                -
                -
              • -
              • -
                -

                delay

                -
                SendingResult delay(Duration duration)
                -

                - Delay simulation processing for this DigitalTwin instance for a duration of time. -

                - -

                - Simulation processing will be delayed for the duration specified relative to the current simulation time. -

                - -

                - Examples: -

                - -

                - at a current simulation time of 10, an interval of 20, and a delay of 40 -- the instance would - skip one cycle of processing and be processed at simulation time 50. -

                - -

                - at a current simulation time of 10, an interval of 20, and a delay of 30 -- the instance would - skip one cycle of processing and be processed at simulation time 50. -

                - -

                - at a current simulation time of 10, an interval of 20, and a delay of 50 -- the instance would - skip two cycles of processing and be processed at simulation time 70. -

                -
                -
                Parameters:
                -
                duration - the duration to delay.
                -
                Returns:
                -
                SendingResult.Handled if the delay was processed or SendingResult.NotHandled - if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                delayIndefinitely

                -
                SendingResult delayIndefinitely()
                -

                - Delay simulation processing for this DigitalTwin instance, indefinitely. -

                - -

                - Simulation processing will be delayed until this instance is run with runThisInstance(). -

                -
                -
                Returns:
                -
                SendingResult.Handled if the delay was processed or SendingResult.NotHandled - if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                emitTelemetry

                -
                SendingResult emitTelemetry(String modelName, - byte[] telemetryMessage)
                -

                - Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method. -

                -
                -
                Parameters:
                -
                modelName - the model to send the messages too.
                -
                telemetryMessage - a blob representing a JSON serialized messages.
                -
                Returns:
                -
                SendingResult.Handled if the messages were processed, SendingResult.Enqueued if - the messages are in process of being handled, or SendingResult.NotHandled if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                emitTelemetry

                -
                SendingResult emitTelemetry(String modelName, - Object jsonSerializableMessage)
                -

                - Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method. -

                -
                -
                Parameters:
                -
                modelName - the model to send the messages too.
                -
                jsonSerializableMessage - an object message that is JSON serializable.
                -
                Returns:
                -
                SendingResult.Handled if the messages were processed, SendingResult.Enqueued if - the messages are in process of being handled, or SendingResult.NotHandled if the delay was not processed.
                -
                -
                -
              • -
              • -
                -

                createInstance

                -
                <T extends DigitalTwinBase> SendingResult createInstance(String modelName, - String instanceId, - T base)
                -
                Create a new digital twin instance for simulation processing.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin to create.
                -
                Parameters:
                -
                modelName - the model name.
                -
                instanceId - the instance id.
                -
                base - the instance to create.
                -
                Returns:
                -
                SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance - is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                -
                -
                -
              • -
              • -
                -

                createInstanceFromPersistenceStore

                -
                SendingResult createInstanceFromPersistenceStore(String model, - String id)
                -
                Create a new digital twin instance for simulation processing from a persistence store. - - The twin instance will be loaded via model name and id from a persistence store. - - If no instance can be found, then an exception will be thrown and no instance will be created.
                -
                -
                Parameters:
                -
                model - The model name.
                -
                id - the instance id.
                -
                Returns:
                -
                SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance - is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                -
                -
                -
              • -
              • -
                -

                createInstanceFromPersistenceStore

                -
                <T extends DigitalTwinBase> SendingResult createInstanceFromPersistenceStore(String model, - String id, - T def)
                -
                The twin instance will be loaded via model name and id from a persistence store. - - The twin instance will be loaded via model name and id from a persistence store. - - If no instance can be found, then the default parameter instance will be used.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin to create.
                -
                Parameters:
                -
                model - the model name.
                -
                id - the instance id.
                -
                def - the default instance to create.
                -
                Returns:
                -
                SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance - * is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                -
                -
                -
              • -
              • -
                -

                deleteInstance

                -
                SendingResult deleteInstance(String modelName, - String instanceId)
                -
                Delete and remove a digital twin instance from simulation processing.
                -
                -
                Parameters:
                -
                modelName - the model name.
                -
                instanceId - the instance id.
                -
                Returns:
                -
                SendingResult.Handled if the instance was deleted, SendingResult.Enqueued if the instance - is in process of being deleted, or SendingResult.NotHandled if the instance could not be deleted.
                -
                -
                -
              • -
              • -
                -

                deleteThisInstance

                -
                SendingResult deleteThisInstance()
                -
                Delete and remove this digital twin instance from simulation processing.
                -
                -
                Returns:
                -
                this local request will always return SendingResult.Handled.
                -
                -
                -
              • -
              • -
                -

                runThisInstance

                -
                void runThisInstance()
                -
                Run this instance during this simulation step. The instance will be run using the models SimulationProcessor.processModel(ProcessingContext, DigitalTwinBase, Date) - implementation. - - This will cause the simulation sub-system to run this instance regardless of the instances current - DigitalTwinBase.NextSimulationTime.
                -
                -
              • -
              • -
                -

                stopSimulation

                -
                SimulationStatus stopSimulation()
                -
                Stop the simulation.
                -
                -
                Returns:
                -
                a SimulationStatus.InstanceRequestedStop.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html deleted file mode 100644 index 64de0a7..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.html +++ /dev/null @@ -1,232 +0,0 @@ - - - - -SimulationProcessor (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class SimulationProcessor<T extends DigitalTwinBase>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.SimulationProcessor<T>
            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the digital twin.
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public abstract class SimulationProcessor<T extends DigitalTwinBase> -extends Object -implements Serializable
            -
            Processes simulation events for a digital twin.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                SimulationProcessor

                -
                public SimulationProcessor()
                -
                Default constructor.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                processModel

                -
                public abstract ProcessingResult processModel(ProcessingContext context, - T instance, - Date epoch)
                -
                Processes simulation events for a real-time digital twin.
                -
                -
                Parameters:
                -
                context - the processing context.
                -
                instance - the digital twin instance.
                -
                epoch - the current time of the simulation.
                -
                Returns:
                -
                ProcessingResult.UpdateDigitalTwin to update the digital twin, or - ProcessingResult.NoUpdate to ignore the changes.
                -
                -
                -
              • -
              • -
                -

                onInitSimulation

                -
                public ProcessingResult onInitSimulation(InitSimulationContext context, - T instance, - Date epoch)
                -

                - Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. -

                - -

                - onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed - between simulation runs. -

                -
                  -
                • Set variables in global or shared data.
                • -
                • Run a simulation.
                • -
                • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
                • -
                • Complete simulation and evaluate the result.
                • -
                -
                -
                Parameters:
                -
                context - The simulation init context.
                -
                instance - The digital twin instance.
                -
                epoch - the simulation start time.
                -
                Returns:
                -
                ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate. Default behavior: ProcessingResult.NoUpdate.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html deleted file mode 100644 index 95a1b09..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - -SimulationStatus (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class SimulationStatus

            -
            -
            java.lang.Object -
            java.lang.Enum<SimulationStatus> -
            com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<SimulationStatus>, Constable
            -
            -
            -
            public enum SimulationStatus -extends Enum<SimulationStatus>
            -
            The status of a simulation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Running

                -
                public static final SimulationStatus Running
                -
                The simulation is running.
                -
                -
              • -
              • -
                -

                NotSet

                -
                public static final SimulationStatus NotSet
                -
                The simulation status is not set.
                -
                -
              • -
              • -
                -

                UserRequested

                -
                public static final SimulationStatus UserRequested
                -
                The user requested a stop.
                -
                -
              • -
              • -
                -

                EndTimeReached

                -
                public static final SimulationStatus EndTimeReached
                -
                The simulation end time has been reached.
                -
                -
              • -
              • -
                -

                NoRemainingWork

                -
                public static final SimulationStatus NoRemainingWork
                -
                There is no remaining work for the simulation.
                -
                -
              • -
              • -
                -

                InstanceRequestedStop

                -
                public static final SimulationStatus InstanceRequestedStop
                -
                A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
                -
                -
              • -
              • -
                -

                UnexpectedChangeInConfiguration

                -
                public static final SimulationStatus UnexpectedChangeInConfiguration
                -
                There was a runtime-change of simulation configuration.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static SimulationStatus[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static SimulationStatus valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html deleted file mode 100644 index 9cb2a82..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.html +++ /dev/null @@ -1,279 +0,0 @@ - - - - -TimerActionResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class TimerActionResult

            -
            -
            java.lang.Object -
            java.lang.Enum<TimerActionResult> -
            com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<TimerActionResult>, Constable
            -
            -
            -
            public enum TimerActionResult -extends Enum<TimerActionResult>
            -
            The result of a timer action.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Success

                -
                public static final TimerActionResult Success
                -
                The operation completed successfully.
                -
                -
              • -
              • -
                -

                FailedTooManyTimers

                -
                public static final TimerActionResult FailedTooManyTimers
                -
                Failed to start a new timer due to reaching the limit for a number of active timers.
                -
                -
              • -
              • -
                -

                FailedNoSuchTimer

                -
                public static final TimerActionResult FailedNoSuchTimer
                -
                Failed to stop the existing timer, the timer is no longer active.
                -
                -
              • -
              • -
                -

                FailedTimerAlreadyExists

                -
                public static final TimerActionResult FailedTimerAlreadyExists
                -
                Failed to start the timer, the timer with the specified name already exists.
                -
                -
              • -
              • -
                -

                FailedInternalError

                -
                public static final TimerActionResult FailedInternalError
                -
                Failed to start/stop timer due to an internal error.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static TimerActionResult[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static TimerActionResult valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              • -
                -

                fromOrdinal

                -
                public static TimerActionResult fromOrdinal(int val)
                - -
                -
                Parameters:
                -
                val - the ordinal value.
                -
                Returns:
                -
                the associated TimerActionResult or throws an IllegalArgumentException for an unexpected - ordinal value.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html deleted file mode 100644 index 60c2c72..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerHandler.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - -TimerHandler (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Interface TimerHandler<T extends DigitalTwinBase>

            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the DigitalTwinBase.
            -
            -
            -
            public interface TimerHandler<T extends DigitalTwinBase>
            -
            Callback to a handle a timer message for a DigitalTwinBase.
            -
            -
            - -
            -
            - -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html deleted file mode 100644 index b2824fe..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.html +++ /dev/null @@ -1,233 +0,0 @@ - - - - -TimerMetadata (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class TimerMetadata<T extends DigitalTwinBase>

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.core.TimerMetadata<T>
            -
            -
            -
            -
            Type Parameters:
            -
            T - the type of the DigitalTwinBase implementation.
            -
            -
            -
            public class TimerMetadata<T extends DigitalTwinBase> -extends Object
            -
            Metadata class for a timer.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                TimerMetadata

                -
                public TimerMetadata(TimerHandler<T> handler, - TimerType timerType, - long timerIntervalMs, - int timerIdx)
                -
                Constructs a timer metadata.
                -
                -
                Parameters:
                -
                handler - the timer handler.
                -
                timerType - the timer type.
                -
                timerIntervalMs - the timer interval.
                -
                timerIdx - the timer index.
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getTimerHandlerClass

                -
                public String getTimerHandlerClass()
                -
                Retrieves the timer handler class name.
                -
                -
                Returns:
                -
                the timer handler class name.
                -
                -
                -
              • -
              • -
                -

                getTimerType

                -
                public TimerType getTimerType()
                -
                Retrieves the timer type.
                -
                -
                Returns:
                -
                the timer type.
                -
                -
                -
              • -
              • -
                -

                getTimerIntervalMs

                -
                public long getTimerIntervalMs()
                -
                Retrieves the timer interval.
                -
                -
                Returns:
                -
                the timer interval.
                -
                -
                -
              • -
              • -
                -

                getTimerId

                -
                public int getTimerId()
                -
                Retrieves the timer ID.
                -
                -
                Returns:
                -
                the timer ID.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html deleted file mode 100644 index cef4477..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/TimerType.html +++ /dev/null @@ -1,223 +0,0 @@ - - - - -TimerType (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Enum Class TimerType

            -
            -
            java.lang.Object -
            java.lang.Enum<TimerType> -
            com.scaleoutsoftware.digitaltwin.core.TimerType
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable, Comparable<TimerType>, Constable
            -
            -
            -
            public enum TimerType -extends Enum<TimerType>
            -
            Enum representation of the available timer types
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Enum Constant Details

              -
                -
              • -
                -

                Recurring

                -
                public static final TimerType Recurring
                -
                This timer should reoccur on a schedule.
                -
                -
              • -
              • -
                -

                OneTime

                -
                public static final TimerType OneTime
                -
                This timer should trigger one time.
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                values

                -
                public static TimerType[] values()
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                Returns:
                -
                an array containing the constants of this enum class, in the order they are declared
                -
                -
                -
              • -
              • -
                -

                valueOf

                -
                public static TimerType valueOf(String name)
                -
                Returns the enum constant of this class with the specified name. -The string must match exactly an identifier used to declare an -enum constant in this class. (Extraneous whitespace characters are -not permitted.)
                -
                -
                Parameters:
                -
                name - the name of the enum constant to be returned.
                -
                Returns:
                -
                the enum constant with the specified name
                -
                Throws:
                -
                IllegalArgumentException - if this enum class has no constant with the specified name
                -
                NullPointerException - if the argument is null
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html deleted file mode 100644 index 9fa1f27..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-summary.html +++ /dev/null @@ -1,191 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.core (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Package com.scaleoutsoftware.digitaltwin.core

            -
            -
            -
            package com.scaleoutsoftware.digitaltwin.core
            -
            -
            Digital twin model API - Create a digital twin model.
            -
            -
            - -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html deleted file mode 100644 index d2f2c59..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/core/package-tree.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.core Class Hierarchy (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Hierarchy For Package com.scaleoutsoftware.digitaltwin.core

            -Package Hierarchies: - -
            -
            -

            Class Hierarchy

            - -
            -
            -

            Interface Hierarchy

            - -
            -
            -

            Enum Class Hierarchy

            - -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html deleted file mode 100644 index f94cc8d..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/LogMessage.html +++ /dev/null @@ -1,170 +0,0 @@ - - - - -LogMessage (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class LogMessage

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.LogMessage
            -
            -
            -
            -
            public class LogMessage -extends Object
            -
            A messaged that was logged by a digital twin.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getMessage

                -
                public String getMessage()
                -
                Retrieve the string message associated with this log message.
                -
                -
                Returns:
                -
                the message.
                -
                -
                -
              • -
              • -
                -

                getSeverity

                -
                public Level getSeverity()
                -
                Retrieve the severity of this log message.
                -
                -
                Returns:
                -
                the severity.
                -
                -
                -
              • -
              • -
                -

                getTimestamp

                -
                public long getTimestamp()
                -
                Retrieve the timestamp from when this message was generated.
                -
                -
                Returns:
                -
                the timestamp.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html deleted file mode 100644 index de93f73..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - -SimulationEventResult (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class SimulationEventResult

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
            -
            -
            -
            -
            public abstract class SimulationEventResult -extends Object
            -
            A simulation event result.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                SimulationEventResult

                -
                public SimulationEventResult()
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html deleted file mode 100644 index cc34461..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - -SimulationStep (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class SimulationStep

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.SimulationStep
            -
            -
            -
            -
            public class SimulationStep -extends Object
            -
            The simulation step class encases the metadata for a completed interval of a simulation.
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                getStatus

                -
                public SimulationStatus getStatus()
                -
                Retrieve the SimulationStatus of the simulation interval.
                -
                -
                Returns:
                -
                the current simulation status.
                -
                -
                -
              • -
              • -
                -

                getTime

                -
                public long getTime()
                -
                Retrieve the time of the simulation interval.
                -
                -
                Returns:
                -
                the simulation interval time.
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html deleted file mode 100644 index cc54152..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/Workbench.html +++ /dev/null @@ -1,872 +0,0 @@ - - - - -Workbench (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class Workbench

            -
            -
            java.lang.Object -
            com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            AutoCloseable
            -
            -
            -
            public class Workbench -extends Object -implements AutoCloseable
            -
            The Workbench is used to represent an environment where developers can test real-time and simulated digital twins. -

            - Quick start: -

            -

            - Build a real-time digital twin model for testing real-time message processing with messages generated by a simulated - digital twin. -

            -

            - The real-time model will represent a car and the simulated digital twin will - represent a pump increasing the real-time car's tire pressure. The real-time car will process messages from the - simulated pump and send information back to the simulated pump when the tire is full. -

            - -

            The quickstart will demonstrate the following:

            -
              -
            • Define a real-time car digital twin
            • -
            • Define a tire pressure change message
            • -
            • Define a real-time car message processor
            • -
            • Define a simulated pump digital twin
            • -
            • Define a simulated pump message processor
            • -
            • Define a simulated pump simulation processor
            • -
            - -

            - Defining the real-time car model: -

            - -

            - Create a class that extends the DigitalTwinBase class and add an integer property for tire pressure. - When constructed by the Workbench this will be our real-time car instance. -

            -
            -     public class RealTimeCar extends DigitalTwinBase {
            -         private int _tirePressure;
            -         public RealTimeCar() { _tirePressure=0; }
            -         public RealTimeCar(int startingTirePressure) {
            -             _tirePressure = startingTirePressure;
            -         }
            -
            -         public void incrementTirePressure(int increment) {
            -             _tirePressure += increment;
            -         }
            -
            -         public int getTirePressure() {
            -             return _tirePressure;
            -         }
            -     }
            - 
            -

            - Defining the tire pressure change message: -

            -

            - Implement a message to send from the simulated pump, to the real-time model. The message will tell the real-time - car to increase the tire pressure by some value. -

            - -
            -     public class TirePressureMessage {
            -         final int _pressureChange;
            -         public TirePressureMessage(int pressureChange) {
            -             _pressureChange = pressureChange;
            -         }
            -
            -         public int getPressureChange() {
            -             return _pressureChange;
            -         }
            -     }
            - 
            - -

            - Defining the real-time car message processor: -

            - -

            - Create the real-time car MessageProcessor. The message processor will apply the tire pressure change from the tire - pressure message to the real-time car digital twin instance. When the tire is full, the message processor will - send a message back to the simulated pump. -

            -
            -     public class RealTimeCarMessageProcessor extends MessageProcessor<RealTimeCar, TirePressureMessage> implements Serializable {
            -         final int TIRE_PRESSURE_FULL = 100;
            -         public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable<TirePressureMessage> messages) throws Exception {
            -             // apply the updates from the messages
            -             for(TirePressureMessage message : messages) {
            -                 car.incrementTirePressure(message.getPressureChange());
            -             }
            -             if(car.getTirePressure() > TIRE_PRESSURE_FULL) {
            -                 processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure()));
            -             }
            -             return ProcessingResult.UpdateDigitalTwin;
            -         }
            -     }
            - 
            - -

            - Defining the simulated pump model: -

            - -

            - Create a class that extends the DigitalTwinBase class and add a double property for tire pressure change. - When constructed by the Workbench this will be our simulated pump instance. -

            -
            -     public class SimulatedPump extends DigitalTwinBase {
            -     private double _tirePressureChange;
            -     private boolean _tirePressureReached = false;
            -     public SimulatedPump() {}
            -     public SimulatedPump(double pressureChange) {
            -         _tirePressureChange = pressureChange;
            -     }
            -
            -     public double getTirePressureChange() {
            -         return _tirePressureChange;
            -     }
            -
            -     public void setTirePressureReached() {
            -         _tirePressureReached = true;
            -     }
            -
            -     public boolean isTireFull() {
            -         return _tirePressureReached;
            -     }
            - }
            - 
            - -

            - Defining the simulated pump message processor: -

            - -

            - The simulated pump should stop when the simulated pump message processor receives a message. The simulated pump message - processor will update the state of the simulated pump indicating that the tire is full. -

            -
            -     public class PumpMessageProcessor extends MessageProcessor<SimulatedPump, TirePressureMessage> implements Serializable {
            -         public ProcessingResult processMessages(ProcessingContext processingContext, SimulatedPump pump, Iterable<TirePressureMessage> messages) throws Exception {
            -             // apply the updates from the messages
            -             pump.setTirePressureReached();
            -             return ProcessingResult.UpdateDigitalTwin;
            -         }
            -     }
            - 
            - -

            - Defining the pump simulation processor: -

            - -

            - Define the simulated pump SimulationProcessor. This piece of code will be called at each simulation interval so - long as the simulation has instances to run. This pump simulation processor will send a message to the - real-time car with a tire pressure change derived from the state of the simulated pump. While the simulated pump has not been - told to stop, it will continue sending tire pressure changes to the real-time car. -

            -
            -     public class PumpSimulationProcessor extends SimulationProcessor<SimulatedPump> implements Serializable {
            -         public ProcessingResult processModel(ProcessingContext processingContext, SimulatedPump simPump, Date date) {
            -             SimulationController controller = processingContext.getSimulationController();
            -             if(simPump.isTireFull()) {
            -                 controller.deleteThisInstance();
            -             } else {
            -                 int change = (int) (100 * simPump.getTirePressureChange());
            -                 controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change));
            -             }
            -             return ProcessingResult.UpdateDigitalTwin;
            -         }
            -     }
            - 
            - -

            - Using the workbench: -

            - -

            - The real-time and simulation models are complete. The workbench can now load up the models and then run a simulation. - When beginning testing, the "step loop" is used to track the state of the twins and the simulation. Instantiate the - workbench and add the models. -

            - -
            -     Workbench workbench = new Workbench();
            -     workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class);
            -     workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class);
            - 
            - -

            - The workbench is loaded up with the models. Add a single simulated pump instance. - Note that no real-time car digital twin is created and added to the workbench. The first message from the - simulated pump digital twin will cause the workbench to create a new real-time instance. -

            -
            -     workbench.addInstance("SimPump", "23", new SimulationPump(0.29d));
            - 
            - -

            Initialize the simulation and then step through the simulation intervals. Start the simulation now and end the - simulation in 60 seconds.

            - -
            -     SimulationStep step = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis()+60000, 1000);
            - 
            - -

            - At each interval, view the state of the real-time car to ensure the tire pressure is changing as expected. -

            - -
            -     while(step.getStatus() == SimulationStatus.Running) {
            -         step = workbench.step();
            -         HashMap<String, DigitalTwinBase> realTimeCars = workbench.getInstances("RealTimeCar");
            -         RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23");
            -         System.out.println("rtCar: " + rtCar.getTirePressure());
            -     }
            - 
            - -

            - Summary: -

            -

            - The simulated pump at each simulation step emits telemetry to the real-time car digital twin. With each tire pressure - change message, the real-time car twin accrues state about the pressure of the tire. When the real-time car twins tire - is full, it sends a message back to the simulated pump. When the simulated pump receives a message from the real-time car, - it updates some internal state indicating to stop pumping. During the next simulation interval, the simulated pump - deletes itself to stop pumping. This completes the simulation as there are no more remaining simulated pumps. -

            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                Workbench

                -
                public Workbench()
                -
                Instantiate the workbench.
                -
                -
              • -
              • -
                -

                Workbench

                -
                public Workbench(int numSimulationWorkers)
                -
                Instantiate the workbench.
                -
                -
                Parameters:
                -
                numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors().
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              -
                -
              • -
                -

                addRealTimeModel

                -
                public <T extends DigitalTwinBase, -V> void addRealTimeModel(String modelName, - MessageProcessor<T,V> digitalTwinMessageProcessor, - Class<T> dtType, - Class<V> messageClass) - throws WorkbenchException
                -
                Adds a real-time digital twin model to the workbench.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin.
                -
                V - the type of the message.
                -
                Parameters:
                -
                modelName - the name of the model.
                -
                digitalTwinMessageProcessor - the model's MessageProcessor implementation. Must be marked as Serializable.
                -
                dtType - the model's DigitalTwinBase implementation.
                -
                messageClass - the model's message type.
                -
                Throws:
                -
                WorkbenchException - if any of the parameters are null or the model does not pass validation (the message - processor must be serializable, and the digital twin implementation must have a parameterless constructor).
                -
                -
                -
              • -
              • -
                -

                addSimulationModel

                -
                public <T extends DigitalTwinBase, -V> void addSimulationModel(String modelName, - MessageProcessor<T,V> digitalTwinMessageProcessor, - SimulationProcessor<T> simulationProcessor, - Class<T> dtType, - Class<V> messageClass) - throws WorkbenchException
                -
                Adds a simulation digital twin model to the workbench.
                -
                -
                Type Parameters:
                -
                T - the type of the digital twin.
                -
                V - the type of the message.
                -
                Parameters:
                -
                modelName - the name of the model.
                -
                digitalTwinMessageProcessor - the model's MessageProcessor implementation. Must be marked as Serializable.
                -
                simulationProcessor - the model's SimulationProcessor implementation. Must be marked as Serializable.
                -
                dtType - the model's DigitalTwinBase implementation.
                -
                messageClass - the model's message type.
                -
                Throws:
                -
                WorkbenchException - if any of the parameters are null or the model does not pass validation (the message - processor must be serializable, and the digital twin implementation must have a parameterless constructor).
                -
                -
                -
              • -
              • -
                -

                addInstance

                -
                public void addInstance(String modelName, - String id, - DigitalTwinBase instance) - throws WorkbenchException
                -
                Adds a digital twin instance to the workbench. - Instances cannot be added to the workbench after runSimulation(long, long, double, long) or - initializeSimulation(long, long, long) has been called.
                -
                -
                Parameters:
                -
                modelName - the instances model.
                -
                id - the instance identifier.
                -
                instance - the real-time or simulation instance.
                -
                Throws:
                -
                WorkbenchException - If the model does not exist or if a simulation is already running.
                -
                -
                -
              • -
              • -
                -

                addAlertProvider

                -
                public void addAlertProvider(String modelName, - AlertProviderConfiguration configuration) - throws WorkbenchException
                -
                Adds an alert provider configuration to the specified model on this workbench. - Alert provider configurations cannot be added to the workbench after runSimulation(long, long, double, long) or - initializeSimulation(long, long, long) has been called.
                -
                -
                Parameters:
                -
                modelName - the instances model.
                -
                configuration - the alert provider configuration.
                -
                Throws:
                -
                WorkbenchException - If the model does not exist or if a simulation is already running.
                -
                -
                -
              • -
              • -
                -

                runSimulation

                -
                public SimulationStep runSimulation(long startTime, - long endTime, - double speedup, - long interval) - throws WorkbenchException
                -
                Runs a simulation from the given startTime until the given endTime OR there is no more work to do. - A simulation has reached the end time when the time to run the next interval is greater than the end time or - there are no more simulated twins to run.
                -
                -
                Parameters:
                -
                startTime - the start time of the simulation.
                -
                endTime - the end time of the simulation.
                -
                speedup - the speedup of the interval (in real-time).
                -
                interval - the interval between simulation steps.
                -
                Returns:
                -
                a SimulationStep that details the final runtime and the SimulationStatus.
                -
                Throws:
                -
                WorkbenchException - if an exception is thrown by the simulated model or real-time model.
                -
                -
                -
              • -
              • -
                -

                initializeSimulation

                -
                public SimulationStep initializeSimulation(long startTime, - long endTime, - long interval)
                -
                Initializes the simulation so that each interval can be run separately by calling the step() - function.
                -
                -
                Parameters:
                -
                startTime - the start time of the simulation.
                -
                endTime - the end time of the simulation.
                -
                interval - the interval between simulation steps.
                -
                Returns:
                -
                a SimulationStep that details the startTime and the SimulationStatus -- which will always be SimulationStatus.Running.
                -
                -
                -
              • -
              • -
                -

                step

                -
                public SimulationStep step() - throws WorkbenchException
                -
                Run the next simulation interval.
                -
                -
                Returns:
                -
                a SimulationStep that shows the time interval that was run and the corresponding SimulationStatus
                -
                Throws:
                -
                WorkbenchException - if an exception is thrown by the simulated model or real-time model.
                -
                -
                -
              • -
              • -
                -

                getTime

                -
                public Date getTime() - throws WorkbenchException
                -
                Retrieves the current time interval of the simulation.
                -
                -
                Returns:
                -
                a Date representation for the current interval time for the simulation.
                -
                Throws:
                -
                WorkbenchException - if the simulation is not started or initialized.
                -
                -
                -
              • -
              • -
                -

                peek

                -
                public Date peek() - throws WorkbenchException
                -
                Retrieves the next interval time of the simulation.
                -
                -
                Returns:
                -
                a Date representation for the next interval time for the simulation.
                -
                Throws:
                -
                WorkbenchException - if the simulation is not started or initialized.
                -
                -
                -
              • -
              • -
                -

                getInstances

                -
                public HashMap<String,DigitalTwinBase> getInstances(String modelName) - throws WorkbenchException
                -
                Retrieves DigitalTwin instances for a given model.
                -
                -
                Parameters:
                -
                modelName - the digital twin model name
                -
                Returns:
                -
                the instances associated with the parameter model
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while retrieving digital twin instances for the parameter modelName
                -
                -
                -
              • -
              • -
                -

                getLoggedMessages

                -
                public List<LogMessage> getLoggedMessages(String model, - long timestamp)
                -
                Retrieves messages logged by digital twin instances for a specified mdoel. If the provided timestamp is 0, all messages will be returned. - Timestamps greater than 0 will return a sublist of logged messages where the first message in the returned list - will be greater than the provided timestamp. If no messages exist after the timestamp, the returned list will be - empty.
                -
                -
                Parameters:
                -
                model - the model name for the logged messages.
                -
                timestamp - the timestamp used to filter the retrieved list.
                -
                Returns:
                -
                the list of messages defined by the timestamp
                -
                -
                -
              • -
              • -
                -

                getAlertMessages

                -
                public List<AlertMessage> getAlertMessages(String model, - String alertProvider) - throws WorkbenchException
                -
                Retrieves alert messages from digital twin instances.
                -
                -
                Parameters:
                -
                model - the model to retrieve alert messages from.
                -
                alertProvider - the alert provider that generated the alerts.
                -
                Returns:
                -
                the list of alert messages generated by digital twin instances.
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while retrieving logged messages.
                -
                -
                -
              • -
              • -
                -

                getSharedModelData

                -
                public SharedData getSharedModelData(String model) - throws WorkbenchException
                -
                Retrieve the SharedData for a model.
                -
                -
                Parameters:
                -
                model - the model name.
                -
                Returns:
                -
                the SharedData for a model.
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while creating the working shared data.
                -
                -
                -
              • -
              • -
                -

                getSharedGlobalData

                -
                public SharedData getSharedGlobalData() - throws WorkbenchException
                -
                Retrieve the global SharedData.
                -
                -
                Returns:
                -
                the global SharedData of this workbench.
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while creating the working shared data.
                -
                -
                -
              • -
              • -
                -

                generateModelSchema

                -
                public String generateModelSchema(String modelName) - throws WorkbenchException
                -
                Generates a ModelSchema for the defined model
                -
                -
                Parameters:
                -
                modelName - the digital twin model's name to generate a schema.
                -
                Returns:
                -
                a JSON string of the model's schema
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while generating a model schema.
                -
                -
                -
              • -
              • -
                -

                generateModelSchema

                -
                public String generateModelSchema(String modelName, - String outputDirectory) - throws WorkbenchException
                -
                Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system. If the - parameter outputDirectory is null the file will be written to the working directory of the JVM.
                -
                -
                Parameters:
                -
                modelName - the name of the digital twin model
                -
                outputDirectory - the directory to write the file to, or null to write the file to the current working directory.
                -
                Returns:
                -
                the full file path of the model.json schema file
                -
                Throws:
                -
                WorkbenchException - if an exception occurs while generating a model schema.
                -
                -
                -
              • -
              • -
                -

                send

                -
                public SendingResult send(String modelName, - String id, - List<Object> messages) - throws WorkbenchException
                -
                Send a list of messages to a real-time or simulation model.
                -
                -
                Parameters:
                -
                modelName - The model name.
                -
                id - the instance id.
                -
                messages - the messages to send.
                -
                Returns:
                -
                SendingResult.Handled unless an exception is thrown.
                -
                Throws:
                -
                WorkbenchException - if model name, id, or messages are null. Also thrown if the model's MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) - throws an exception.
                -
                -
                -
              • -
              • -
                -

                addSharedModelData

                -
                public void addSharedModelData(String modelName, - String key, - byte[] value)
                -
                Add a key/value pair to SharedData for a model.
                -
                -
                Parameters:
                -
                modelName - the model name.
                -
                key - the key.
                -
                value - the value.
                -
                -
                -
              • -
              • -
                -

                addGlobalModelData

                -
                public void addGlobalModelData(String key, - byte[] value)
                -
                Add a key/value pair to the global SharedData.
                -
                -
                Parameters:
                -
                key - the key.
                -
                value - the value.
                -
                -
                -
              • -
              • -
                -

                close

                -
                public void close() - throws Exception
                -
                -
                Specified by:
                -
                close in interface AutoCloseable
                -
                Throws:
                -
                Exception
                -
                -
                -
              • -
              -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html deleted file mode 100644 index 23c4465..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html +++ /dev/null @@ -1,221 +0,0 @@ - - - - -WorkbenchException (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            - -
            - -

            Class WorkbenchException

            -
            -
            java.lang.Object -
            java.lang.Throwable -
            java.lang.Exception -
            com.scaleoutsoftware.digitaltwin.development.WorkbenchException
            -
            -
            -
            -
            -
            -
            All Implemented Interfaces:
            -
            Serializable
            -
            -
            -
            public class WorkbenchException -extends Exception
            -
            A Workbench exception indicates that a real-time or simulated twin caused an exception.
            -
            -
            See Also:
            -
            - -
            -
            -
            -
            - -
            -
            -
              - -
            • -
              -

              Constructor Details

              -
                -
              • -
                -

                WorkbenchException

                -
                public WorkbenchException(String message, - Exception e)
                -
                Instantiates a WorkbenchException with the parameter message and inner exception
                -
                -
                Parameters:
                -
                message - the message of this exception
                -
                e - the inner exception
                -
                -
                -
              • -
              • -
                -

                WorkbenchException

                -
                public WorkbenchException(Exception e)
                -
                Instantiates a WorkbenchException with the parameter inner exception
                -
                -
                Parameters:
                -
                e - the inner exception
                -
                -
                -
              • -
              • -
                -

                WorkbenchException

                -
                public WorkbenchException(String message)
                -
                Instantiates a WorkbenchException with the parameter message
                -
                -
                Parameters:
                -
                message - the message of this exception
                -
                -
                -
              • -
              -
              -
            • - -
            • -
              -

              Method Details

              - -
              -
            • -
            -
            - -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html deleted file mode 100644 index fcd247c..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-summary.html +++ /dev/null @@ -1,108 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.development (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Package com.scaleoutsoftware.digitaltwin.development

            -
            -
            -
            package com.scaleoutsoftware.digitaltwin.development
            -
            -
            Digital twin development API - Develop and test simulation/real-time digital twins.
            -
            -
            -
              -
            • -
              -
              -
              -
              -
              Class
              -
              Description
              - -
              -
              A messaged that was logged by a digital twin.
              -
              - -
              -
              A simulation event result.
              -
              - -
              -
              The simulation step class encases the metadata for a completed interval of a simulation.
              -
              - -
              -
              The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
              -
              - -
              -
              A Workbench exception indicates that a real-time or simulated twin caused an exception.
              -
              -
              -
              -
              -
            • -
            -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html deleted file mode 100644 index b449414..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/com/scaleoutsoftware/digitaltwin/development/package-tree.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -com.scaleoutsoftware.digitaltwin.development Class Hierarchy (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Hierarchy For Package com.scaleoutsoftware.digitaltwin.development

            -Package Hierarchies: - -
            -
            -

            Class Hierarchy

            - -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/element-list b/docs/digitaltwin-core-docs/build/docs/javadoc/element-list deleted file mode 100644 index 15c7761..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/element-list +++ /dev/null @@ -1,2 +0,0 @@ -com.scaleoutsoftware.digitaltwin.core -com.scaleoutsoftware.digitaltwin.development diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html b/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html deleted file mode 100644 index 16c9fe8..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/help-doc.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - -API Help (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -

            JavaDoc Help

            - -
            -
            -

            Navigation

            -Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces - -
            -
            -
            -

            Kinds of Pages

            -The following sections describe the different kinds of pages in this collection. -
            -

            Overview

            -

            The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

            -
            -
            -

            Package

            -

            Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

            -
              -
            • Interfaces
            • -
            • Classes
            • -
            • Enum Classes
            • -
            • Exceptions
            • -
            • Errors
            • -
            • Annotation Interfaces
            • -
            -
            -
            -

            Class or Interface

            -

            Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

            -
              -
            • Class Inheritance Diagram
            • -
            • Direct Subclasses
            • -
            • All Known Subinterfaces
            • -
            • All Known Implementing Classes
            • -
            • Class or Interface Declaration
            • -
            • Class or Interface Description
            • -
            -
            -
              -
            • Nested Class Summary
            • -
            • Enum Constant Summary
            • -
            • Field Summary
            • -
            • Property Summary
            • -
            • Constructor Summary
            • -
            • Method Summary
            • -
            • Required Element Summary
            • -
            • Optional Element Summary
            • -
            -
            -
              -
            • Enum Constant Details
            • -
            • Field Details
            • -
            • Property Details
            • -
            • Constructor Details
            • -
            • Method Details
            • -
            • Element Details
            • -
            -

            Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

            -

            The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

            -
            -
            -

            Other Files

            -

            Packages and modules may contain pages with additional information related to the declarations nearby.

            -
            -
            -

            Tree (Class Hierarchy)

            -

            There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

            -
              -
            • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
            • -
            • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
            • -
            -
            -
            -

            Serialized Form

            -

            Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

            -
            -
            -

            All Packages

            -

            The All Packages page contains an alphabetic index of all packages contained in the documentation.

            -
            -
            -

            All Classes and Interfaces

            -

            The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

            -
            -
            -

            Index

            -

            The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

            -
            -
            -
            -This help file applies to API documentation generated by the standard doclet.
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html b/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html deleted file mode 100644 index 282504b..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/index-all.html +++ /dev/null @@ -1,1137 +0,0 @@ - - - - -Index (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Index

            -
            -A C D E F G H I L M N O P R S T U V W 
            All Classes and Interfaces|All Packages|Serialized Form -

            A

            -
            -
            addAlertProvider(String, AlertProviderConfiguration) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Adds an alert provider configuration to the specified model on this workbench.
            -
            -
            addGlobalModelData(String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Add a key/value pair to the global SharedData.
            -
            -
            addInstance(String, String, DigitalTwinBase) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Adds a digital twin instance to the workbench.
            -
            -
            addRealTimeModel(String, MessageProcessor<T, V>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Adds a real-time digital twin model to the workbench.
            -
            -
            addSharedModelData(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Add a key/value pair to SharedData for a model.
            -
            -
            addSimulationModel(String, MessageProcessor<T, V>, SimulationProcessor<T>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Adds a simulation digital twin model to the workbench.
            -
            -
            AlertMessage - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            A message that should be sent to a configured alert provider.
            -
            -
            AlertMessage(String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            Construct an alert message with a title, severity, and custom message.
            -
            -
            AlertMessage(String, String, String, HashMap<String, String>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            Construct an alert message with a title, severity, and custom message.
            -
            -
            AlertProviderConfiguration - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Configuration for an alert provider.
            -
            -
            AlertProviderConfiguration(String, String, String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Construct an alert provider configuration.
            -
            -
            AzureDigitalTwinsService - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Enum for the Azure Digital Twin service.
            -
            -
            -

            C

            -
            -
            CacheCleared - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            The cache was cleared successfully.
            -
            -
            CacheOperationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Status of a cache operation.
            -
            -
            CacheResult - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Represents a response from a SharedData operation.
            -
            -
            clear() - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
            -
            -
            Clear the shared data cache.
            -
            -
            close() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
             
            -
            com.scaleoutsoftware.digitaltwin.core - package com.scaleoutsoftware.digitaltwin.core
            -
            -
            Digital twin model API - Create a digital twin model.
            -
            -
            com.scaleoutsoftware.digitaltwin.development - package com.scaleoutsoftware.digitaltwin.development
            -
            -
            Digital twin development API - Develop and test simulation/real-time digital twins.
            -
            -
            CosmosDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Enum for CosmosDB
            -
            -
            createInstance(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            Create a new digital twin instance for simulation processing.
            -
            -
            createInstanceFromPersistenceStore(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            Create a new digital twin instance for simulation processing from a persistence store.
            -
            -
            createInstanceFromPersistenceStore(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            The twin instance will be loaded via model name and id from a persistence store.
            -
            -
            -

            D

            -
            -
            delay(Duration) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            - Delay simulation processing for this DigitalTwin instance for a duration of time.
            -
            -
            delayIndefinitely() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            - Delay simulation processing for this DigitalTwin instance, indefinitely.
            -
            -
            deleteInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            Delete and remove a digital twin instance from simulation processing.
            -
            -
            deleteThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            Delete and remove this digital twin instance from simulation processing.
            -
            -
            DigitalTwinBase - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            A real-time digital twin of a data source.
            -
            -
            DigitalTwinBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            Default constructor.
            -
            -
            DigitalTwinTimerMessage - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            A message sent to a digital twin instance's message processor.
            -
            -
            DigitalTwinTimerMessage(String, String, int, String, TimerType) - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            Construct a digital twin timer message.
            -
            -
            DynamoDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Enum for DynamoDB
            -
            -
            -

            E

            -
            -
            emitTelemetry(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            - Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
            -
            -
            emitTelemetry(String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            - Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
            -
            -
            EndTimeReached - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            The simulation end time has been reached.
            -
            -
            Enqueued - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            Enqueued indicates that a message was successfully formed and then sent to an internal messaging service
            -
            -
            -

            F

            -
            -
            FailedInternalError - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Failed to start/stop timer due to an internal error.
            -
            -
            FailedNoSuchTimer - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Failed to stop the existing timer, the timer is no longer active.
            -
            -
            FailedTimerAlreadyExists - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Failed to start the timer, the timer with the specified name already exists.
            -
            -
            FailedTooManyTimers - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Failed to start a new timer due to reaching the limit for a number of active timers.
            -
            -
            fromOrdinal(int) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Return the PersistenceProviderType from an ordinal value.
            -
            -
            fromOrdinal(int) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Convert an ordinal into a TimerActionResult.
            -
            -
            fromString(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Return the PersistenceProviderType from a string value.
            -
            -
            -

            G

            -
            -
            generateModelSchema(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Generates a ModelSchema for the defined model
            -
            -
            generateModelSchema(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system.
            -
            -
            get(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
            -
            -
            Retrieves an existing object from the cache.
            -
            -
            getAlertMessages(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieves alert messages from digital twin instances.
            -
            -
            getAlertProviders() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the alert provider configurations.
            -
            -
            getAlertProviderType() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Retrieve the alert provider type for this configuration.
            -
            -
            getAssemblyName() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            NOT USED BY JAVA MODEL SCHEMA
            -
            -
            getAzureDigitalTwinModelName() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the Azure Digital Twin model name.
            -
            -
            getCurrentTime() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Retrieves the current time.
            -
            -
            getDataSourceId() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID)
            -
            -
            getDigitalTwinModel() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin)
            -
            -
            getEntityId() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Retrieve the entity ID for this alert provider configuration.
            -
            -
            getEntryPoint() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
            -
            -
            getId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            The identifier of this DigitalTwin.
            -
            -
            getId() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            Get the model-unique Id identifier of the initializing digital twin instance.
            -
            -
            getIncomingMessages() - Method in interface com.scaleoutsoftware.digitaltwin.core.MessageFactory
            -
            -
            Returns all incoming messages
            -
            -
            getInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves an instance or null if it doesn't exist.
            -
            -
            getInstanceAsync(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that when complete will return an instance or null if it doesn't exist.
            -
            -
            getInstanceIds(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves the instance IDs stored in a container, or an empty list if no instances exist.
            -
            -
            getInstanceIdsAsync(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist.
            -
            -
            getInstances(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieves DigitalTwin instances for a given model.
            -
            -
            getIntegrationKey() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Retrieve the integration key for this alert provider configuration.
            -
            -
            getKey() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
            -
            -
            Gets the key or null to the object associated with the result.
            -
            -
            getLoggedMessages(String, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieves messages logged by digital twin instances for a specified mdoel.
            -
            -
            getMessage() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            Retrieve the message for this alert message.
            -
            -
            getMessage() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
            -
            -
            Retrieve the string message associated with this log message.
            -
            -
            getMessage() - Method in exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
            -
             
            -
            getMessageProcessorType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the message processor type (a MessageProcessor implementation).
            -
            -
            getMessageType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the message type (JSON serializable message implementation).
            -
            -
            getModel() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            The model for this DigitalTwin.
            -
            -
            getModel() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            Get the Model identifier of the initializing digital twin instance.
            -
            -
            getModelName() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            Retrieve the digital twin model name.
            -
            -
            getModelType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the digital twin model type (a DigitalTwinBase implementation).
            -
            -
            getName() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Retrieve the name of this alert provider configuration.
            -
            -
            getName() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Retrieve the name of the persistence provider type.
            -
            -
            getNextSimulationTimeMs() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            Retrieve the next simulation time in milliseconds.
            -
            -
            getOptionalTwinInstanceProperties() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            Retrieve the optional twin instance properties for this alert message.
            -
            -
            getPersistenceProvider() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the persistence provider type.
            -
            -
            getPersistenceProvider() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Returns the configured persistence provider or null if no persistence provider configuration can be found.
            -
            -
            getProperty(String, String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a property or null if the property does not exist.
            -
            -
            getPropertyAsync(String, String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that will return a property or null if the property does not exist.
            -
            -
            getPropertyMap(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a map of property names to property types, or an empty map.
            -
            -
            getPropertyMapAsync(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that will return a map of property names to property, or an empty map.
            -
            -
            getProviderType() - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves this persistence providers type.
            -
            -
            getRoutingKey() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Retrieve the routing key for this alert provider configuration.
            -
            -
            getRtdtProperty(String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a property for a RTDT instance or null if the property does not exist.
            -
            -
            getRtdtPropertyAsync(String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
            -
            -
            getServiceOrdinalValue() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Retrieve the ordinal value (used by the DTBuidler service).
            -
            -
            getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            Retrieve the severity for this alert message.
            -
            -
            getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
            -
            -
            Retrieve the severity of this log message.
            -
            -
            getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            Retrieve a SharedData accessor for globally shared data.
            -
            -
            getSharedGlobalData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
            -
            -
            Retrieve a SharedData accessor for globally shared data.
            -
            -
            getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Retrieve a SharedData accessor for globally shared data.
            -
            -
            getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieve the global SharedData.
            -
            -
            getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            Retrieve a SharedData accessor for this model's shared data.
            -
            -
            getSharedModelData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
            -
            -
            Retrieve a SharedData accessor for this model's shared data.
            -
            -
            getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Retrieve a SharedData accessor for this model's shared data.
            -
            -
            getSharedModelData(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieve the SharedData for a model.
            -
            -
            getSimulationController() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Retrieve the running SimulationController or null if no simulation is running.
            -
            -
            getSimulationProcessorType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve the simulation processor type (a SimulationProcessor implementation).
            -
            -
            getSimulationStartTime() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            - Retrieves the simulation start time.
            -
            -
            getSimulationTimeIncrement() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            - Retrieves the current simulation time increment.
            -
            -
            getStatus() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
            -
            -
            Gets the status of the cache operation.
            -
            -
            getStatus() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
            -
            -
            Retrieve the SimulationStatus of the simulation interval.
            -
            -
            getTime() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
            -
            -
            Retrieve the time of the simulation interval.
            -
            -
            getTime() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieves the current time interval of the simulation.
            -
            -
            getTimerHandlerClass() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
            -
            -
            Retrieves the timer handler class name.
            -
            -
            getTimerId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            Retrieve the timer ID.
            -
            -
            getTimerId() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
            -
            -
            Retrieves the timer ID.
            -
            -
            getTimerIntervalMs() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
            -
            -
            Retrieves the timer interval.
            -
            -
            getTimerName() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            Retrieve the timer name.
            -
            -
            getTimerType() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            Retrieve the TimerType.
            -
            -
            getTimerType() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
            -
            -
            Retrieves the timer type.
            -
            -
            getTimestamp() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
            -
            -
            Retrieve the timestamp from when this message was generated.
            -
            -
            getTitle() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
            -
            Retrieve the title for this alert message.
            -
            -
            getTwinId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
            -
            -
            Retrieve the digital twin ID.
            -
            -
            getURL() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
            -
            Retrieve the URL for this alert provider configuration.
            -
            -
            getValue() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
            -
            -
            Get the object returned from a Get operation.
            -
            -
            -

            H

            -
            -
            Handled - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            Handled indicates that a message was successfully sent and processed
            -
            -
            -

            I

            -
            -
            Id - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            The identifier for this twin instance
            -
            -
            init(InitContext) - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            Initialization method to set the identifier and model for a DigitalTwin instance.
            -
            -
            InitContext - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing - digital twin.
            -
            -
            InitContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            Default constructor.
            -
            -
            initializeSimulation(long, long, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Initializes the simulation so that each interval can be run separately by calling the Workbench.step() - function.
            -
            -
            InitSimulationContext - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of - digital twin instance when a simulation is initializing.
            -
            -
            InstanceRequestedStop - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
            -
            -
            isActive() - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Returns true if this PersistenceProvider is active, false otherwise.
            -
            -
            -

            L

            -
            -
            logMessage(Level, String) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Logs a message to the real-time digital twin cloud service.
            -
            -
            LogMessage - Class in com.scaleoutsoftware.digitaltwin.development
            -
            -
            A messaged that was logged by a digital twin.
            -
            -
            -

            M

            -
            -
            MessageFactory - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Message list factory retrieves message lists for a MessageProcessor
            -
            -
            MessageProcessor<T extends DigitalTwinBase,V> - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Processes messages for a real-time digital twin.
            -
            -
            MessageProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
            -
            -
            Default constructor.
            -
            -
            MessageProcessorBase<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Base class for the MessageProcessor to help with typing.
            -
            -
            MessageProcessorBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
            -
            -
            Default constructor.
            -
            -
            messageRecordingEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieves the message recording enabled status.
            -
            -
            Model - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            The model this twin instance belongs to.
            -
            -
            ModelSchema - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - digital twin model to the real-time digital twin cloud service.
            -
            -
            ModelSchema(String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, and a message class.
            -
            -
            ModelSchema(String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, and a message class.
            -
            -
            ModelSchema(String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Model schema with a defined entry point.
            -
            -
            ModelSchema(String, String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, and a message class.
            -
            -
            ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
            -
            -
            ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
            -
            -
            ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
            -
            -
            ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            ModelSchema(String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            ModelSchema(String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            ModelSchema(String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
            -
            -
            -

            N

            -
            -
            NextSimulationTime - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            Note: Simulation only.
            -
            -
            NoRemainingWork - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            There is no remaining work for the simulation.
            -
            -
            NotHandled - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            NotHandled indicates that the message was not handled.
            -
            -
            NotSet - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            The simulation status is not set.
            -
            -
            NoUpdate - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
            -
            -
            Do not update the digital twin.
            -
            -
            -

            O

            -
            -
            ObjectDoesNotExist - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            The object could not be retrieved because it was not found.
            -
            -
            ObjectPut - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            The object was successfully added/updated.
            -
            -
            ObjectRemoved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            The object was removed successfully.
            -
            -
            ObjectRetrieved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            The object was successfully retrieved.
            -
            -
            OneTime - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
            -
            -
            This timer should trigger one time.
            -
            -
            onInitSimulation(InitSimulationContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
            -
            -
            - Optional method that is called per-instance when a simulation is started.
            -
            -
            onTimedMessage(String, T, ProcessingContext) - Method in interface com.scaleoutsoftware.digitaltwin.core.TimerHandler
            -
            -
            Callback to handle a timer message.
            -
            -
            -

            P

            -
            -
            peek() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Retrieves the next interval time of the simulation.
            -
            -
            persistenceEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve persistence status.
            -
            -
            PersistenceProvider - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            An interface that can be used for persisting/retrieving the state of real-time digital twins.
            -
            -
            PersistenceProviderType - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Available PersistenceProvider types.
            -
            -
            ProcessingContext - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Context object that allows the user to send a message to a DataSource.
            -
            -
            ProcessingContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Default constructor.
            -
            -
            ProcessingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The result from a message processor which indicates to update the state object or to ignore
            -
            -
            processMessages(ProcessingContext, T, MessageFactory) - Method in class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
            -
            -
            Helper method to ensure proper typing for user methods.
            -
            -
            processMessages(ProcessingContext, T, MessageFactory) - Method in class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
            -
            -
            Helper method to ensure proper typing for the user methods.
            -
            -
            processMessages(ProcessingContext, T, Iterable<V>) - Method in class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
            -
            -
            Processes a set of incoming messages and determines whether to update the real-time digital twin.
            -
            -
            processModel(ProcessingContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
            -
            -
            Processes simulation events for a real-time digital twin.
            -
            -
            put(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
            -
            -
            Put a new key/value mapping into the cache.
            -
            -
            -

            R

            -
            -
            Recurring - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
            -
            -
            This timer should reoccur on a schedule.
            -
            -
            remove(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
            -
            -
            Remove a key/value mapping from the cache.
            -
            -
            Running - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            The simulation is running.
            -
            -
            runSimulation(long, long, double, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Runs a simulation from the given startTime until the given endTime OR there is no more work to do.
            -
            -
            runThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            Run this instance during this simulation step.
            -
            -
            -

            S

            -
            -
            send(String, String, List<Object>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Send a list of messages to a real-time or simulation model.
            -
            -
            sendAlert(String, AlertMessage) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - This method sends an alert message to supported systems.
            -
            -
            SendingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Marks a message as Delivered or not Delivered
            -
            -
            sendToDataSource(byte[]) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - Sends a message to a data source.
            -
            -
            sendToDataSource(Object) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - Sends a message to a data source.
            -
            -
            sendToDataSource(List<Object>) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - Sends a list of messages to a data source.
            -
            -
            sendToDigitalTwin(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - This method sends a serialized JSON message to a real-time digital twin
            -
            -
            sendToDigitalTwin(String, String, Object) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - This method sends a serialized JSON message to a real-time digital twin
            -
            -
            sendToDigitalTwin(String, String, String) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - This method sends a JSON message to a real-time digital twin
            -
            -
            sendToDigitalTwin(String, String, List<byte[]>) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            - This method sends a list of serialized JSON message to a real-time digital twin
            -
            -
            setNextSimulationTime(long) - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            Set the next simulation time in milliseconds.
            -
            -
            SharedData - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            SharedData is used to access a model's, or globally, shared cache.
            -
            -
            SimulationController - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The SimulationController interface is used to interact with the running DigitalTwin simulation.
            -
            -
            SimulationEventResult - Class in com.scaleoutsoftware.digitaltwin.development
            -
            -
            A simulation event result.
            -
            -
            SimulationEventResult() - Constructor for class com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
            -
             
            -
            SimulationProcessor<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Processes simulation events for a digital twin.
            -
            -
            SimulationProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
            -
            -
            Default constructor.
            -
            -
            SimulationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The status of a simulation.
            -
            -
            SimulationStep - Class in com.scaleoutsoftware.digitaltwin.development
            -
            -
            The simulation step class encases the metadata for a completed interval of a simulation.
            -
            -
            simulationSupportEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
            -
            -
            Retrieve simulation support enabled status.
            -
            -
            SQLite - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Enum for SQLite
            -
            -
            SQLServer - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Enum for SQLServer
            -
            -
            startTimer(String, Duration, TimerType, TimerHandler<T>) - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
            -
            -
            Starts a new timer for the digital twin
            -
            -
            startTimer(String, Duration, TimerType, TimerHandler<T>) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Starts a new timer for the digital twin
            -
            -
            step() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Run the next simulation interval.
            -
            -
            stopSimulation() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
            -
            -
            Stop the simulation.
            -
            -
            stopTimer(String) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
            -
            -
            Stops the specified timer.
            -
            -
            Success - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            The operation completed successfully.
            -
            -
            -

            T

            -
            -
            TimerActionResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            The result of a timer action.
            -
            -
            TimerHandler<T extends DigitalTwinBase> - Interface in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Callback to a handle a timer message for a DigitalTwinBase.
            -
            -
            TimerHandlers - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
            -
            -
            The timer handlers for this twin instance.
            -
            -
            TimerMetadata<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Metadata class for a timer.
            -
            -
            TimerMetadata(TimerHandler<T>, TimerType, long, int) - Constructor for class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
            -
            -
            Constructs a timer metadata.
            -
            -
            TimerType - Enum Class in com.scaleoutsoftware.digitaltwin.core
            -
            -
            Enum representation of the available timer types
            -
            -
            toString() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
            -
             
            -
            toString() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
            -
             
            -
            -

            U

            -
            -
            Unconfigured - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Enum for an unconfigured PersistenceProvider
            -
            -
            UnexpectedChangeInConfiguration - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            There was a runtime-change of simulation configuration.
            -
            -
            UpdateDigitalTwin - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
            -
            -
            Update the digital twin.
            -
            -
            updateProperty(String, String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Updates a property for the provided instance id in the provided container specified by the property name and property value.
            -
            -
            updatePropertyAsync(String, String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated.
            -
            -
            updateRtdtProperty(String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Updates a RTDT property for the provided instance id specified by the property name and property value.
            -
            -
            updateRtdtPropertyAsync(String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
            -
            -
            Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated.
            -
            -
            UserRequested - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            The user requested a stop.
            -
            -
            -

            V

            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
            -
            -
            Returns the enum constant of this class with the specified name.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
            -
            -
            Returns an array containing the constants of this enum class, in -the order they are declared.
            -
            -
            -

            W

            -
            -
            Workbench - Class in com.scaleoutsoftware.digitaltwin.development
            -
            -
            The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
            -
            -
            Workbench() - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Instantiate the workbench.
            -
            -
            Workbench(int) - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
            -
            -
            Instantiate the workbench.
            -
            -
            WorkbenchException - Exception in com.scaleoutsoftware.digitaltwin.development
            -
            -
            A Workbench exception indicates that a real-time or simulated twin caused an exception.
            -
            -
            WorkbenchException(Exception) - Constructor for exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
            -
            -
            Instantiates a WorkbenchException with the parameter inner exception
            -
            -
            WorkbenchException(String) - Constructor for exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
            -
            -
            Instantiates a WorkbenchException with the parameter message
            -
            -
            WorkbenchException(String, Exception) - Constructor for exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
            -
            -
            Instantiates a WorkbenchException with the parameter message and inner exception
            -
            -
            -A C D E F G H I L M N O P R S T U V W 
            All Classes and Interfaces|All Packages|Serialized Form
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/index.html b/docs/digitaltwin-core-docs/build/docs/javadoc/index.html deleted file mode 100644 index c1028e2..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -Overview (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            digitaltwin-core-docs 3.0.5 API

            -
            -
            -
            Packages
            -
            -
            Package
            -
            Description
            - -
            -
            Digital twin model API - Create a digital twin model.
            -
            - -
            -
            Digital twin development API - Develop and test simulation/real-time digital twins.
            -
            -
            -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/jquery-ui.overrides.css b/docs/digitaltwin-core-docs/build/docs/javadoc/jquery-ui.overrides.css deleted file mode 100644 index f89acb6..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/jquery-ui.overrides.css +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - /* Overrides the color of selection used in jQuery UI */ - background: #F8981D; -} diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/ADDITIONAL_LICENSE_INFO b/docs/digitaltwin-core-docs/build/docs/javadoc/legal/ADDITIONAL_LICENSE_INFO deleted file mode 100644 index b62cc3e..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/ADDITIONAL_LICENSE_INFO +++ /dev/null @@ -1 +0,0 @@ -Please see ..\java.base\ADDITIONAL_LICENSE_INFO diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/ASSEMBLY_EXCEPTION b/docs/digitaltwin-core-docs/build/docs/javadoc/legal/ASSEMBLY_EXCEPTION deleted file mode 100644 index 0d4cfb4..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/ASSEMBLY_EXCEPTION +++ /dev/null @@ -1 +0,0 @@ -Please see ..\java.base\ASSEMBLY_EXCEPTION diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/LICENSE b/docs/digitaltwin-core-docs/build/docs/javadoc/legal/LICENSE deleted file mode 100644 index 4ad9fe4..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/LICENSE +++ /dev/null @@ -1 +0,0 @@ -Please see ..\java.base\LICENSE diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/jquery.md b/docs/digitaltwin-core-docs/build/docs/javadoc/legal/jquery.md deleted file mode 100644 index 8054a34..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/jquery.md +++ /dev/null @@ -1,72 +0,0 @@ -## jQuery v3.5.1 - -### jQuery License -``` -jQuery v 3.5.1 -Copyright JS Foundation and other contributors, https://js.foundation/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -****************************************** - -The jQuery JavaScript Library v3.5.1 also includes Sizzle.js - -Sizzle.js includes the following license: - -Copyright JS Foundation and other contributors, https://js.foundation/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/sizzle - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -********************* - -``` diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/jqueryUI.md b/docs/digitaltwin-core-docs/build/docs/javadoc/legal/jqueryUI.md deleted file mode 100644 index 8031bdb..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/legal/jqueryUI.md +++ /dev/null @@ -1,49 +0,0 @@ -## jQuery UI v1.12.1 - -### jQuery UI License -``` -Copyright jQuery Foundation and other contributors, https://jquery.org/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery-ui - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code contained within the demos directory. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -``` diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js deleted file mode 100644 index a4c179e..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/member-search-index.js +++ /dev/null @@ -1 +0,0 @@ -memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addGlobalModelData(String, byte[])","u":"addGlobalModelData(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSharedModelData(String, String, byte[])","u":"addSharedModelData(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"CacheCleared"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"clear()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"CosmosDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delayIndefinitely()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"DynamoDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"get(String)","u":"get(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getEntryPoint()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getServiceOrdinalValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedModelData(String)","u":"getSharedModelData(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationStartTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"messageRecordingEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectDoesNotExist"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectPut"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRemoved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRetrieved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"onInitSimulation(InitSimulationContext, T, Date)","u":"onInitSimulation(com.scaleoutsoftware.digitaltwin.core.InitSimulationContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"put(String, byte[])","u":"put(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"runThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench(int)","u":"%3Cinit%3E(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/module-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/module-search-index.js deleted file mode 100644 index 0d59754..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/module-search-index.js +++ /dev/null @@ -1 +0,0 @@ -moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html deleted file mode 100644 index 0832a3f..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-summary.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - -digitaltwin-core-docs 3.0.5 API - - - - - - - - - - -
            - -

            index.html

            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html b/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html deleted file mode 100644 index e355db6..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/overview-tree.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - -Class Hierarchy (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
            - -
            -
            -
            -

            Hierarchy For All Packages

            -Package Hierarchies: - -
            -
            -

            Class Hierarchy

            - -
            -
            -

            Interface Hierarchy

            - -
            -
            -

            Enum Class Hierarchy

            - -
            -
            -
            -
            - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/package-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/package-search-index.js deleted file mode 100644 index 3b34403..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/package-search-index.js +++ /dev/null @@ -1 +0,0 @@ -packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.scaleoutsoftware.digitaltwin.core"},{"l":"com.scaleoutsoftware.digitaltwin.development"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/resources/glass.png b/docs/digitaltwin-core-docs/build/docs/javadoc/resources/glass.png deleted file mode 100644 index a7f591f467a1c0c949bbc510156a0c1afb860a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100644 index 34abd18f32d3a55a297fdcf93409bd033ae573e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALRXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^403@vmGjdTsnLJUl-Obo4zO|=aStPBhe<(7X!(U6;;l9^VCTf=69^L{`L N44$rjF6*2UngDu&PXPb` diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index a90afb8bf8028404d206114965669b023dcb85ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!TrvH)L6@80)r*_cdCvDr%)6ghVL16=s@mbz7H!uRdGeDa z?kzLg)16i!f8fKx84s0>4hES%`s&m5HI1v5B^Uft7(lid2moiiX_$l+3hB+!{pPkNg5^ OVDNPHb6Mw<&;$T*0!_~V diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index dbe091f6dc036fc1dc11b005738e951e27a43f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 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�_j6WK+Gj+xJRxVvl#lh7y-4uY);t)n47k4ot z9YsU`HVk7fg4;r{;)FHk7ZHyZJ+W|$aKwj=g&_$VCVFn5%XzSA`|z}+4ItZ|`hB}R z>h-6Be`d>nmv8;kQHJg!HMr^cCGG=T5;3HhZ_JRq0_4a3TsY7Pz{V+}z>;!R^U4*c zJ>wRI59B-)92Vi?b&EWvH(`<(G5A?W)z>EuDMG@VENAb7aHa`I#tKw{0uUc3(#J8& z*_S%A_ZxCIY385{%qN-b1K)TWmCjUA4nWKx_ZnKLSvEf0($&_0@DS~ zN8JOXJXXcaFm^OCYrz(R7N5DQkXKGnnt}yzfw^8s%=A?7hxza;ylJ;XQ&XtC`pM%b z6$5Ff0{(ALcSlTKvIbr@mR`0Z)*iM`2EfO|E5OMk$jQsE!^mat*drqV diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_2e83ff_256x240.png b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_2e83ff_256x240.png deleted file mode 100644 index 1f5f49756ca64bd20a1048bd7a3a584457d4bf00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 zcmeHK2U8PFw@yL`geFZ|P@*V;w1D&)N-z*QNarO;QRz)l2oR(yU5bE$@JbZ~M4A){ zMUW<7Xc|gHkY1#>kc)mZ-`x8j?lU`k&hG3pXZP8eGv_=pHoVEqz{dap0GM^r+NJ;i z@XQ5l($k#H6S{hbXB#ZW`sOH!2L%N^&k_wk58Uw#*BX~{9Oe{(!2H)ZKd9X_X#oyfU5m#1Q82_f^tw6O11(<7c zWrG0%qDlJqcA8#ZrRU7cn@;N9VJUYHk^lTY3j(~2xv33^rM-YYTR?r#*8XSqkBCLbg&Z9G zp-dC_BuoqAkc7;MJ$9jCDbZN_FFIp=mvYI8l)OlkJ2GcKGFRh03>eyeeRF`W3VO-< zC@;;5k3f&*z5C#XoxT-q8o(%^R8K&f=k{8C{Y0uqmWi%PaU6jYo(5);yFd`Pn(!El z9h1vEhwlH1Q*|5X!lGvH`BD!7(^?OdAd$XP8=x~O{-Q}sy<2@T8`8IN;o*)L;K1*C zz~`x^5S%i=-8fHXQ{cyPiZj`|pV*e}T1g-QFmGBzZJ}z9t&~LL?-9yqp3x_EMw?h% zR0P^RfsG7yxX`l^uHgxl8V3PJTxM-b@>%bt-xEPCC)WNC4L*~?BL_6;e`XLVLVOkZ zaY1crUf;C9r#r|ebAHIp$KdM#$G60s#+4?*)mH)^4Rrn^&ZPOyOvZQO09veRcnbCX zWQc5fEAPmQd7=aqrZPBYAy;!Ph{cmfC@z-hpTuotqr$Mt? zY7woww1bOdZZNt7uHxGKm9$w8ozW}U!S8~V?{0A^bi{^$t00v7M zy;S7sm>vMCBz+=8TH~>zJ3!E9INJ1E6=!x^{;q9Biu$){2DGEIbB=oh!`QMCEx$ds$)Rc&7P*}`pd3{PqA}tIjp&y&{w{YrsPqhxaO4qerTDpM`WTlW5 zu*{F5ID98N%XU%ltVphxZ4Tra!)bpNih&)&Xx+d#q1{G`5icBuvTfv^7X{W}JXD*B z5!u=L*x{^0TXODlF@ziPt+=ars9OiJOv1hU4sSKFa z=)|j@+%OFH1Oa3f>ffz{O6~wHhDJrN4=)Y|I6DD)9CPw@Ytx6M2-O;{GQTQG&gg?A zr_VPJ&6+f^hXn|7pvwa+o;bXAc{n)lTn{~TF;3#>=AS1_iaGZheU=*xbHD8CUNUCj z^3&DKA#op+3tPQa@eK1RUg%D!n%5J4ICni7xELQIvd$Qz&+%!EZ!S{js)F!S5x>3O zLCB>-TbYHXS1?}__Xfm{r>(wAU3INPvHaWIIYbsxO^Oe0h0xglZWFakn6z+$6`V(< zSimFunLw;GdHMnWx=-GqPeuvo)l|sHaFJ~`DxMN)4Y7U!J8D=^MqeQn$`lS|1%mdN zK^morEND%3ee@_Yb<>IVIW2*6NZ^*QDg@w`H$3}uYsbleFidycDox+uzraGexRKEV z)Wd(JYU$(enZkGJ3{9REQOJppi6EBrWrXU;Ho*EGRUG&RC-ceTd@*C1J$c=Jk~Ty0 zAJE}+ZgP611Nw}-*K%$Od}R)=^6W|sl);faH`l2OA>=zFmy@8vVK$&%4OTWEhnx^< zs6V-c51bUMvJ@`4zcieGu?{L+ z6(ZMYhQND%M5s7uB)($Pv`1e&xPRDwWGD>e&;;;sA;yn_>F>rJH-M!+=wbl1_|+h6ttu(NB3r*FCdU;|1QOB?AGaVz-O zFMj-^FpfDR$apG zp!5Ji|53`FLrz-d>YnYEv6T0wDN8?-+$@_Nk-6nai){TtA=w&Qa=^woXbB~azV{PSFnB7zJF-k|zJbp8E$W1!v#tcX8%TiKFo-n7uCut-v(fLn$6ypSnrZ z$*S34s_(`S1jtESyVuI|{3uW2BhK-{jQp05>-^UGi}#K$%3bE8bM>i8<~MKu=Z4e! zh0A#tX_IOB39o+SdnJzu7<`KoCri$9{I*mr4A2uJr&$q1-r=Lzfussme7r{sQYl;m0a`a^hI)69ux681k(h4* zN9|Ywb^i7xF=uPVr*az7RYlVWPxhKmOE)Fgo>mlB<7pYaz6VsBW7J04%DxENck4rx zgM6#>hT78o;>S1Jt8MqV+4Jng1ERmSoX9dGIW`CC2VaF9CwL8-Bi|83mD2!Dee`Lm zCU-luuD>aLYJU7ZD?3R8tYYSVzoEVM_7n=hEcv1FN{h`Dk*ik1Q)z?ie^&}a1;86B!(s%}s%T_y4o&Ilh~d4DHn(86bo>p-*Ct4!-v)W$h1{J?4IrLKT@^?`26FF*@(2A4^@6og<7ngtWmIBVp>g{gwCG=1WX4srm*>E(6gC>!E~o-<{=AHg;~h zr)4{j`glAMBt_n{+%n8))~tNAyYCizc)D8wlZ8(Mn(svkWSi{A*vq>kCT}fIzl|Cn zy>PR|9cIRx;PBE5*-4+O?~_|$F<}5ur(2S|FAw=N&4pNnTk#=xhxAK3L=6a{X{DRocw%r8utUc^U?}*_ zr(y*T#U}{tCh=GT-ig;Dn~K`ilK*9stV#@EBAC9TOf4ugkA;~Nt2ej0?du%%-=F_m zz_LA$2jOO2Xk0r}zAZwZs7;VwA4S}3#)0t0SXSerLIo`;%;<|0ji~+vl}hOk9i+zx zUuZGWeo-DskUoPx=uJ)C!2Ep5@-PzwsF1^fj6kXJV!gU9L;{+5Gue#|!$uOssQo@K zR+uvJS*YTwuIPpVsz4PRkj93f17`97b|eBhl?7-Z9~n0f6EDor>foo2fPb$h4?A7> zT%r7x%5bpcUlV8+ByvZ7G1za^zhKiWJonD$xaS#k!hAE4p;QgaM*&tH)GI*HnxRE` zKM&1Lk7kAdR0w0M^qbP-LBil+NXKi;ihqCio{6=#|O(C$v0m`Z##4NXD+__-g z(_-U=I?+`IvcD6z77?Nw;fys4D9CFwg)Aldh6fQ?7N5`ui7^y6CC!+Es(Gr9qTHPK z-0ma)tFN+?V$ZP1e1t=yi(Zs8_S&zkh{hmaoulswfZ1Dqa1RNYC-25^Rm!I<>GW3k zjUOHLY78yVOfQ4@4mA&>xohn_3&n{JwbI7c3dEV^o%%0Fv=51+iH6T4?jF;IPPfqw zokxnwN5uxo9?XI&Sz@-f12P;WQ%GNbFK1CCdDhs}sVDCdBr~;?W)WZ)U0iw42JJnB z7i*tnrsnBMBpw^Ay}gobnSM$V#D;&2_@aql^X86vylX4gc?Y;m(y8v2NuB;;wJQoV^z3UpIO6adgOK|rh`I83cQ92vN z*nDrN5bxLa^N8pN&PPh7e;t?O#;^ACf0T)hr9bD^{p0K0aKs6fP=#ZL0@Q)?jH1G4 zmGhC&x$cBzQD~bW$K$+5{ylRuGYJ=lL0%_3KE(evW+WZI`zqmN3H0Yi?*N0(R64#J z>}+>eAmE{uko29IXjycIN3NS#IqY;9$u>caW?(bvKw+_ zgG{F`FVBpFDwJwR~R;O-V!9D+Lphp>2% zCAeJPdrp0I&;9O?nVzZYuAY9Td#2`@Ff|ofJRC|K004j|F9+2C0DzA}z%e%ZV=t5G zEb%Bnri!vqfK1uzM9#CcN_%;z#n=8gA#PS3;tcI;~uofXisxsK~{&;VR#1 z!o>>A2X%jk6mmfdq0-jyMN=cu0=VG)#_Jf_>&KuMX8ti@lH{h`>lhL}=z0k4IB519 z2z+_ZC;46kNd^v6LH`zyWz zc=pCDRd~N_<2su2s8&{(HU!aVC@&H;3-}=D4 zmn4&Xqtz|N;fr4ZX*`x)O>~I#fDAFWbF}%9b@c^V1-YMxSf6U)DQRkB+43Xqb9MFy zjo;f7Zl(+0@U{ZOZ-5LtI^A(gphls-(I>bAO%b)X0%Rr}JgWGZvD+JlsTxN^% zxJBLbH-$q!0L=#%jxX5Vq_FKJ<2w!*===-Y@qzQ*_ z&ov@B+(5Xb?{lf2ViA!OfgI3o#$9BtFq%%7KSq&MDxi7pySJYoi*Mo(W6r!DLSMQT z5R^D?yx*g7)k}}4ziwHEoWI5K%3hPst6voipJkIw?!%9N$K$TWC4VuQM9)7yVq;a$ z=Z;n#4~)-1561t|Pxey=Qu^0P2#JYboJR5co5Ktl*iAC2?$BN>JINDo_+7dptH4MZ z=#a=xrMtj%`CVN()`GKp3RFADpy$xF7~O&&p0-yeG=xW8uhj9Af`YV6uf@~_v;;D#h=*T)D!O`_6(IwY zIw^B!$W|O05eRI*b>Pe%GGlOW`<(mkpbS$G@7HEko`s{=g~2c4kqO2D{R_c$HXzr|(vU9~bVZ9Zw90;2AsK2ig}XTGY6fY#HgGpEaxY zO`D_Z@O8%f#^@5G;myQ5fA(JXK{rgcieDr!{s`~{nU%CRe=1;4og^%^Ts{A8>Sq8@ z7MLFuiJ9lh@TXEbSXQb0;l#nbg^u{Ky;vCuCLR537HT%5FxM^fs5pS1gq3J(Tf!*6 zAc~!aiCB8(;cEmBeX<`V&xqvsk92&%dsXd*G@M$W7!TVsoD%c%!p~lGHEz(ckd{tR z##JAyc1)YR0b@JW|HWX=EIHNMaui<>jUPal5F|-#l#?ar-oHSbCyZG*EuqOC?V5Iz zROd8mBy{ukJ_DuzLTBsPdF^WZ7NW}CWcww?Uwp))_brh+D#JdL%%G}bh zEbmg}yJc_xX1_|6iSomOV4IgTV&UNVe-P4B!*v}&@hLXe=h7%`bcW^Eta_BE?bf*&82)UKj^6nE@ zA$RoKncM;1&!nmY^=yjr6=wgBr%e9BXAxKh^0A1=&iQhn5mfUB$_1N5DJ-DZ4!pLCChW*MHin>-!AX+Twe_SsV%)n#? z9m<01Z}*b;{SU$Rd-`axfZ;y8#-Dau@wD~tukEo#I1b5JhkDp%r;hf2&TH29Y`$=G zCT=}&CU#_(G5)E0y~*>piG@IHnT&WP>Bef5eoMnuRP?tb7aFH_AYy@I!S34oD{g9j zt&5vt`pheqh=GvgZDzlqDuidT)11qC;R35@PC4Z4(p=SICoeHq+3uEqgbmq)}q|_NRzcOHv0J`WLpt+1=j?0A{<5%OLxd!f~^V zfofe-Y;s4+yganmBlRs9L-MCkb@HkcIGzakx6p52sHx;MA}LA_@xo(MP} zDc);OVH(SgwrVlgqy!Vb7cIqe8X$!ECB5e#-)15warssOnkR%x%-o>1T_T=}^z83m z>?c?Vcl|}zH)Gve#!UTymO66c$B^I*%B*@2y23hf5=?aCeBzz7EJe|b9Sex0(wO>7 zRb>P4peOZ<5iwK?l!Imu++&w7Syj6VQ7HaGhAd%tr!?^1W9BpDb9K6w6&K*5X?Mg{ zJ-9!QlR>z>DK+)226mPe<+h_rzFAHI!mzVV#GU?Fzw~_RoaIT4yg6y4BAsT`&lzDE zN8&hg3mPdVnZE*z(B&{cUCbdEZcwCc!M07oJQWk{gQd-> zr9dqLy@o0}77srWq=#f}hD*4;Wr{`XhNy3(QRG7u=})1~*VvvJg7)}?r}&$RlQwv$ zXdGV%bswf)=onk3jFfL;P++Q%v8Zx@HLpgdXD??Rgfd0J7%TheMo&G8Ri zY%xQ58GYjiumJ@R#%;;*4f6=Jqyt;B^WLz4)&y*MwAuEm);Ad)VfKQ8Sr0CY@t@~> zUQjgZ#QB*y&{~9gc(!{BsVt<##<@4;&)IsJD6YtQmo_p%?&3O=8)wZazJdioWa<4X zlrD5`HRzYUVx9XSHNrRMeJbsZXE$L%`CjK>#AvI+17q)*ws2o~m+2h|RXRpuvZ;D* zQY%WR`fzBy@JjoZU*XW8`Fqv?ZRVOCeS4``J028Q{72zS6OggtuOq;?NrF=gLU{T1 z2Ey5bAX2R!_@I`V<&n7vuSD$!&t^oE$C16?6i^2+oXgJEQ^GRtyq7y|3J zjS5W(iH2Od&+O~1mD#qt_V(U2`D~yWIe}Wmh)Pz z`3B*tPj%Q1@@njj!dC^nL67Y3HjBux!~dkMt88TTtEyZ&gy!?kq=hW3X+P_Vrv0a= zk$G`d4jR#UC3q&uVr_NfxeAI|1?9Qb7nKH>x*7HzWEl1J7=Vy~_xZtg^d+=;~q6HX~P<3!HF61g_w>7y^ge1>z>0>CJBlwhy*m zu^e%|FDE`Pg>^K2tw_~`;#;lt;kHE=dWx%}d@{Ep`+}fUYEkRY@7R4z^Gi3a z%p3!^U0{T-%L?kl_g;>HbVbT_)6tT-&YtzE=5CeyU1!c&e8r`X(rWY(&&Hn$;!z<3 z@ZD^M|7w69ux8!!$a=u3Jm9vMnxk@c@;-#Vi;?20XYrZU4{Zg*wkL!!)33(XXlz1R zYdSCxbAF4VGcc|P>jR^>ye$Fvd;}`W;VnrnsgUp09az2h?}6$Hh^S}<)Tc=<&3>*uCLEyR_hY_tr{or zrLSkS#T^|h1|_TSdo$fLueegLlN{0i)^=e2EtbySBh*?saAY}fWW_pZPj89qIdGQG zuxq;}FZf}T8*ZUnyil7Q8o@Dmf8dp6l_IDkJXm0=&ivCe1tvmX*|Y9)KZx>*u)cj!gV3~eOWE0KE$Vd(C$NowTz3Z#GR58MoW7U>(7WibQR7zU zr(M+U)R3#cCD?IbC3MmtR7?nlyi9(d)Z8dBwm5Yv#gE zH~5Y@zD>tVcGN_vSwLt5=jvf;p2JDnXQDL55iWH_(o7-&$C@w1ezEAGF`loMo{^9s z+qL-4cT!g|bS7(^aDM{#4CP=QsdpQhA-B3WQ@8x}1Z~5_L6>yv41-IOKT3S%nn6e5 zjJw+eepy<9mtX+LaCH|?5I*+c*Y9Mnr%8@i5vn4Hu@i=9XtWGol{AM#ixz~m!Q15N zdc*o)e1I~VccQpl$M!|<;DHX$F%un;kJwM!;3X{(+24sQz;UoP+D;pG5OrK;NSpRJ zAoo7h4z`5^2%$YZK@il;j!YY-k-Zk}e^u&AqL*9qyz-Oxo3!(5hwER%GJ1>eeJHnI(0ne%RzAyI5mDgG%|(-4~b=*CY8r|1uLy`6pa z`a`AqLvAMzmPMnOi;v!%;Z#k2RPeMo!UaOYtBz2^Z@;8%ZuCM|L0q-P*6`3fqiw^L zL3`*T0~C5-#Fy`zV$lw~_4mI6WLZS@zu$b)@(M16E0J%hHBZ=3P0gJyo*6+fXZ0|) zB~_}943 z?Lc#&-_51qs+HcN0==Y{;S2E*(c#J}TF1dOq>+oBq7^BO)gtN36`@RskHQ1S3iYcE zdr^>R{%$WSvX(kRE8=0x3WtG3iW!hA)a`Qss{lN*6S62fAT80qpF>~U0K*^ef>uYa zroXwa>=4bE(Me{aSAcQ#S=$1-=uQTg;;=5KvvH5q>2fiJX)f+RsBB9uXVi%6<=o_J z;Fb|nE-|%J+QxjX*FPtOMZ0yTw$HWu++eB$65&pLY_$8rd6A`F5DZM&a@ox>EyZF; zI35+4PUyZ(Fq1PdiWWylndF0L`Bi&mEFQ4%ig#h6sXl- zY}`wuiiW&n92*N#!?nXU?R|&(llg1N@n!AqFF{IZ&>!ujl|0-wU5gGY2E08{lSjF4 zt|sNhwGNVmJc`EVWEc7S%r0=*uWj19qAzg@1=s-H)o&Wz<Lli7-+}2Ha{kq=!XZ~pZc&+Q=0Cr|?#_d2wy>XJyrz^0!NJym zO7^0TjMo8~-}C35db!jXTrFn2nwOg2p{IJ)TMKtnrmOTK9*AKe0{j(&<)*eqt8N!v zpq|U58&sl=USB36p%G@>`5=>n9`TBDZ+p}y$w2uADdGxvcz^~D|-g+X6KZ?b`a6w%sL2=P|o1#BP})wq9P6^I;EBnI=7-f6T*2aKAh(r zXjh?;*}}bE?&sMes#m4`20olUS!0kmkhy2DS0V9I zOVfN+i{L@-)F3v$JA2t)D}TAUs6WZNKJ{$kx`%Omgx%I7Je24zhTUZh(V%L!aHijs zeCcMA`}iNqfj%Fu?+*QOj<}bl1LV*Ss@{fNU5=lL+RyR}X`nw|5$c(I=~X%=VUF8A zjt6XyO6Eiq%OTZ+GJkTSuKVD2LWrlV!?~tMbg?upc?2iFnnE_oJ8?xt5w%`pFE$TSofbGY9Nn%^00N{i~> z!<-d}5xbK}N##I0*iFO8_PIgdMSVO=^HewXRYhMjzGFhagblsyGGu2-wW7GZZ{ zQoU1S*zc%l7-^UdxP0GxT<1fpCrTSsH9D$z?_|R6 z_Vg7Qh~N<#KqCEj{{Z9*u}7$G?~LK>=6PI~v3uf)l@UJV^0t@wG+ak)aZ`yOwUxZ0 ziHYw>>qDBv?tyTN>lry=XZ*IuTz=$P-6wpGW>1{a66PVs?H#@p6~=_6dhZ zQ_C6oC7I*oSKm7UI^y|S@_%pNF_jc0z9XL9|03`HyXxpE1D3c|=~P-|F$QK4)n|(p zysic<{o^^p=+kD)6#_wCVnRh3{vm;FfO(3hp^DhdCadwzK8XzOBXkoPy^at}Pap*v zBU(QN-y|aejaOi@kWw<2H}EDHC;A&JKG2L*Bi1ZUvuMuO9`swC=#*((@P6()>?sWt zSXDf0QV4qoH^Tn-f32+A7sI%V8~ZP)1~6@8g`2`)UUIaRX&f=wzC8&T0D+%B;88ZL z&{X@v#(SwT20&G$4|rq^D~AiK(oG-XF=1UsB7s4^AE5^`5hh(e;#fOR%+1EhfO@H| z^%1^X;6oC2lZX7+_QP$!5C2yH7CdlD4a*frVc;CDYPb|XeSReoPs*JS;SMlZ9?j#N z08l}h{pNsNINt0bkR@G~?a{{%xO{8T{LwZ*OrlaiqT}-+i-P#Wt~zlIz^>o7J46EY zIKG)9Tbm%h6~Cx4ESc-WZhQQJVs@2z?`m%1Y5_5Gws;f(UNDa!Cs>G+hwmK^7{bc~ z5fI@3gCSrr6)-H~KMd?0&220_|EB?11i~u_5#axq0cs?h@X_G;KOQt4EnVGBoGk#7 j=8mQoFXZh_tSmGvOw2u<1}#J%l>qWGD$oikWB>mG5~xOM diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_888888_256x240.png b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_888888_256x240.png deleted file mode 100644 index ee5e33f27235d1b5cf0259f63f3894a6be33c679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6999 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 diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_cd0a0a_256x240.png b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index 7e8ebc180a2d2a74739059799407b8b7b57a9092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 Mq_Ix57W&cu0AIB!=l}o! diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-3.5.1.min.js b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-3.5.1.min.js deleted file mode 100644 index b061403..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-3.5.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
            "],col:[2,"","
            "],tr:[2,"","
            "],td:[3,"","
            "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
            ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(s in o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void 0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,s){var n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=i.call(arguments,1),l=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):l=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
            ",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
            "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"
              ",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=l.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=l.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
                ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
                ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
                ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
                ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
                ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete}); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-ui.structure.min.css b/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-ui.structure.min.css deleted file mode 100644 index e880892..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/script-dir/jquery-ui.structure.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2018-12-06 -* http://jqueryui.com -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0} \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/script.js b/docs/digitaltwin-core-docs/build/docs/javadoc/script.js deleted file mode 100644 index 864989c..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/script.js +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var moduleSearchIndex; -var packageSearchIndex; -var typeSearchIndex; -var memberSearchIndex; -var tagSearchIndex; -function loadScripts(doc, tag) { - createElem(doc, tag, 'search.js'); - - createElem(doc, tag, 'module-search-index.js'); - createElem(doc, tag, 'package-search-index.js'); - createElem(doc, tag, 'type-search-index.js'); - createElem(doc, tag, 'member-search-index.js'); - createElem(doc, tag, 'tag-search-index.js'); -} - -function createElem(doc, tag, path) { - var script = doc.createElement(tag); - var scriptElement = doc.getElementsByTagName(tag)[0]; - script.src = pathtoroot + path; - scriptElement.parentNode.insertBefore(script, scriptElement); -} - -function show(tableId, selected, columns) { - if (tableId !== selected) { - document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') - .forEach(function(elem) { - elem.style.display = 'none'; - }); - } - document.querySelectorAll('div.' + selected) - .forEach(function(elem, index) { - elem.style.display = ''; - var isEvenRow = index % (columns * 2) < columns; - elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor); - elem.classList.add(isEvenRow ? evenRowColor : oddRowColor); - }); - updateTabs(tableId, selected); -} - -function updateTabs(tableId, selected) { - document.querySelector('div#' + tableId +' .summary-table') - .setAttribute('aria-labelledby', selected); - document.querySelectorAll('button[id^="' + tableId + '"]') - .forEach(function(tab, index) { - if (selected === tab.id || (tableId === selected && index === 0)) { - tab.className = activeTableTab; - tab.setAttribute('aria-selected', true); - tab.setAttribute('tabindex',0); - } else { - tab.className = tableTab; - tab.setAttribute('aria-selected', false); - tab.setAttribute('tabindex',-1); - } - }); -} - -function switchTab(e) { - var selected = document.querySelector('[aria-selected=true]'); - if (selected) { - if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { - // left or up arrow key pressed: move focus to previous tab - selected.previousSibling.click(); - selected.previousSibling.focus(); - e.preventDefault(); - } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { - // right or down arrow key pressed: move focus to next tab - selected.nextSibling.click(); - selected.nextSibling.focus(); - e.preventDefault(); - } - } -} - -var updateSearchResults = function() {}; - -function indexFilesLoaded() { - return moduleSearchIndex - && packageSearchIndex - && typeSearchIndex - && memberSearchIndex - && tagSearchIndex; -} - -// Workaround for scroll position not being included in browser history (8249133) -document.addEventListener("DOMContentLoaded", function(e) { - var contentDiv = document.querySelector("div.flex-content"); - window.addEventListener("popstate", function(e) { - if (e.state !== null) { - contentDiv.scrollTop = e.state; - } - }); - window.addEventListener("hashchange", function(e) { - history.replaceState(contentDiv.scrollTop, document.title); - }); - contentDiv.addEventListener("scroll", function(e) { - var timeoutID; - if (!timeoutID) { - timeoutID = setTimeout(function() { - history.replaceState(contentDiv.scrollTop, document.title); - timeoutID = null; - }, 100); - } - }); - if (!location.hash) { - history.replaceState(contentDiv.scrollTop, document.title); - } -}); diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/search.js b/docs/digitaltwin-core-docs/build/docs/javadoc/search.js deleted file mode 100644 index db3b2f4..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/search.js +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var noResult = {l: "No results found"}; -var loading = {l: "Loading search index..."}; -var catModules = "Modules"; -var catPackages = "Packages"; -var catTypes = "Classes and Interfaces"; -var catMembers = "Members"; -var catSearchTags = "Search Tags"; -var highlight = "$&"; -var searchPattern = ""; -var fallbackPattern = ""; -var RANKING_THRESHOLD = 2; -var NO_MATCH = 0xffff; -var MIN_RESULTS = 3; -var MAX_RESULTS = 500; -var UNNAMED = ""; -function escapeHtml(str) { - return str.replace(//g, ">"); -} -function getHighlightedText(item, matcher, fallbackMatcher) { - var escapedItem = escapeHtml(item); - var highlighted = escapedItem.replace(matcher, highlight); - if (highlighted === escapedItem) { - highlighted = escapedItem.replace(fallbackMatcher, highlight) - } - return highlighted; -} -function getURLPrefix(ui) { - var urlPrefix=""; - var slash = "/"; - if (ui.item.category === catModules) { - return ui.item.l + slash; - } else if (ui.item.category === catPackages && ui.item.m) { - return ui.item.m + slash; - } else if (ui.item.category === catTypes || ui.item.category === catMembers) { - if (ui.item.m) { - urlPrefix = ui.item.m + slash; - } else { - $.each(packageSearchIndex, function(index, item) { - if (item.m && ui.item.p === item.l) { - urlPrefix = item.m + slash; - } - }); - } - } - return urlPrefix; -} -function createSearchPattern(term) { - var pattern = ""; - var isWordToken = false; - term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { - if (index > 0) { - // whitespace between identifiers is significant - pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; - } - var tokens = w.split(/(?=[A-Z,.()<>[\/])/); - for (var i = 0; i < tokens.length; i++) { - var s = tokens[i]; - if (s === "") { - continue; - } - pattern += $.ui.autocomplete.escapeRegex(s); - isWordToken = /\w$/.test(s); - if (isWordToken) { - pattern += "([a-z0-9_$<>\\[\\]]*?)"; - } - } - }); - return pattern; -} -function createMatcher(pattern, flags) { - var isCamelCase = /[A-Z]/.test(pattern); - return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); -} -var watermark = 'Search'; -$(function() { - var search = $("#search-input"); - var reset = $("#reset-button"); - search.val(''); - search.prop("disabled", false); - reset.prop("disabled", false); - search.val(watermark).addClass('watermark'); - search.blur(function() { - if ($(this).val().length === 0) { - $(this).val(watermark).addClass('watermark'); - } - }); - search.on('click keydown paste', function() { - if ($(this).val() === watermark) { - $(this).val('').removeClass('watermark'); - } - }); - reset.click(function() { - search.val('').focus(); - }); - search.focus()[0].setSelectionRange(0, 0); -}); -$.widget("custom.catcomplete", $.ui.autocomplete, { - _create: function() { - this._super(); - this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); - }, - _renderMenu: function(ul, items) { - var rMenu = this; - var currentCategory = ""; - rMenu.menu.bindings = $(); - $.each(items, function(index, item) { - var li; - if (item.category && item.category !== currentCategory) { - ul.append("
              • " + item.category + "
              • "); - currentCategory = item.category; - } - li = rMenu._renderItemData(ul, item); - if (item.category) { - li.attr("aria-label", item.category + " : " + item.l); - li.attr("class", "result-item"); - } else { - li.attr("aria-label", item.l); - li.attr("class", "result-item"); - } - }); - }, - _renderItem: function(ul, item) { - var label = ""; - var matcher = createMatcher(escapeHtml(searchPattern), "g"); - var fallbackMatcher = new RegExp(fallbackPattern, "gi") - if (item.category === catModules) { - label = getHighlightedText(item.l, matcher, fallbackMatcher); - } else if (item.category === catPackages) { - label = getHighlightedText(item.l, matcher, fallbackMatcher); - } else if (item.category === catTypes) { - label = (item.p && item.p !== UNNAMED) - ? getHighlightedText(item.p + "." + item.l, matcher, fallbackMatcher) - : getHighlightedText(item.l, matcher, fallbackMatcher); - } else if (item.category === catMembers) { - label = (item.p && item.p !== UNNAMED) - ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher, fallbackMatcher) - : getHighlightedText(item.c + "." + item.l, matcher, fallbackMatcher); - } else if (item.category === catSearchTags) { - label = getHighlightedText(item.l, matcher, fallbackMatcher); - } else { - label = item.l; - } - var li = $("
              • ").appendTo(ul); - var div = $("
                ").appendTo(li); - if (item.category === catSearchTags && item.h) { - if (item.d) { - div.html(label + " (" + item.h + ")
                " - + item.d + "
                "); - } else { - div.html(label + " (" + item.h + ")"); - } - } else { - if (item.m) { - div.html(item.m + "/" + label); - } else { - div.html(label); - } - } - return li; - } -}); -function rankMatch(match, category) { - if (!match) { - return NO_MATCH; - } - var index = match.index; - var input = match.input; - var leftBoundaryMatch = 2; - var periferalMatch = 0; - // make sure match is anchored on a left word boundary - if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index]) { - leftBoundaryMatch = 0; - } else if ("_" === input[index - 1] || (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input))) { - leftBoundaryMatch = 1; - } - var matchEnd = index + match[0].length; - var leftParen = input.indexOf("("); - var endOfName = leftParen > -1 ? leftParen : input.length; - // exclude peripheral matches - if (category !== catModules && category !== catSearchTags) { - var delim = category === catPackages ? "/" : "."; - if (leftParen > -1 && leftParen < index) { - periferalMatch += 2; - } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { - periferalMatch += 2; - } - } - var delta = match[0].length === endOfName ? 0 : 1; // rank full match higher than partial match - for (var i = 1; i < match.length; i++) { - // lower ranking if parts of the name are missing - if (match[i]) - delta += match[i].length; - } - if (category === catTypes) { - // lower ranking if a type name contains unmatched camel-case parts - if (/[A-Z]/.test(input.substring(matchEnd))) - delta += 5; - if (/[A-Z]/.test(input.substring(0, index))) - delta += 5; - } - return leftBoundaryMatch + periferalMatch + (delta / 200); - -} -function doSearch(request, response) { - var result = []; - searchPattern = createSearchPattern(request.term); - fallbackPattern = createSearchPattern(request.term.toLowerCase()); - if (searchPattern === "") { - return this.close(); - } - var camelCaseMatcher = createMatcher(searchPattern, ""); - var fallbackMatcher = new RegExp(fallbackPattern, "i"); - - function searchIndexWithMatcher(indexArray, matcher, category, nameFunc) { - if (indexArray) { - var newResults = []; - $.each(indexArray, function (i, item) { - item.category = category; - var ranking = rankMatch(matcher.exec(nameFunc(item)), category); - if (ranking < RANKING_THRESHOLD) { - newResults.push({ranking: ranking, item: item}); - } - return newResults.length <= MAX_RESULTS; - }); - return newResults.sort(function(e1, e2) { - return e1.ranking - e2.ranking; - }).map(function(e) { - return e.item; - }); - } - return []; - } - function searchIndex(indexArray, category, nameFunc) { - var primaryResults = searchIndexWithMatcher(indexArray, camelCaseMatcher, category, nameFunc); - result = result.concat(primaryResults); - if (primaryResults.length <= MIN_RESULTS && !camelCaseMatcher.ignoreCase) { - var secondaryResults = searchIndexWithMatcher(indexArray, fallbackMatcher, category, nameFunc); - result = result.concat(secondaryResults.filter(function (item) { - return primaryResults.indexOf(item) === -1; - })); - } - } - - searchIndex(moduleSearchIndex, catModules, function(item) { return item.l; }); - searchIndex(packageSearchIndex, catPackages, function(item) { - return (item.m && request.term.indexOf("/") > -1) - ? (item.m + "/" + item.l) : item.l; - }); - searchIndex(typeSearchIndex, catTypes, function(item) { - return request.term.indexOf(".") > -1 ? item.p + "." + item.l : item.l; - }); - searchIndex(memberSearchIndex, catMembers, function(item) { - return request.term.indexOf(".") > -1 - ? item.p + "." + item.c + "." + item.l : item.l; - }); - searchIndex(tagSearchIndex, catSearchTags, function(item) { return item.l; }); - - if (!indexFilesLoaded()) { - updateSearchResults = function() { - doSearch(request, response); - } - result.unshift(loading); - } else { - updateSearchResults = function() {}; - } - response(result); -} -$(function() { - $("#search-input").catcomplete({ - minLength: 1, - delay: 300, - source: doSearch, - response: function(event, ui) { - if (!ui.content.length) { - ui.content.push(noResult); - } else { - $("#search-input").empty(); - } - }, - autoFocus: true, - focus: function(event, ui) { - return false; - }, - position: { - collision: "flip" - }, - select: function(event, ui) { - if (ui.item.category) { - var url = getURLPrefix(ui); - if (ui.item.category === catModules) { - url += "module-summary.html"; - } else if (ui.item.category === catPackages) { - if (ui.item.u) { - url = ui.item.u; - } else { - url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; - } - } else if (ui.item.category === catTypes) { - if (ui.item.u) { - url = ui.item.u; - } else if (ui.item.p === UNNAMED) { - url += ui.item.l + ".html"; - } else { - url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; - } - } else if (ui.item.category === catMembers) { - if (ui.item.p === UNNAMED) { - url += ui.item.c + ".html" + "#"; - } else { - url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; - } - if (ui.item.u) { - url += ui.item.u; - } else { - url += ui.item.l; - } - } else if (ui.item.category === catSearchTags) { - url += ui.item.u; - } - if (top !== window) { - parent.classFrame.location = pathtoroot + url; - } else { - window.location.href = pathtoroot + url; - } - $("#search-input").focus(); - } - } - }); -}); diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html b/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html deleted file mode 100644 index 86e2438..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/serialized-form.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - -Serialized Form (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
                - -
                -
                -
                -

                Serialized Form

                -
                - -
                -
                -
                - - diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/stylesheet.css b/docs/digitaltwin-core-docs/build/docs/javadoc/stylesheet.css deleted file mode 100644 index 836c62d..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/stylesheet.css +++ /dev/null @@ -1,865 +0,0 @@ -/* - * Javadoc style sheet - */ - -@import url('resources/fonts/dejavu.css'); - -/* - * Styles for individual HTML elements. - * - * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular - * HTML element throughout the page. - */ - -body { - background-color:#ffffff; - color:#353833; - font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:14px; - margin:0; - padding:0; - height:100%; - width:100%; -} -iframe { - margin:0; - padding:0; - height:100%; - width:100%; - overflow-y:scroll; - border:none; -} -a:link, a:visited { - text-decoration:none; - color:#4A6782; -} -a[href]:hover, a[href]:focus { - text-decoration:none; - color:#bb7a2a; -} -a[name] { - color:#353833; -} -pre { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; -} -h1 { - font-size:20px; -} -h2 { - font-size:18px; -} -h3 { - font-size:16px; -} -h4 { - font-size:15px; -} -h5 { - font-size:14px; -} -h6 { - font-size:13px; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:'DejaVu Sans Mono', monospace; -} -:not(h1, h2, h3, h4, h5, h6) > code, -:not(h1, h2, h3, h4, h5, h6) > tt { - font-size:14px; - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; -} -.summary-table dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} -button { - font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size: 14px; -} -/* - * Styles for HTML generated by javadoc. - * - * These are style classes that are used by the standard doclet to generate HTML documentation. - */ - -/* - * Styles for document title and copyright. - */ -.clear { - clear:both; - height:0; - overflow:hidden; -} -.about-language { - float:right; - padding:0 21px 8px 8px; - font-size:11px; - margin-top:-9px; - height:2.9em; -} -.legal-copy { - margin-left:.5em; -} -.tab { - background-color:#0066FF; - color:#ffffff; - padding:8px; - width:5em; - font-weight:bold; -} -/* - * Styles for navigation bar. - */ -@media screen { - .flex-box { - position:fixed; - display:flex; - flex-direction:column; - height: 100%; - width: 100%; - } - .flex-header { - flex: 0 0 auto; - } - .flex-content { - flex: 1 1 auto; - overflow-y: auto; - } -} -.top-nav { - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - min-height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.sub-nav { - background-color:#dee3e9; - float:left; - width:100%; - overflow:hidden; - font-size:12px; -} -.sub-nav div { - clear:left; - float:left; - padding:0 0 5px 6px; - text-transform:uppercase; -} -.sub-nav .nav-list { - padding-top:5px; -} -ul.nav-list { - display:block; - margin:0 25px 0 0; - padding:0; -} -ul.sub-nav-list { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.nav-list li { - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -.sub-nav .nav-list-search { - float:right; - margin:0 0 0 0; - padding:5px 6px; - clear:none; -} -.nav-list-search label { - position:relative; - right:-16px; -} -ul.sub-nav-list li { - list-style:none; - float:left; - padding-top:10px; -} -.top-nav a:link, .top-nav a:active, .top-nav a:visited { - color:#FFFFFF; - text-decoration:none; - text-transform:uppercase; -} -.top-nav a:hover { - text-decoration:none; - color:#bb7a2a; - text-transform:uppercase; -} -.nav-bar-cell1-rev { - background-color:#F8981D; - color:#253441; - margin: auto 5px; -} -.skip-nav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* - * Hide navigation links and search box in print layout - */ -@media print { - ul.nav-list, div.sub-nav { - display:none; - } -} -/* - * Styles for page header and footer. - */ -.title { - color:#2c4557; - margin:10px 0; -} -.sub-title { - margin:5px 0 0 0; -} -.header ul { - margin:0 0 15px 0; - padding:0; -} -.header ul li, .footer ul li { - list-style:none; - font-size:13px; -} -/* - * Styles for headings. - */ -body.class-declaration-page .summary h2, -body.class-declaration-page .details h2, -body.class-use-page h2, -body.module-declaration-page .block-list h2 { - font-style: italic; - padding:0; - margin:15px 0; -} -body.class-declaration-page .summary h3, -body.class-declaration-page .details h3, -body.class-declaration-page .summary .inherited-list h2 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -/* - * Styles for page layout containers. - */ -main { - clear:both; - padding:10px 20px; - position:relative; -} -dl.notes > dt { - font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:12px; - font-weight:bold; - margin:10px 0 0 0; - color:#4E4E4E; -} -dl.notes > dd { - margin:5px 10px 10px 0; - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} -dl.name-value > dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -dl.name-value > dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* - * Styles for lists. - */ -li.circle { - list-style:circle; -} -ul.horizontal li { - display:inline; - font-size:0.9em; -} -div.inheritance { - margin:0; - padding:0; -} -div.inheritance div.inheritance { - margin-left:2em; -} -ul.block-list, -ul.details-list, -ul.member-list, -ul.summary-list { - margin:10px 0 10px 0; - padding:0; -} -ul.block-list > li, -ul.details-list > li, -ul.member-list > li, -ul.summary-list > li { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -.summary-table dl, .summary-table dl dt, .summary-table dl dd { - margin-top:0; - margin-bottom:1px; -} -ul.see-list, ul.see-list-long { - padding-left: 0; - list-style: none; -} -ul.see-list li { - display: inline; -} -ul.see-list li:not(:last-child):after, -ul.see-list-long li:not(:last-child):after { - content: ", "; - white-space: pre-wrap; -} -/* - * Styles for tables. - */ -.summary-table, .details-table { - width:100%; - border-spacing:0; - border-left:1px solid #EEE; - border-right:1px solid #EEE; - border-bottom:1px solid #EEE; - padding:0; -} -.caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:#253441; - font-weight:bold; - clear:none; - overflow:hidden; - padding:0; - padding-top:10px; - padding-left:1px; - margin:0; - white-space:pre; -} -.caption a:link, .caption a:visited { - color:#1f389c; -} -.caption a:hover, -.caption a:active { - color:#FFFFFF; -} -.caption span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - padding-bottom:7px; - display:inline-block; - float:left; - background-color:#F8981D; - border: none; - height:16px; -} -div.table-tabs { - padding:10px 0 0 1px; - margin:0; -} -div.table-tabs > button { - border: none; - cursor: pointer; - padding: 5px 12px 7px 12px; - font-weight: bold; - margin-right: 3px; -} -div.table-tabs > button.active-table-tab { - background: #F8981D; - color: #253441; -} -div.table-tabs > button.table-tab { - background: #4D7A97; - color: #FFFFFF; -} -.two-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(15%, auto); -} -.three-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto); -} -.four-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto); -} -@media screen and (max-width: 600px) { - .two-column-summary { - display: grid; - grid-template-columns: 1fr; - } -} -@media screen and (max-width: 800px) { - .three-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(25%, auto); - } - .three-column-summary .col-last { - grid-column-end: span 2; - } -} -@media screen and (max-width: 1000px) { - .four-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(15%, auto); - } -} -.summary-table > div, .details-table > div { - text-align:left; - padding: 8px 3px 3px 7px; -} -.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { - vertical-align:top; - padding-right:0; - padding-top:8px; - padding-bottom:3px; -} -.table-header { - background:#dee3e9; - font-weight: bold; -} -.col-first, .col-first { - font-size:13px; -} -.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { - font-size:13px; -} -.col-first, .col-second, .col-constructor-name { - vertical-align:top; - overflow: auto; -} -.col-last { - white-space:normal; -} -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-constructor-name a:link, .col-constructor-name a:visited, -.col-summary-item-name a:link, .col-summary-item-name a:visited, -.constant-values-container a:link, .constant-values-container a:visited, -.all-classes-container a:link, .all-classes-container a:visited, -.all-packages-container a:link, .all-packages-container a:visited { - font-weight:bold; -} -.table-sub-heading-color { - background-color:#EEEEFF; -} -.even-row-color, .even-row-color .table-header { - background-color:#FFFFFF; -} -.odd-row-color, .odd-row-color .table-header { - background-color:#EEEEEF; -} -/* - * Styles for contents. - */ -.deprecated-content { - margin:0; - padding:10px 0; -} -div.block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} -.col-last div { - padding-top:0; -} -.col-last a { - padding-bottom:3px; -} -.module-signature, -.package-signature, -.type-signature, -.member-signature { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - margin:14px 0; - white-space: pre-wrap; -} -.module-signature, -.package-signature, -.type-signature { - margin-top: 0; -} -.member-signature .type-parameters-long, -.member-signature .parameters, -.member-signature .exceptions { - display: inline-block; - vertical-align: top; - white-space: pre; -} -.member-signature .type-parameters { - white-space: normal; -} -/* - * Styles for formatting effect. - */ -.source-line-no { - color:green; - padding:0 30px 0 0; -} -h1.hidden { - visibility:hidden; - overflow:hidden; - font-size:10px; -} -.block { - display:block; - margin:0 10px 5px 0; - color:#474747; -} -.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, -.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, -.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { - font-weight:bold; -} -.deprecation-comment, .help-footnote, .preview-comment { - font-style:italic; -} -.deprecation-block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -.preview-block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -div.block div.deprecation-comment { - font-style:normal; -} -/* - * Styles specific to HTML5 elements. - */ -main, nav, header, footer, section { - display:block; -} -/* - * Styles for javadoc search. - */ -.ui-autocomplete-category { - font-weight:bold; - font-size:15px; - padding:7px 0 7px 3px; - background-color:#4D7A97; - color:#FFFFFF; -} -.result-item { - font-size:13px; -} -.ui-autocomplete { - max-height:85%; - max-width:65%; - overflow-y:scroll; - overflow-x:scroll; - white-space:nowrap; - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} -ul.ui-autocomplete { - position:fixed; - z-index:999999; -} -ul.ui-autocomplete li { - float:left; - clear:both; - width:100%; -} -.result-highlight { - font-weight:bold; -} -#search-input { - background-image:url('resources/glass.png'); - background-size:13px; - background-repeat:no-repeat; - background-position:2px 3px; - padding-left:20px; - position:relative; - right:-18px; - width:400px; -} -#reset-button { - background-color: rgb(255,255,255); - background-image:url('resources/x.png'); - background-position:center; - background-repeat:no-repeat; - background-size:12px; - border:0 none; - width:16px; - height:16px; - position:relative; - left:-4px; - top:-4px; - font-size:0px; -} -.watermark { - color:#545454; -} -.search-tag-desc-result { - font-style:italic; - font-size:11px; -} -.search-tag-holder-result { - font-style:italic; - font-size:12px; -} -.search-tag-result:target { - background-color:yellow; -} -.module-graph span { - display:none; - position:absolute; -} -.module-graph:hover span { - display:block; - margin: -100px 0 0 100px; - z-index: 1; -} -.inherited-list { - margin: 10px 0 10px 0; -} -section.class-description { - line-height: 1.4; -} -.summary section[class$="-summary"], .details section[class$="-details"], -.class-uses .detail, .serialized-class-details { - padding: 0px 20px 5px 10px; - border: 1px solid #ededed; - background-color: #f8f8f8; -} -.inherited-list, section[class$="-details"] .detail { - padding:0 0 5px 8px; - background-color:#ffffff; - border:none; -} -.vertical-separator { - padding: 0 5px; -} -ul.help-section-list { - margin: 0; -} -ul.help-subtoc > li { - display: inline-block; - padding-right: 5px; - font-size: smaller; -} -ul.help-subtoc > li::before { - content: "\2022" ; - padding-right:2px; -} -span.help-note { - font-style: italic; -} -/* - * Indicator icon for external links. - */ -main a[href*="://"]::after { - content:""; - display:inline-block; - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); - background-size:100% 100%; - width:7px; - height:7px; - margin-left:2px; - margin-bottom:4px; -} -main a[href*="://"]:hover::after, -main a[href*="://"]:focus::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); -} - -/* - * Styles for user-provided tables. - * - * borderless: - * No borders, vertical margins, styled caption. - * This style is provided for use with existing doc comments. - * In general, borderless tables should not be used for layout purposes. - * - * plain: - * Plain borders around table and cells, vertical margins, styled caption. - * Best for small tables or for complex tables for tables with cells that span - * rows and columns, when the "striped" style does not work well. - * - * striped: - * Borders around the table and vertical borders between cells, striped rows, - * vertical margins, styled caption. - * Best for tables that have a header row, and a body containing a series of simple rows. - */ - -table.borderless, -table.plain, -table.striped { - margin-top: 10px; - margin-bottom: 10px; -} -table.borderless > caption, -table.plain > caption, -table.striped > caption { - font-weight: bold; - font-size: smaller; -} -table.borderless th, table.borderless td, -table.plain th, table.plain td, -table.striped th, table.striped td { - padding: 2px 5px; -} -table.borderless, -table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, -table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { - border: none; -} -table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { - background-color: transparent; -} -table.plain { - border-collapse: collapse; - border: 1px solid black; -} -table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { - background-color: transparent; -} -table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, -table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { - border: 1px solid black; -} -table.striped { - border-collapse: collapse; - border: 1px solid black; -} -table.striped > thead { - background-color: #E3E3E3; -} -table.striped > thead > tr > th, table.striped > thead > tr > td { - border: 1px solid black; -} -table.striped > tbody > tr:nth-child(even) { - background-color: #EEE -} -table.striped > tbody > tr:nth-child(odd) { - background-color: #FFF -} -table.striped > tbody > tr > th, table.striped > tbody > tr > td { - border-left: 1px solid black; - border-right: 1px solid black; -} -table.striped > tbody > tr > th { - font-weight: normal; -} -/** - * Tweak font sizes and paddings for small screens. - */ -@media screen and (max-width: 1050px) { - #search-input { - width: 300px; - } -} -@media screen and (max-width: 800px) { - #search-input { - width: 200px; - } - .top-nav, - .bottom-nav { - font-size: 11px; - padding-top: 6px; - } - .sub-nav { - font-size: 11px; - } - .about-language { - padding-right: 16px; - } - ul.nav-list li, - .sub-nav .nav-list-search { - padding: 6px; - } - ul.sub-nav-list li { - padding-top: 5px; - } - main { - padding: 10px; - } - .summary section[class$="-summary"], .details section[class$="-details"], - .class-uses .detail, .serialized-class-details { - padding: 0 8px 5px 8px; - } - body { - -webkit-text-size-adjust: none; - } -} -@media screen and (max-width: 500px) { - #search-input { - width: 150px; - } - .top-nav, - .bottom-nav { - font-size: 10px; - } - .sub-nav { - font-size: 10px; - } - .about-language { - font-size: 10px; - padding-right: 12px; - } -} diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/tag-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/tag-search-index.js deleted file mode 100644 index f38b3cb..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/tag-search-index.js +++ /dev/null @@ -1 +0,0 @@ -tagSearchIndex = [{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js b/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js deleted file mode 100644 index 3146686..0000000 --- a/docs/digitaltwin-core-docs/build/docs/javadoc/type-search-index.js +++ /dev/null @@ -1 +0,0 @@ -typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheOperationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitSimulationContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SharedData"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/SimulationWorker.class.uniqueId0 deleted file mode 100644 index 7f627fcf3df6d5eb896ecd435acf7340138d278e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12234 zcmcgy3w%`7ng4&2Np3Q^Br%Z4ph)nU7X&SWB#0tJ4I~5zfK~$JW)l>sH$C{@iYDmvyE8@7&4EBtetGpUY#; zx#ynqo$vAgzVn@P?h7A(|0w{c%R@eRkYmAXBNussl8XWx19hQ5xT~&p-9=7ET#z?A z7!Jng2y!Z`mRradoZb=Xsf%?4LQW(Rk44tUHwB_jU1zW>7!QQvn}XrGPG_SNiuCq4 z;dotJuqP1;#DkIWib!;W6ZOG|LJPKyF(?uo7m0S&1$qM=-A-L7($y8@)GVi8RM#Bo zY6*k`T~1U`(B;JWZ0gf1o6}s*3k71ahN|XIqry=Q1+Y+J;|P=rtTj53lAS!_I1A$h zN1FK(@nEQKaWoi-2IE_nB%Flf!&u}f%5%^thhmUTs zaFpQ0H0_Q^xFZpbs?z4As^DpUxaDjE|c)nO+1G!jM!$J#i~ z9ZnO4<1yv_1RE#fBqbROMdD4J0%_9rDjU_P5%|{hL^_?&qCk%$D9uoQTRcj08M;$! zOhuhw+?rU*-ixD=4ks3iP|*#|BVwi_LJ+0Fk{WEtpKRk4d_l=8z8W_>9TYbbZVVGI zWa_Mu$!9`x*>D zxN2MQ5=Y0MZQ~prKQ_axO=0%h7zpK~NpQUD)D=-D=ESE?om#

                MKr&RRoj0^udRP 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 K`MMeR;NJjbSW&kC diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/Workbench.class.uniqueId6 deleted file mode 100644 index 850b9a0213e63c9da6953656aaafd9681341bf0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20564 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 S4g5Eu-ok2~+Mq6{%KrhYKMNuN diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchInitContext.class.uniqueId5 deleted file mode 100644 index 7c681bb63bb231f877eed8269ea14ddad18b1203..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3017 zcmdT`TXWM!6#mxN*cF7_XcYp4aSl7-?% z4g<(#kvH%e42FfCcy+NWTz{u2JZZi3gP*sAXKx?DAKg@eSKbJ_Egj!m@fwaN7#7$2 z!mgdfs3@}M4GiJ}LvGXYT9SJ$lx`gP$l46pyh zce&+quVGbX;CKx^@1lXv)x6}UQ_sW1covroOyDwQ)>mSkqSc(H2&y93byN;{N+yun z#+Y5`ol*Bf#1*SILTpV=W`BB%q>QZPcEHuTS58Slr(FAGNA%^e%DuWPf=aQUC=0eC z_CmDUuB>EnmEqypmae)@ZB}3AlIL*^UuJRLzzy8&7cXYn7>tIH&(u~_@C>&LC+lAf zP1IhlwaQ!D&-hLyk1M#XRH49dG4eSwp}3*AmJCc`nqh>ZJa+vp?jGjCFjk0zW_bH? z@5kZ>Lu!d?#xS@}V)MM++!8^JZ@FX{UiV2KH+bNv@5q>v+fIvNsrT;bZnIA7cIjP( zYAH`@6~n-xKBXgRNjP4UP#M!?U89B?JrJ$#Bb&A) z4eQW!wpRUiV2ekN(gQQDi|?p2ACq*yNYFhiML)U@(LdB>LqF+~pr3RJpl61DY0QA( z4!!+GUTJ!cmp*`%ruLC7P4DAeX=WcoB{Q{;vEOMl0ZYx%z7rJVGIFHZ=W&%TAd_^X zxQ4H2yc{CoF21HOHUAr8!t`62xF~+(_?B2C_1ky!mZI?q+@mqY=2yx>u`x?~L}ZV6 z>=BJUj7?3?n5jST#XA~IYBCuOe6uUC*$HgodxBPhP0ZrH4s4==IUU%f%ji4>{(;6r zddl*UEDK~wV39nRuuT7o(gRHq82JlVUPZKq-ed9uZYeThWkNC~O(ujKiO4Xlbf9J_ zydpJt0QDZl7#OPyX0QYE2#+I17CjYAS{3FvhjN#5y5qbW>pXPac{bL0O{e+fe{s)w A_5c6? diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchProcessingContext.class.uniqueId3 deleted file mode 100644 index 16c09a8c11130093aa00240130a34bbf5931b479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11067 zcmdT~d3;n?75;8A3ki<^DWOcDPzwT?42@0cLPFCLN@-dGrAa}cH4c-+H?s zT2grqTv5oU>|!yKORvr69Q!&)A+kD?%Qzhh)ytc<)LPf*$+fH{`j?0#hmqSwp*$R-e zEVSZm%AO?FYw7mvrhWGtjWjH;v@VKs6lQ5%`9xiV^KgC?t1PskUEvA(_gp65k|M#P z?NB4hTz|6Azt(&&Dul1F;KiQqsUW=8uKs=Fdv}pN`&WUF>Z4rJhvakl7 z6iLy}_4np`w8Rx|svwf_LJBg{6wpX|xIYc>O1n6eb=sr2SmDAcY1;Gob=RfrLGhs) zT!QscTxy{Umnob*DLLbVejqf^jd|x%Dk5w5E1YwJ%xqAYQ})#jncN<`e?z9|)Z%hf zPsb))5yfT;SE5Iu&Ofopuvne!=hh8=jcnR^t(|h(o3@JzuM!n*QMl1R!*%B%8ZvWq z6cJ4AC#JDldhU}gY{Pbi*~XZBey^}+3g}KAOEa#va1EZKFq4idk*6HCt_g%Bs1$rm z>fk0Cd8&mZc2aYNp`60A0_``Erlu~7a?W#|N&KMSf-O!Eb!}PVMB2h`WE7@RM4i_= zHY3bJ7i*=^(zK&fl)OijoK*-W#vPqO1vxqZ2)>+!JO+t5Q(QMN=v=Q0gYDujxhM#B zjyQBWpHFA)mUJ^+4O`fY>&RWku?tBj&on%DRCw-k$J?jl20T5AXIQvV zwyQ5YU}*|5>`oRpvPzM;H(7WVZdM58blEbeL{$fO*EOSfwnCLitbpfQcpje5yzAsI zBSM9xev2si@^}LfQ+k1z(hC)C@h_RObNkXxVD}zpMxv4zTX>19l1>ucBM@I^;pKRR z!f6!I8kRc_R}N?T?E-6rW{W9nB7>3*-2TejF0@);tsqyinmy}6K`eJJ0(h9itWt|*o7XuFr1M( zu$Bd3!O>$%rIt^gBmL+q71EPa(3yH{=p8TD;3Ez>YPs08)%Jh@G|Ro$586{&U?OlK zup{bS)}+LVynucH2cvkqg?HetAm*yYHI5FWTF+2Qx-f-RQ(<`&7_q3kExZfwR;VdD z`9Zyp!q5NT3?XQu8Yf2<-Oaei!h3OuB9(fB#-y;Mg6I0%1GWq{3*GlmwWaaAu-tjn z;(ZvAz;i^BoUwWxcuH+y6YIm8o=iHIbcPDV=EvdASv}rac64^IGdcL5P-Ho$mLOF? z8PEnRcFDqFXf2yMmV7L*?TteNJMBVma%Yw!^&9d$kl2zeWaPU$7;<)JX!%`}@9K|N zp7hK4(LKPRs7`Ul9}5tV?%B)QVl!wObN|qsVujwH+8m9XvBpLJ(0@fM6BxmGT}?D` z(tKiitO~p`IVs%ypWx~wG1U4`Zo&ndy|}_)1!o@bFcn6Eff<|1L>6IfHmo8uZ2uzW zEJVs#@BC%e31SlBGc;f2rl>7|;43CwAy(r%!eIYiLlI=Tzskr2Ii z%?Wy_cMw3&4DU1z&J3Qar1tQn%ypwKzYM)nJebnPVx4y_t9w>OnPfI|g9IA4h+~kM zvSRnD{g$E>J1GP z)6&U}WzJ-t0l#vBG(9J&z$x$NVmeXotI53-P1QtVDgWz_G0@)f*C{`S-@) zViIG>PeFcV{fg{Qlq2$zGu_$*=TX5tYjjgKx%-=>;y<_}_p_7!W^`jxYBEcYdCk?z zfTTy^p?X;3U11lB^afrs*rk3~;Q}571mm#6azd8FDmh6uk+X|&fArykt6OvY?8_PY zFq=UxEB&QH%;!#{TTg}K6WWCH|I`A}Z3J(@sFg{PhdIMZ^6rL`(ae-)ORuJIRzMv| z8DG%t9SukC=C*DMK@CTfC^dX?ASkuOlzJ_9@#@~*cDl5RtnO_K2;XNP`ed@>e@OF& zouJO5r8uhTROqh2&B@TKqwB35DinBqDBCd$myY#xWYo={)PL;tg*NX2}&S z-yqkA`pN4-{p3BJe)4)yKY8`3pS-Jt!o7U2!cl(mI&#!^Uj1=&9{XDMl>D^9mb4!;xJ~%R~$yed--cMJ}7e#;pb9>u#EVY^UAe}JH!!VBmN=& zveHn(hw%}9lldPd2TH%)$C<)cBRX!dbk8EDNsHL)MB1sbUdaD?ZIPLDq`T@J$$R#b>E_;qd`{&PDrT{vsm@ zAKKtJ7b42F7Z7I$ab8HpUPL9Wp)qz+wQDuTxS{W1On4X*9>#=+@$>kCi>!m_1%E`4 zEh=kC{(k|yA_-%?rf*Cj;?a+2E=2}k#Gp&7g-;m?Q`n2|=8F+?L=Rr3$ryVJyJQr; zgooV4&!jR$d`m=A{9DGqdHh>&3@f)aAHumuuzCa+-qU>u>+aDM7h(~aH@07=*IvPq z%@oU(dM`1k(Tg25tlJZym$l;bHv4Tm0&Va;kz8=l^8z-+w)0J>2TH(sHIS~tu zVCy~n*{{qjqr(8|k<*||@S5*IneW;6e9yk;YqeH$T|K@>peA^U@XW~fIU=BbU_hyb zge0Igi@=(x%N@tjvEn{#+6QaJN3p3bbPx>{0PERGK=&O-%^{=?A|h5Pe{CUcpT>DE zr!>~%GTvvG~SS_5`xo6Ub(5L)BgkH`E^XsL7jXt^tt+k70Hco91*zamk~=T4P+> z@IzODTPP{nurA)5SV3RJ-ijm;dP|2kD+Kk zDcnX1x8p7Rl$>)l4P`5%{Ezu7Z>A`FQMu%S1D;$Dcyc}9$@PGC(Q58BjGy4AT(^o| zB;F9_UM=_;5k)+M5NeO$`!q5$>*t&$2Eoj@xcYI#qA1WPqPXEvBpyRk6f4C(jCB|{ z{{`*im-v-yC3kW^37lQj-i!95&L}aOxZfzu4NUVm{L=m7hxTEXH-kEVB|WPg6ihrl zz$kT)bH_}KSCPe=Kw_Zf^_6!iVs-w_&=jxDH}koQ3J)SXkKcr@-S(68F=h9$+c@AT97S8cm0x z?xAVL-&~co;!*saD5R2l4FAxqw&HR8lT;fqkNUWaR$5AnGV5{0Ga#+v8dN=ocoYXh zCJQNH>RqbZmE5gdD3WU)$JD)eXLq6kI|<>&WF=#OUu3ZS62taGSVDhn;;!PY#sHf= zZkkRd7_R%Vs-IfD0$wTW;0Y{Dv8ql&1gOT%xCGsZ6d zo^P>djcS^z@c@W`2;dmrw~ZiXAHm_VG=A)(Q3g;uA&rI#G=5Q$#&qsnrL2DeHJgPS diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$1.class.uniqueId8 deleted file mode 100644 index 6b2266d0d317befb986ca1199b5262d786852560..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1702 zcmbtV+iuf95IviwaZ?OUQ|{&707s(iDp5MQTuy;A!hDiNUoidsE<3_yS%5 zaglgHJo8bAvq=C8imIxS;$4qtj?d1V8Grxro(g$qQR z+b&$i@Efp^#h^g{y7UXNKz{C-T$he7gQip0kry;8gRrsF!Y&&_$O+{BI4rI_Q?4ed z2`}*Uq(EP>w46mABNles*n_fZxq|XpEr4WLVpvnb%Cg;O?8qbP85(|ougWic(?mRej>kUpJGVZ+80?yzmiP2gTqzQ1z56`tMllit9BiuG(56V$#R z1S*>LWgM#*$2f6p2%JSKmotM0;L7R9ftlui2E)24{C|b4Af`>>JyH>M)p0% z-XQZHB?H-)IPAFucVdT diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$2.class.uniqueId4 deleted file mode 100644 index 21894d2c2dd84ae87f034065cdf5b2dcbe7d68f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1441 zcmbtU>uwT36#fRbY@w?~idyeCRG@`zt0qR;#?Wfoh^-NWG5s|xBWzuE$nGpn-%5>* zi9dV*AIf-!Vrpm&X-dMJ*|X>S&V7IV{_zvQ3LYmBL)?U6VFC$;sw2C0=x|TSNQLsF z+T($+TW;G`+*5n5Z?{BWc(T_OzOvuT;8RohPN&`>v(`FSJh#M3xHH5t$nK!cLXYr1{&URRW!&up>RDP*Qan1&(;>>eOdXSc$TpII7bN-|=Kf)B0Md zj%=AIGdv&bdQ5jLEMSo)x2I=pGk-jP>eXrTI~*KJYjR73YD0!ZYi;_z2-Z9vh9bmm z+Q>8*t|6XI>%{~}(&h~$eMRWQV$gpEH^}lP-8M*SO}03909KqofLSaZV5;~X(_cs* z!!0@!#0fkhe$WcW=*;2{?vm6u&C76)?lF2|$l*Snn%yR;krTylFh36rj_95a=&VD7 zAsxd5JUjtBH40ui5u8V12riSqE2AUEckxUVr I&YOOJ0E;Vk=>Px# diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7 b/docs/digitaltwin-core-docs/build/tmp/compileJava/compileTransaction/stash-dir/WorkbenchSharedData$3.class.uniqueId7 deleted file mode 100644 index 18995871bec4aa1b60a45a3dfd12388a780faa25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1515 zcmbtUTTc@~6#k|yU0SwME+Ss>Qnf9Y1@RU^VhSi~frOe8!_#y-whP-GvO6vMi+oig zG4a7y6MvNP%(eysn1-;)&Y3-X&Ue0Znfd+a$4>yy@ic)5q6T6ndJtzQ*s@^-Hg|<= zsz82Fd)yaR)u}m(yK2wztg2`USMD~1r>srs?^J|m*GqLWt1fZHGqVhFRd<5SG@%vG z3pc0v^_oZ^$5hIwhBq4F<@ZO#1MuV z(uaQQm2F`w;yUkmj#^-dW^?5PMsUf%sENzC!tkssds|X<7P(y)>$}3|%8_14an;l$ z+Yy$e2-c)p{^$f0ZN7U!{tHPtj^LV!>zZ1sjlLlovL&hp#u#SKz;;6fO_%t*&vqx& zrQvfYo3T~Ml^J4-vMLz*i;gGOnvII^-|>n|n!%!^0V{Lg(cc|qOwSC%(z*F$X6G0Z zC8y?5AAAZIuL<>5d}0{R=1y{D=%xQOJq@Hr~wdVtb>t#QHx-rx?cBcvmHWN??H-f3Kh zd$fM z{lOgaSOh)Umxe2ID5Ib!4usPCLlK$at&Tr-MHCL&12XGva>M;KhP)Zb#D7R=t<%EQ zODLe|qU2!?9z%JLAMil&s2}Wh_e5xjZCysvG#F+o)lLy-G4G=6;T#qio@DZen(}M% za3FT~Ma+%VQQL5nCJf$4-BiNn#;~59%zwe^E*2RcO%cs&k)(>U+p1*KX0)VU?Jzh^ z-4hJ+Eg6ZObl4T~8{SoFceAiw+#()nxb&W+DP!Fwoc4TFazClahKs)CUr*jJ={lyVK%gL#PE2!Y{p|?YqTR0^Fk*y65e(ciMXkFl86L1 z=>ZqOa2~8&wvU+JwL||LE|7MKb`7$~ku23#zJb-g!~H_194^wDCmY~BmT6rYTj3He z(~0ayXpAhb;OYeH0ZHqTW1sDM1fx5`@W!_j42EmCp6S^?(enmnHjaOlq~&zJ;>>YY hb;Q@1usXOkitRS;STFdvhw4bmM<{{6Kg<1qPezfdw9JgcUK7il_m;_ zO^iSLM;T}D4y;f@0(ePpZnwMd&AgqN{q_6%4*+vmmEnV5LR|p$XkZBLD*H-8Q}jaO zb#|BMY=(weRafnK27ffR*@#>yBCi%yThZ(T zRZrykKG%%B64&j-mSKL%ay?hf6lqz0NwF1%y1ZlB(++dlR<*=S#VW2Vdr1i`45{l< z435iaModjZ@>FJ+L)OU6ED7^)F_%}Dzhd^;%# zgEtZJq>KS{i355VKvZOTeNN+wDItCn@KZ8k7!iU#VpzTbL1UW|5)5OP=4sBLVymvD z#*A9f6}xPb)}F4_1vOihR9@olq~?i>b-qz9Wx4rQ$!atc zN*h%5n~JH5u{T*~7gdWSy?%vJ&R9;5Am9FFI@~*98>!*+1rdr+`~^%k!`s|_2iHPkpOh>PVA!m%Tnd2*}IJZcR z9y}^~6+_box9oK;4w)DOYr4+OMNP3RZlRCbz7Gte^b3jBPj-wh5Ff@V@2Q|LLEn=! z^Ny^KtQI=%>|;y5Nb!+a5{SAvr?NPxP%< zFyPWWI7_oe8oa8a37^u0JsNQlzwl_HNO`f$lT*TlprARzPzAAVI*{SB`0pX%gM;sC p9rW=1Sft%PEMb|fOe)8yheqfgU7>M5jho4eC*m6V*L`BH`2%R8GK>HK diff --git a/docs/digitaltwin-core-docs/build/tmp/compileJava/previous-compilation-data.bin b/docs/digitaltwin-core-docs/build/tmp/compileJava/previous-compilation-data.bin deleted file mode 100644 index 39ca4be2e7df8f39fb1fe6c734b77c2c29ec8506..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7453 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 + + 4.0.0 + com.scaleoutsoftware.modules + DigitalTwinAPI + 3.0.0 + pom + + ../../Abstractions + ../../Development + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.7.0 + + + aggregate + + aggregate + + + + + + + \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/settings.gradle b/docs/digitaltwin-core-docs/settings.gradle deleted file mode 100644 index b72c16e..0000000 --- a/docs/digitaltwin-core-docs/settings.gradle +++ /dev/null @@ -1,2 +0,0 @@ -rootProject.name = 'digitaltwin-docs' - diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java deleted file mode 100644 index 7e0d3f4..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertMessage.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.util.HashMap; - -/** - * A message that should be sent to a configured alert provider. - */ -public class AlertMessage { - private final String _title; - private final String _severity; - private final String _message; - private final HashMap _optionalTwinInstanceProperties; - - private AlertMessage() {_title = _severity = _message = null; _optionalTwinInstanceProperties = null;} - - /** - * Construct an alert message with a title, severity, and custom message. - * @param title the title for the alert message. - * @param severity the severity for this alert. - * @param message the custom message for this alert. - */ - public AlertMessage(String title, String severity, String message) { - _title = title; - _severity = severity; - _message = message; - _optionalTwinInstanceProperties = null; - } - - /** - * Construct an alert message with a title, severity, and custom message. - * @param title the title for the alert message. - * @param severity the severity for this alert. - * @param message the custom message for this alert. - * @param optProps the optional properties that should be sent to the alerting provider. - */ - public AlertMessage(String title, String severity, String message, HashMap optProps) { - _title = title; - _severity = severity; - _message = message; - _optionalTwinInstanceProperties = optProps; - } - - /** - * Retrieve the title for this alert message. - * @return the title of this alert message. - */ - public String getTitle() { - return _title; - } - - /** - * Retrieve the severity for this alert message. - * @return the severity for this alert message. - */ - public String getSeverity() { - return _severity; - } - - /** - * Retrieve the message for this alert message. - * @return the message for this alert message. - */ - public String getMessage() { - return _message; - } - - /** - * Retrieve the optional twin instance properties for this alert message. - * @return the optional twin instance properties for this alert message. - */ - public HashMap getOptionalTwinInstanceProperties() { - return _optionalTwinInstanceProperties; - } - - @Override - public String toString() { - return "AlertMessage{" + - "_title='" + _title + '\'' + - ", _severity='" + _severity + '\'' + - ", _message='" + _message + '\'' + - ", _optionalTwinInstanceProperties=" + _optionalTwinInstanceProperties + - '}'; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java deleted file mode 100644 index 8f718aa..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/AlertProviderConfiguration.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.io.Serializable; - -/** - * Configuration for an alert provider. - */ -public class AlertProviderConfiguration implements Serializable { - /** - * The alert provider type. - */ - final String alertProviderType; - /** - * The required url for the alert provider type. - */ - final String url; - /** - * The required integration key for the alert provider type. - */ - final String integrationKey; - /** - * The required routing key for the alert provider type. - */ - final String routingKey; - /** - * The name of this alert provider. - */ - final String name; - /** - * The entity ID of this alert provider type. - */ - final String entityId; - - private AlertProviderConfiguration() {alertProviderType = url = integrationKey = routingKey = name = entityId = null;} - - /** - * Construct an alert provider configuration. - * @param alertProviderType the alert provider type. - * @param url the alert provider URL where alerts should be posted. - * @param integrationKey the integration key. - * @param routingKey the routing key. - * @param name the name of the alert provider. - * @param entityId the entity Id. - */ - public AlertProviderConfiguration(String alertProviderType, String url, String integrationKey, String routingKey, String name, String entityId) { - this.alertProviderType = alertProviderType; - this.url = url; - this.integrationKey = integrationKey; - this.routingKey = routingKey; - this.name = name; - this.entityId = entityId; - } - - /** - * Retrieve the alert provider type for this configuration. - * @return the alert provider type. - */ - public String getAlertProviderType() { - return alertProviderType; - } - - /** - * Retrieve the URL for this alert provider configuration. - * @return the URL for this alert provider configuration. - */ - public String getURL() { - return url; - } - - /** - * Retrieve the integration key for this alert provider configuration. - * @return the integration key for this alert provider configuration. - */ - public String getIntegrationKey() { - return integrationKey; - } - - /** - * Retrieve the routing key for this alert provider configuration. - * @return the routing key for this alert provider configuration. - */ - public String getRoutingKey() { - return routingKey; - } - - /** - * Retrieve the name of this alert provider configuration. - * @return the name of this alert provider configuration. - */ - public String getName() { - return name; - } - - /** - * Retrieve the entity ID for this alert provider configuration. - * @return the entity ID for this alert provider configuration. - */ - public String getEntityId() { - return entityId; - } - - @Override - public String toString() { - return "AlertProviderConfiguration{" + - "alertProviderType=" + alertProviderType + '\'' + - ", URL='" + url + '\'' + - ", IntegrationKey='" + integrationKey + '\'' + - ", RoutingKey='" + routingKey + '\'' + - ", Name='" + name + '\'' + - ", EntityId='" + entityId + '\'' + - '}'; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java deleted file mode 100644 index 119b0be..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheOperationStatus.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Status of a cache operation. - */ -public enum CacheOperationStatus { - - /** - * The object was successfully retrieved. - */ - - ObjectRetrieved, - - /** - * The object was successfully added/updated. - */ - ObjectPut, - - /** - * The object could not be retrieved because it was not found. - */ - ObjectDoesNotExist, - - /** - * The object was removed successfully. - */ - ObjectRemoved, - - /** - * The cache was cleared successfully. - */ - CacheCleared -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java deleted file mode 100644 index 9dc13c7..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/CacheResult.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Represents a response from a {@link SharedData} operation. - */ -public interface CacheResult { - /** - * Gets the key or null to the object associated with the result. - * @return the key or null. - */ - public String getKey(); - - /** - * Get the object returned from a Get operation. - * @return the object or null. - */ - public byte[] getValue(); - - /** - * Gets the status of the cache operation. - * @return the operation status. - */ - CacheOperationStatus getStatus(); -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java deleted file mode 100644 index 4b4333d..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinBase.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.util.Date; -import java.util.HashMap; - -/** - * A real-time digital twin of a data source. The implementation of the real-time DigitalTwin should have a parameterless constructor for - * basic initialization. - */ -public abstract class DigitalTwinBase { - - /* capitalized to match .NET serialization */ - /** - * The identifier for this twin instance - */ - public String Id = ""; - - /** - * The model this twin instance belongs to. - */ - public String Model = ""; - - /** - * The timer handlers for this twin instance. - */ - public HashMap TimerHandlers = new HashMap<>(); - - /** - * Note: Simulation only. The next time in milliseconds that this Digital Twin instance will be passed to {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)}. - */ - public long NextSimulationTime = 0L; - - /** - * Default constructor. - */ - public DigitalTwinBase() {} - - /** - * Retrieve the next simulation time in milliseconds. - * @return the next simulation time in milliseconds. - */ - public long getNextSimulationTimeMs() { - return NextSimulationTime; - } - - /** - * Set the next simulation time in milliseconds. - * @param nextSimulationTime set the next simulation time. - */ - public void setNextSimulationTime(long nextSimulationTime) { - NextSimulationTime = nextSimulationTime; - } - - /** - * The identifier of this DigitalTwin. - * @return the identifier of this digital twin - */ - public String getId() { - return Id; - } - - /** - * The model for this DigitalTwin. - * @return the model for this DigitalTwin - */ - public String getModel() { - return Model; - } - - /** - * Initialization method to set the identifier and model for a DigitalTwin instance. Optionally use the - * {@link InitContext} to start a timer. - * @param context the initialization context. - * @throws IllegalStateException if init is called after initialization. - */ - public void init(InitContext context) throws IllegalStateException { - this.Id = context.getId(); - this.Model = context.getModel(); - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java deleted file mode 100644 index 6ea0ce0..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/DigitalTwinTimerMessage.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * A message sent to a digital twin instance's message processor. - */ -public class DigitalTwinTimerMessage { - - private String _modelName; - private String _twinId; - private int _timerId; - private String _timerName; - private TimerType _timerType; - - /** - * Construct a digital twin timer message. - * @param modelName the digital twin model name. - * @param twinId the digital twin instance ID - * @param timerId the timer ID - * @param timerName the timer name - * @param timerType the timer type - */ - public DigitalTwinTimerMessage(String modelName, String twinId, int timerId, String timerName, TimerType timerType) { - _modelName = modelName; - _twinId = twinId; - _timerId = timerId; - _timerName = timerName; - _timerType = timerType; - } - - /** - * Retrieve the digital twin model name. - * @return the digital twin model name. - */ - public String getModelName() { - return _modelName; - } - - /** - * Retrieve the digital twin ID. - * @return the digital twin ID. - */ - public String getTwinId() { - return _twinId; - } - - /** - * Retrieve the timer ID. - * @return the timer ID. - */ - public int getTimerId() { - return _timerId; - } - - /** - * Retrieve the timer name. - * @return the timer name. - */ - public String getTimerName() { - return _timerName; - } - - /** - * Retrieve the {@link TimerType}. - * @return the {@link TimerType} - */ - public TimerType getTimerType() { - return _timerType; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java deleted file mode 100644 index 4cb7014..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitContext.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.time.Duration; - -/** - * The InitContext is passed as a parameter to the {@link DigitalTwinBase#init(InitContext)} method of an initializing - * digital twin. - */ -public abstract class InitContext { - - /** - * Default constructor. - */ - public InitContext() {} - - /** - * Starts a new timer for the digital twin - * @param timerName the timer name - * @param interval the timer interval - * @param timerType the timer type - * @param timerHandler the time handler callback - * @param the type of the digital twin - * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} - * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. - */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); - - /** - * Retrieve a {@link SharedData} accessor for this model's shared data. - * @return a {@link SharedData} instance. - */ - public abstract SharedData getSharedModelData(); - - /** - * Retrieve a {@link SharedData} accessor for globally shared data. - * @return a {@link SharedData} instance. - */ - public abstract SharedData getSharedGlobalData(); - - /** - * Get the model-unique Id identifier of the initializing digital twin instance. - * @return the id identifier. - */ - public abstract String getId(); - - /** - * Get the Model identifier of the initializing digital twin instance. - * @return the model identifier. - */ - public abstract String getModel(); - -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java deleted file mode 100644 index 62ae315..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/InitSimulationContext.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.scaleoutsoftware.digitaltwin.core; - -import java.util.Date; - -/** - * The InitSimulationContext is passed as a parameter to the {@link SimulationProcessor#onInitSimulation(InitSimulationContext, DigitalTwinBase, Date)} method of - * digital twin instance when a simulation is initializing. - */ -public interface InitSimulationContext { - /** - * Retrieve a {@link SharedData} accessor for this model's shared data. - * @return a {@link SharedData} instance. - */ - public abstract SharedData getSharedModelData(); - - /** - * Retrieve a {@link SharedData} accessor for globally shared data. - * @return a {@link SharedData} instance. - */ - public abstract SharedData getSharedGlobalData(); -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java deleted file mode 100644 index 1e89eed..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageFactory.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Message list factory retrieves message lists for a MessageProcessor - */ -public interface MessageFactory { - - /** - * Returns all incoming messages - * @param the type of incoming messages - * @return an iterable of incoming messages - */ - Iterable getIncomingMessages(); -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java deleted file mode 100644 index a608741..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessor.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.io.Serializable; - -/** - * Processes messages for a real-time digital twin. - * @param the real type of the DigitalTwinBase - * @param the type of messages processed by the real-time digital twin - */ -public abstract class MessageProcessor extends MessageProcessorBase implements Serializable { - - /** - * Default constructor. - */ - public MessageProcessor() {} - - /** - * Processes a set of incoming messages and determines whether to update the real-time digital twin. - * @param context optional context for processing. - * @param stateObject the state object. - * @param incomingMessages the incoming messages. - * @return processing results for updating the state object. - * @throws Exception if an exception occurs during processing - */ - public abstract ProcessingResult processMessages(ProcessingContext context, T stateObject, Iterable incomingMessages) throws Exception; - - /** - * Helper method to ensure proper typing for user methods. - * @param context the processing context. - * @param twin the digital twin object. - * @param factory the message list factory. - * @return the implementing class's processing result. - * @throws Exception if an exception occurs during processing. - */ - @Override - public ProcessingResult processMessages(ProcessingContext context, T twin, MessageFactory factory) throws Exception { - Iterable incoming = factory.getIncomingMessages(); - return this.processMessages(context, twin, incoming); - } -} - diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java deleted file mode 100644 index befa76d..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/MessageProcessorBase.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Base class for the MessageProcessor to help with typing. - * @param the type of the DigitalTwin - */ -public abstract class MessageProcessorBase { - - /** - * Default constructor. - */ - public MessageProcessorBase() {} - - /** - * Helper method to ensure proper typing for the user methods. - * @param context the processing context - * @param twin the real-time digital twin instance - * @param messageListFactory the message list factory - * @return the implementing class's processing result - * @throws Exception if an exception occurs during processing - */ - public abstract ProcessingResult processMessages(ProcessingContext context, T twin, MessageFactory messageListFactory) throws Exception; -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java deleted file mode 100644 index 970ab1a..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ModelSchema.java +++ /dev/null @@ -1,785 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.util.List; - -/** - * The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - * digital twin model to the real-time digital twin cloud service. - */ -public class ModelSchema { - private final String modelType; - private final String messageProcessorType; - private final String simulationProcessorType; - private final String messageType; - private final String assemblyName; - private final String entryPoint; - private final String azureDigitalTwinModelName; - private final String persistenceProvider; - private final boolean enablePersistence; - private final boolean enableSimulationSupport; - private final boolean enableMessageRecording; - private final List alertProviders; - - private ModelSchema() { - modelType = messageProcessorType = simulationProcessorType = messageType = assemblyName = entryPoint = azureDigitalTwinModelName = persistenceProvider = null; - enablePersistence = false; - enableSimulationSupport = false; - enableMessageRecording = false; - alertProviders = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, and a message class. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = false; - persistenceProvider = null; - } - - /** - * Model schema with a defined entry point. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param ep the invocation grid entry point. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String ep) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = false; - persistenceProvider = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, and a message class. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = emr; - persistenceProvider = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, and a message class. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param ep the invocation grid entry point. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String ep, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - alertProviders = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = emr; - persistenceProvider = null; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - enableMessageRecording = false; - persistenceProvider = null; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = false; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param ep the invocation grid entry point. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = false; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param alertingProviders the alerting provider configurations. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = emr; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param spClass the simulation processor class implementation. - * @param alertingProviders the alerting provider configurations. - * @param ep the invocation grid entry point. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String spClass, - String ep, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) || - (spClass == null || spClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass), - (spClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = spClass; - enableSimulationSupport = true; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - azureDigitalTwinModelName = null; - enablePersistence = false; - persistenceProvider = null; - enableMessageRecording = emr; - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - enableMessageRecording = false; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - case CosmosDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, and - * alert provider configurations. - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = null; - enableSimulationSupport = false; - messageType = msgClass; - enableMessageRecording = emr; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, - * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - * and an alert provider configuration. - * - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param simulationProcessorClass the simulation processor class implementation. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = simulationProcessorClass; - enableSimulationSupport = true; - enableMessageRecording = false; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, - * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - * and an alert provider configuration. - * - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param simulationProcessorClass the simulation processor class implementation. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - PersistenceProviderType persistenceType, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = simulationProcessorClass; - enableSimulationSupport = true; - enableMessageRecording = emr; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = null; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - case CosmosDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Creates a model schema from a digital twin class, a message processor class, a message class, - * a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - * and an alert provider configuration. - * - * @param dtClass the digital twin class implementation. - * @param mpClass the message processor class implementation. - * @param msgClass a JSON serializable message class. - * @param simulationProcessorClass the simulation processor class implementation. - * @param adtName the Azure Digital Twin model name. - * @param persistenceType the persistence provider type. - * @param alertingProviders the alerting provider configurations. - * @param ep the invocation grid entry point. - * @param emr enable message recording for this model. - */ - public ModelSchema( - String dtClass, - String mpClass, - String msgClass, - String simulationProcessorClass, - String adtName, - String ep, - PersistenceProviderType persistenceType, - List alertingProviders, - boolean emr) { - if( (dtClass == null || dtClass.isEmpty()) || - (mpClass == null || mpClass.isEmpty()) || - (msgClass == null || msgClass.isEmpty()) - ) { - throw new IllegalArgumentException(String.format("Expected value for dtClass, mpClass, and msgClass; actual values: %s, %s, %s", - (dtClass == null ? "null dtClass" : dtClass), - (mpClass == null ? "null mpClass" : mpClass), - (msgClass == null ? "null mpClass" : msgClass) - )); - } - modelType = dtClass; - messageProcessorType = mpClass; - simulationProcessorType = simulationProcessorClass; - enableSimulationSupport = true; - enableMessageRecording = emr; - messageType = msgClass; - assemblyName = "NOT_USED_BY_JAVA_MODELS"; - entryPoint = ep; - persistenceProvider = persistenceType.name(); - switch (persistenceType) { - case AzureDigitalTwinsService: - azureDigitalTwinModelName = adtName; - enablePersistence = true; - break; - case SQLite: - case SQLServer: - case DynamoDb: - case CosmosDb: - enablePersistence = true; - azureDigitalTwinModelName = null; - break; - default: - azureDigitalTwinModelName = null; - enablePersistence = false; - break; - } - alertProviders = alertingProviders; - } - - /** - * Retrieve the digital twin model type (a {@link DigitalTwinBase} implementation). - * @return the model type. - */ - public String getModelType() { - return modelType; - } - - /** - * Retrieve the message type (JSON serializable message implementation). - * @return the message type. - */ - public String getMessageType() { - return messageType; - } - - /** - * Retrieve the message processor type (a {@link MessageProcessor} implementation). - * @return the message processor type. - */ - public String getMessageProcessorType() { - return messageProcessorType; - } - - /** - * Retrieve the simulation processor type (a {@link SimulationProcessor} implementation). - * @return the simulation processor type. - */ - public String getSimulationProcessorType() { - return simulationProcessorType; - } - - /** - * NOT USED BY JAVA MODEL SCHEMA - * @return NOT USED BY JAVA MODEL SCHEMA - */ - public String getAssemblyName() { - return assemblyName; - } - - /** - * Retrieve the alert provider configurations. - * @return the alert provider configurations. - */ - public List getAlertProviders() {return alertProviders; } - - /** - * Retrieve the Azure Digital Twin model name. - * @return the Azure Digital Twin model name. - */ - public String getAzureDigitalTwinModelName() { - return azureDigitalTwinModelName; - } - - /** - * Retrieve persistence status. True if persistence is enabled, false otherwise. - * @return True if persistence is enabled, false otherwise. - */ - public boolean persistenceEnabled() { return enablePersistence; } - - /** - * Retrieve simulation support enabled status. True if simulation support is enabled, false otherwise. - * @return True if simulation support is enabled, false otherwise. - */ - public boolean simulationSupportEnabled() {return enableSimulationSupport;} - - /** - * Retrieve the persistence provider type. - * @return the persistence provider type. - */ - public PersistenceProviderType getPersistenceProvider() { return PersistenceProviderType.fromString(persistenceProvider); } - - /** - * Retrieves the message recording enabled status. True if this model should persist messages when message recording is active, - * false otherwise. - * @return True if message recording is enabled, false otherwise. - */ - public boolean messageRecordingEnabled() { - return enableMessageRecording; - } - - /** - * Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching. - * @return the entry point for launching. - */ - public String getEntryPoint() { - return entryPoint; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java deleted file mode 100644 index 434bf75..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProvider.java +++ /dev/null @@ -1,162 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.CompletableFuture; - -/** - * An interface that can be used for persisting/retrieving the state of real-time digital twins. - */ -public interface PersistenceProvider { - - /** - * Returns true if this PersistenceProvider is active, false otherwise. - * @return true if this PersistenceProvider is active, false otherwise. - */ - public abstract boolean isActive(); - - /** - * Retrieves this persistence providers type. Currently supported provider types: AzureDigitalTwins. - * @return the persistence provider type. - */ - public PersistenceProviderType getProviderType(); - - /** - * Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist. - * @param containerName the container name. - * @return a future that will return a list of instances. - */ - public CompletableFuture> getInstanceIdsAsync(String containerName); - - /** - * Retrieves the instance IDs stored in a container, or an empty list if no instances exist. - * @param containerName the container name. - * @return a list of instances. - */ - public List getInstanceIds(String containerName); - - /** - * Retrieves a future that when complete will return an instance or null if it doesn't exist. - * @param containerName the container name. - * @param instanceId the instance identifier. - * @return a future that will return an instance or null. - */ - public CompletableFuture getInstanceAsync(String containerName, String instanceId); - - /** - * Retrieves an instance or null if it doesn't exist. - * @param containerName the container name - * @param instanceId the instance identifier - * @return the instance or null. - */ - public String getInstance(String containerName, String instanceId); - - /** - * Retrieves a future that will return a map of property names to property, or an empty map. - * @param containerName the container name. - * @return a future that will return a map of property names to property types. - */ - public CompletableFuture> getPropertyMapAsync(String containerName); - - /** - * Retrieves a map of property names to property types, or an empty map. - * @param containerName the container name. - * @return a map of property names to property types. - */ - public Map getPropertyMap(String containerName); - - /** - * Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated. - * Updates a property for the provided instance id in the provided container specified by the property name and property value. - * @param containerName the container name. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param propertyValue the property value. - * @return a future that will complete exceptionally or return void. - */ - public CompletableFuture updatePropertyAsync(String containerName, String instanceId, String propertyName, Object propertyValue); - - /** - * Updates a property for the provided instance id in the provided container specified by the property name and property value. - * @param containerName the container name. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param propertyValue the property value. - */ - public void updateProperty(String containerName, String instanceId, String propertyName, Object propertyValue); - - /** - * Retrieves a future that will return a property or null if the property does not exist. - * @param containerName the container name. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param clazz the class representing the property. - * @param the type of the property to return - * @return the property or null if the property does not exist. - */ - public CompletableFuture getPropertyAsync(String containerName, String instanceId, String propertyName, Class clazz); - - /** - * Retrieves a property or null if the property does not exist. - * @param containerName the container name. - * @param instanceId the instance id. - * @param propertyName the property name - * @param clazz the class representing the property. - * @param the type of the property to return. - * @return the property or null if the property does not exist. - */ - public T getProperty(String containerName, String instanceId, String propertyName, Class clazz); - - /** - * Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated. - * Updates a RTDT property for the provided instance id specified by the property name and property value. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param propertyValue the property value. - * @return a future that will complete exceptionally or return void. - */ - public CompletableFuture updateRtdtPropertyAsync(String instanceId, String propertyName, Object propertyValue); - - /** - * Updates a RTDT property for the provided instance id specified by the property name and property value. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param propertyValue the property value. - */ - public void updateRtdtProperty(String instanceId, String propertyName, Object propertyValue); - - /** - * Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param clazz the class of the property type - * @param the type of the property to return. - * @return a future that will return a property value for a RTDT instance. - */ - public CompletableFuture getRtdtPropertyAsync(String instanceId, String propertyName, Class clazz); - - /** - * Retrieves a property for a RTDT instance or null if the property does not exist. - * @param instanceId the instance id. - * @param propertyName the property name. - * @param clazz the class of the property type. - * @param the type of the property to return. - * @return the property value. - */ - public T getRtdtProperty(String instanceId, String propertyName, Class clazz); -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java deleted file mode 100644 index ce9eb88..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/PersistenceProviderType.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.io.Serializable; - -/** - * Available {@link PersistenceProvider} types. - */ -public enum PersistenceProviderType implements Serializable { - - /** - * Enum for the Azure Digital Twin service. - */ - AzureDigitalTwinsService("AzureDigitalTwinsService", 1), - /** - * Enum for CosmosDB - */ - CosmosDb("Azure Cosmos DB", 6), - - /** - * Enum for DynamoDB - */ - DynamoDb("DynamoDB", 5), - /** - * Enum for SQLite - */ - SQLite("SQLite", 4), - /** - * Enum for SQLServer - */ - SQLServer("SQLServer", 3), - - /** - * Enum for an unconfigured PersistenceProvider - */ - Unconfigured("", 0); - - private final String _name; - private final int _value; - PersistenceProviderType(String name, int ordinal) { - _name = name; - _value = ordinal; - } - - - /** - * Retrieve the name of the persistence provider type. - * @return the name of the persistence provider type. - */ - public String getName() { - return _name; - } - - /** - * Retrieve the ordinal value (used by the DTBuidler service). - * @return the ordinal value. - */ - public int getServiceOrdinalValue() { - return _value; - } - - /** - * Return the PersistenceProviderType from a string value. We do not rely on Java's naming - * because the string values need to be cross-platform and the names may be different in each language. - * @param name the enums name. - * @return the associated PersistenceProviderType, or null if no association exists. - */ - public static PersistenceProviderType fromString(String name) { - if(name != null && !name.isEmpty() && !name.isBlank()) { - switch(name) { - case "AzureDigitalTwinsService": - return AzureDigitalTwinsService; - case "SQLite": - return SQLite; - case "SQLServer": - return SQLServer; - case "DynamoDB": - return DynamoDb; - case "Azure Cosmos DB": - return CosmosDb; - default: - return null; - } - } else { - return null; - } - } - - /** - * Return the PersistenceProviderType from an ordinal value. We do not rely on Java's ordering - * because the ordinal values need to be cross-platform, and the values may be ordered differently. - * @param ordinal the enums ordinal value. - * @return the associated PersistenceProviderType, or null if no association exists. - */ - public static PersistenceProviderType fromOrdinal(int ordinal) { - switch(ordinal) { - case 1: - return AzureDigitalTwinsService; - case 3: - return SQLServer; - case 4: - return SQLite; - case 5: - return DynamoDb; - case 6: - return CosmosDb; - default: - return null; - } - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java deleted file mode 100644 index 2af1dc8..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingContext.java +++ /dev/null @@ -1,243 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.io.Serializable; -import java.time.Duration; -import java.util.Date; -import java.util.List; -import java.util.logging.Level; - -/** - * Context object that allows the user to send a message to a DataSource. - */ -public abstract class ProcessingContext implements Serializable { - - /** - * Default constructor. - */ - public ProcessingContext() {} - - /** - *

                - * Sends a message to a data source. This will route messages through the connector back to the data source. - *

                - * - *

                - * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - * of the {@link MessageProcessor}. - *

                - * - * @param payload the message (as a serialized JSON string) - * @return the sending result - */ - public abstract SendingResult sendToDataSource(byte[] payload); - - /** - *

                - * Sends a message to a data source. This will route messages through the connector back to the data source. - *

                - * - *

                - * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - * of the {@link MessageProcessor}. - *

                - * - * @param jsonSerializableMessage a JSON serializable message. - * @return the sending result - */ - public abstract SendingResult sendToDataSource(Object jsonSerializableMessage); - - /** - *

                - * Sends a list of messages to a data source. This will route messages through the connector back to the data source. - *

                - * - *

                - * if the datasource is simulation instance, then the message will be sent to the simulation model's implementation - * of the {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)}. - *

                - * - * @param jsonSerializableMessages a list of JSON serializable messages. - * @return the sending result - */ - public abstract SendingResult sendToDataSource(List jsonSerializableMessages); - - /** - *

                - * This method sends a serialized JSON message to a real-time digital twin - *

                - * - *

                - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

                - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param payload the serialized JSON message - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, byte[] payload); - - /** - *

                - * This method sends a serialized JSON message to a real-time digital twin - *

                - * - *

                - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

                - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param jsonSerializableMessage a JSON serializable message object - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage); - - /** - *

                - * This method sends a JSON message to a real-time digital twin - *

                - * - *

                - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

                - * - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param payload the JSON message - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, String payload); - - /** - *

                - * This method sends a list of serialized JSON message to a real-time digital twin - *

                - * - *

                - * Note, the message contents must be serialized so that the registered message type - * of the digital twin model will be sufficient to deserialize the message. - *

                - * - * @param model the model of the digital twin - * @param id the id of the digital twin - * @param payload the JSON message - * @return the sending result - */ - public abstract SendingResult sendToDigitalTwin(String model, String id, List payload); - - - /** - *

                - * This method sends an alert message to supported systems. - *

                - * - *

                - * When a model is deployed, an optional alerting provider configuration can be supplied. The provider name corresponds - * to the name of the configured alerting provider. For example, if an alerting provider configuration is called - * "SREPod1", then the processing context will send an alert message to the alerting provider configured with the name - * "SREPod1". - *

                - * - *

                - * If the message cannot be sent then {@link SendingResult#NotHandled} will be returned. If the message is sent - * and in process of sending then {@link SendingResult#Enqueued} will be returned. Once the message is successfully sent - * then the returned enum will be changed to {@link SendingResult#Handled}. - *

                - * @param alertingProviderName the alerting provider name. Note, must match a valid configuration. - * @param alert the alert message. - * @return the sending result. - */ - public abstract SendingResult sendAlert(String alertingProviderName, AlertMessage alert); - - /** - * Returns the configured persistence provider or null if no persistence provider configuration can be found. - * @return a PersistenceProvider . - */ - public abstract PersistenceProvider getPersistenceProvider(); - - /** - * Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID) - * @return the digital twin id - */ - public abstract String getDataSourceId(); - - /** - * Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin) - * @return the digital twin model - */ - public abstract String getDigitalTwinModel(); - - /** - * Logs a message to the real-time digital twin cloud service. - * - * Note: the only supported severity levels are: INFO, WARN, and SEVERE - * - * @param severity the severity of the log message - * @param message the message to log - */ - public abstract void logMessage(Level severity, String message); - - /** - * Starts a new timer for the digital twin - * @param timerName the timer name - * @param interval the timer interval - * @param timerType the timer type - * @param timerHandler the time handler callback - * @param the type of the digital twin - * @return returns {@link TimerActionResult#Success} if the timer was started, {@link TimerActionResult#FailedTooManyTimers} - * if too many timers exist, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. - */ - public abstract TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler); - - /** - * Stops the specified timer. - * @param timerName the timer name. - * @return returns {@link TimerActionResult#Success} if the timer was stopped, {@link TimerActionResult#FailedNoSuchTimer} - * if no timer exists with that name, or {@link TimerActionResult#FailedInternalError} if an unexpected error occurs. - */ - public abstract TimerActionResult stopTimer(String timerName); - - /** - * Retrieves the current time. If the model (simulation or real-time) is running inside of a simulation then the - * simulation time will be returned. - * - * @return The current time (real time, or simulation if running under simulation). - */ - public abstract Date getCurrentTime(); - - /** - * Retrieve the running {@link SimulationController} or null if no simulation is running. - * @return the {@link SimulationController} or null if no simulation is running. - */ - public abstract SimulationController getSimulationController(); - - /** - * Retrieve a {@link SharedData} accessor for this model's shared data. - * @return a {@link SharedData} instance. - */ - public abstract SharedData getSharedModelData(); - - /** - * Retrieve a {@link SharedData} accessor for globally shared data. - * @return a {@link SharedData} instance. - */ - public abstract SharedData getSharedGlobalData(); - -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java deleted file mode 100644 index 279f0fa..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/ProcessingResult.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * The result from a message processor which indicates to update the state object or to ignore - */ -public enum ProcessingResult { - /** - * Update the digital twin. - */ - UpdateDigitalTwin, - /** - * Do not update the digital twin. - */ - NoUpdate -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java deleted file mode 100644 index 9b3731b..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SendingResult.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Marks a message as Delivered or not Delivered - */ -public enum SendingResult { - /** - * Handled indicates that a message was successfully sent and processed - */ - Handled, - /** - * Enqueued indicates that a message was successfully formed and then sent to an internal messaging service - */ - Enqueued, - /** - * NotHandled indicates that the message was not handled. This can occur if an exception occurs - * in the message processor or if internal messaging service reached capacity. - */ - NotHandled -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java deleted file mode 100644 index 5c1392d..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SharedData.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * SharedData is used to access a model's, or globally, shared cache. - */ -public interface SharedData { - /** - * Retrieves an existing object from the cache. - * @param key the key mapping to a value. - * @return A cache result. - */ - public CacheResult get(String key); - - /** - * Put a new key/value mapping into the cache. - * @param key the key mapping to a value. - * @param value the value. - * @return a cache result. - */ - public CacheResult put(String key, byte[] value); - - /** - * Remove a key/value mapping from the cache. - * @param key the key mapping to a value. - * @return a cache result. - */ - public CacheResult remove(String key); - - /** - * Clear the shared data cache. - * @return a cache result. - */ - public CacheResult clear(); -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java deleted file mode 100644 index 314f6eb..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationController.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.time.Duration; -import java.util.Date; - -/** - * The SimulationController interface is used to interact with the running DigitalTwin simulation. - */ -public interface SimulationController { - - /** - *

                - * Retrieves the current simulation time increment. - *

                - * @return the simulation time increment. - */ - Duration getSimulationTimeIncrement(); - - /** - * - */ - - /** - *

                - * Retrieves the simulation start time. - *

                - * @return the simulation start time. - */ - Date getSimulationStartTime(); - - /** - *

                - * Delay simulation processing for this DigitalTwin instance for a duration of time. - *

                - * - *

                - * Simulation processing will be delayed for the duration specified relative to the current simulation time. - *

                - * - *

                - * Examples: - *

                - * - *

                - * at a current simulation time of 10, an interval of 20, and a delay of 40 -- the instance would - * skip one cycle of processing and be processed at simulation time 50. - *

                - * - *

                - * at a current simulation time of 10, an interval of 20, and a delay of 30 -- the instance would - * skip one cycle of processing and be processed at simulation time 50. - *

                - * - *

                - * at a current simulation time of 10, an interval of 20, and a delay of 50 -- the instance would - * skip two cycles of processing and be processed at simulation time 70. - *

                - * - * @param duration the duration to delay. - * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} - * if the delay was not processed. - */ - SendingResult delay(Duration duration); - - /** - *

                - * Delay simulation processing for this DigitalTwin instance, indefinitely. - *

                - * - *

                - * Simulation processing will be delayed until this instance is run with {@link SimulationController#runThisInstance()}. - *

                - * - * @return {@link SendingResult#Handled} if the delay was processed or {@link SendingResult#NotHandled} - * if the delay was not processed. - */ - SendingResult delayIndefinitely(); - - /** - *

                - * Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin - * models {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} method. - *

                - * @param modelName the model to send the messages too. - * @param telemetryMessage a blob representing a JSON serialized messages. - * @return {@link SendingResult#Handled} if the messages were processed, {@link SendingResult#Enqueued} if - * the messages are in process of being handled, or {@link SendingResult#NotHandled} if the delay was not processed. - */ - SendingResult emitTelemetry(String modelName, byte[] telemetryMessage); - - /** - *

                - * Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin - * models {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} method. - *

                - * @param modelName the model to send the messages too. - * @param jsonSerializableMessage an object message that is JSON serializable. - * @return {@link SendingResult#Handled} if the messages were processed, {@link SendingResult#Enqueued} if - * the messages are in process of being handled, or {@link SendingResult#NotHandled} if the delay was not processed. - */ - SendingResult emitTelemetry(String modelName, Object jsonSerializableMessage); - - /** - * Create a new digital twin instance for simulation processing. - * @param modelName the model name. - * @param instanceId the instance id. - * @param base the instance to create. - * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance - * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. - * @param the type of the digital twin to create. - */ - SendingResult createInstance(String modelName, String instanceId, T base); - - /** - * Create a new digital twin instance for simulation processing from a persistence store. - * - * The twin instance will be loaded via model name and id from a persistence store. - * - * If no instance can be found, then an exception will be thrown and no instance will be created. - * - * @param model The model name. - * @param id the instance id. - * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance - * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. - */ - SendingResult createInstanceFromPersistenceStore(String model, String id); - - /** - * The twin instance will be loaded via model name and id from a persistence store. - * - * The twin instance will be loaded via model name and id from a persistence store. - * - * If no instance can be found, then the default parameter instance will be used. - * - * @param model the model name. - * @param id the instance id. - * @param def the default instance to create. - * @return {@link SendingResult#Handled} if the instance was created, {@link SendingResult#Enqueued} if the instance - * * is in process of being created, or {@link SendingResult#NotHandled} if the instance could not be created. - * @param the type of the digital twin to create. - */ - SendingResult createInstanceFromPersistenceStore(String model, String id, T def); - - /** - * Delete and remove a digital twin instance from simulation processing. - * @param modelName the model name. - * @param instanceId the instance id. - * @return {@link SendingResult#Handled} if the instance was deleted, {@link SendingResult#Enqueued} if the instance - * is in process of being deleted, or {@link SendingResult#NotHandled} if the instance could not be deleted. - */ - SendingResult deleteInstance(String modelName, String instanceId); - - /** - * Delete and remove this digital twin instance from simulation processing. - * @return this local request will always return {@link SendingResult#Handled}. - */ - SendingResult deleteThisInstance(); - - /** - * Run this instance during this simulation step. The instance will be run using the models {@link SimulationProcessor#processModel(ProcessingContext, DigitalTwinBase, Date)} - * implementation. - * - * This will cause the simulation sub-system to run this instance regardless of the instances current - * {@link DigitalTwinBase#NextSimulationTime}. - */ - void runThisInstance(); - - /** - * Stop the simulation. - * @return a {@link SimulationStatus#InstanceRequestedStop}. - */ - SimulationStatus stopSimulation(); - - -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java deleted file mode 100644 index a98d396..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationProcessor.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.io.Serializable; -import java.util.Date; - -/** - * Processes simulation events for a digital twin. - * @param the type of the digital twin. - */ -public abstract class SimulationProcessor implements Serializable { - - /** - * Default constructor. - */ - public SimulationProcessor() {} - - /** - * Processes simulation events for a real-time digital twin. - * @param context the processing context. - * @param instance the digital twin instance. - * @param epoch the current time of the simulation. - * @return {@link ProcessingResult#UpdateDigitalTwin} to update the digital twin, or - * {@link ProcessingResult#NoUpdate} to ignore the changes. - */ - public abstract ProcessingResult processModel(ProcessingContext context, T instance, Date epoch); - - /** - *

                - * Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. - *

                - * - *

                - * onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed - * between simulation runs. - *

                - *
                  - *
                • Set variables in global or shared data.
                • - *
                • Run a simulation.
                • - *
                • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
                • - *
                • Complete simulation and evaluate the result.
                • - *
                - * - * @param context The simulation init context. - * @param instance The digital twin instance. - * @param epoch the simulation start time. - * @return {@link ProcessingResult#UpdateDigitalTwin} or {@link ProcessingResult#NoUpdate}. Default behavior: {@link ProcessingResult#NoUpdate}. - */ - public ProcessingResult onInitSimulation(InitSimulationContext context, T instance, Date epoch) { - return ProcessingResult.NoUpdate; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java deleted file mode 100644 index 93f8ee4..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/SimulationStatus.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * The status of a simulation. - */ -public enum SimulationStatus { - /** - * The simulation is running. - */ - Running, - /** - * The simulation status is not set. - */ - NotSet, - /** - * The user requested a stop. - */ - UserRequested, - /** - * The simulation end time has been reached. - */ - EndTimeReached, - /** - * There is no remaining work for the simulation. - */ - NoRemainingWork, - /** - * A digital twin instance has requested the simulation to stop by calling {@link SimulationController#stopSimulation()} - */ - InstanceRequestedStop, - /** - * There was a runtime-change of simulation configuration. - */ - UnexpectedChangeInConfiguration; -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java deleted file mode 100644 index 852174e..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerActionResult.java +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * The result of a timer action. - */ -public enum TimerActionResult { - /** - * The operation completed successfully. - */ - Success(0), - - /** - * Failed to start a new timer due to reaching the limit for a number of active timers. - */ - FailedTooManyTimers(1), - - /** - * Failed to stop the existing timer, the timer is no longer active. - */ - FailedNoSuchTimer(2), - - /** - * Failed to start the timer, the timer with the specified name already exists. - */ - FailedTimerAlreadyExists(3), - - /** - * Failed to start/stop timer due to an internal error. - */ - FailedInternalError(4); - - private final int _value; - private TimerActionResult(int val) { - _value = val; - } - - /** - * Convert an ordinal into a {@link TimerActionResult}. - * - * 0 = {@link TimerActionResult#Success}, 1 = {@link TimerActionResult#FailedTooManyTimers}, - * 2 = {@link TimerActionResult#FailedNoSuchTimer}, 3 = {@link TimerActionResult#FailedTimerAlreadyExists}, - * 4 = {@link TimerActionResult#FailedInternalError} - * @param val the ordinal value. - * @return the associated {@link TimerActionResult} or throws an IllegalArgumentException for an unexpected - * ordinal value. - */ - public static TimerActionResult fromOrdinal(int val) { - switch (val) { - case 0: - return Success; - case 1: - return FailedTooManyTimers; - case 2: - return FailedNoSuchTimer; - case 3: - return FailedTimerAlreadyExists; - case 4: - return FailedInternalError; - default: - throw new IllegalArgumentException("No known TimerActionResult from value: " + val); - - } - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java deleted file mode 100644 index 6380324..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerHandler.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Callback to a handle a timer message for a {@link DigitalTwinBase}. - * @param the type of the {@link DigitalTwinBase}. - */ -public interface TimerHandler { - - /** - * Callback to handle a timer message. - * @param timerName the timer's unique identifier. - * @param instance the digital twin instance. - * @param ctx the processing context. - * @return {@link ProcessingResult#UpdateDigitalTwin} to update the digital twin instance or - * {@link ProcessingResult#NoUpdate} to leave the instance state as is. - */ - public ProcessingResult onTimedMessage(String timerName, T instance, ProcessingContext ctx); -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java deleted file mode 100644 index e9c151d..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerMetadata.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -import java.lang.reflect.InvocationTargetException; -import java.time.Duration; - -/** - * Metadata class for a timer. - * @param the type of the {@link DigitalTwinBase} implementation. - */ -public class TimerMetadata { - final String timerHandler; - final TimerType timerType; - final long timerIntervalMs; - final int timerId; - - /** - * Constructs a timer metadata. - * @param handler the timer handler. - * @param timerType the timer type. - * @param timerIntervalMs the timer interval. - * @param timerIdx the timer index. - */ - public TimerMetadata(TimerHandler handler, TimerType timerType, long timerIntervalMs, int timerIdx) { - this.timerHandler = handler.getClass().getName(); - this.timerType = timerType; - this.timerIntervalMs = timerIntervalMs; - this.timerId = timerIdx; - } - - /** - * Retrieves the timer handler class name. - * @return the timer handler class name. - */ - public String getTimerHandlerClass() { - return timerHandler; - } - - /** - * Retrieves the timer type. - * @return the timer type. - */ - public TimerType getTimerType() { - return timerType; - } - - /** - * Retrieves the timer interval. - * @return the timer interval. - */ - public long getTimerIntervalMs() { - return timerIntervalMs; - } - - /** - * Retrieves the timer ID. - * @return the timer ID. - */ - public int getTimerId() { - return timerId; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java deleted file mode 100644 index 66626e1..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/TimerType.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.core; - -/** - * Enum representation of the available timer types - */ -public enum TimerType { - /** - * This timer should reoccur on a schedule. - */ - Recurring, - /** - * This timer should trigger one time. - */ - OneTime -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java deleted file mode 100644 index 4ccf77f..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/core/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * Digital twin model API - Create a digital twin model. - */ -package com.scaleoutsoftware.digitaltwin.core; - diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java deleted file mode 100644 index 5948de6..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Constants.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -class Constants { - public static final int MAX_TIMER_COUNT = 5; - /** - * - * Returns a hash that is suitable for inserting an object into a hash-based collection. - *

                - * ----------------------------------------------------------------------------- - * MurmurHash3 was written by Austin Appleby, and is placed in the public - * domain. The author hereby disclaims copyright to this source code. - * - * Note - The x86 and x64 versions do _not_ produce the same results, as the - * algorithms are optimized for their respective platforms. You can still - * compile and run any of them on any platform, but your performance with the - * non-native version will be less than optimal. - * Original code from: - * https://github.com/aappleby/smhasher/blob/master/src/MurmurHash3.cpp - * ----------------------------------------------------------------------------- - * - * This implementation is tweaked to initialize with a hard-coded seed and to return a long instead of a - * 32-bit unsigned integer (since Java doesn't easily support unsigned integers). - * @param data The byte array to be hashed. - * @return Hash code for the array, with values ranging from 0 to 4,294,967,295. - */ - static long getHash(byte[] data) { - if(data == null) { - throw new IllegalArgumentException("Hash data was null."); - } - - final int seed = 947203; // Scaleout's implementation-specific seed. - final int c1 = 0xcc9e2d51; - final int c2 = 0x1b873593; - - int len = data.length; - int h1 = seed; - int roundedEnd = len & 0xfffffffc; // round down to 4 byte block - - for (int i = 0; i < roundedEnd; i += 4) { - // little endian load order - int k1 = (data[i] & 0xff) | ((data[i + 1] & 0xff) << 8) | ((data[i + 2] & 0xff) << 16) | (data[i + 3] << 24); - k1 *= c1; - k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15); - k1 *= c2; - - h1 ^= k1; - h1 = (h1 << 13) | (h1 >>> 19); // ROTL32(h1,13); - h1 = h1 * 5 + 0xe6546b64; - } - - // tail (leftover bytes that didn't fit into a 4-byte block) - int k1 = 0; - - switch (len & 0x03) { - case 3: - k1 = (data[roundedEnd + 2] & 0xff) << 16; - // fallthrough - case 2: - k1 |= (data[roundedEnd + 1] & 0xff) << 8; - // fallthrough - case 1: - k1 |= (data[roundedEnd] & 0xff); - k1 *= c1; - k1 = (k1 << 15) | (k1 >>> 17); // ROTL32(k1,15); - k1 *= c2; - h1 ^= k1; - } - - // finalization - h1 ^= len; - - // fmix(h1); - h1 ^= h1 >>> 16; - h1 *= 0x85ebca6b; - h1 ^= h1 >>> 13; - h1 *= 0xc2b2ae35; - h1 ^= h1 >>> 16; - - // Other languages want to represent the hash as an unsigned int, but java doesn't easily have - // unsigned types. So we move the signed integer's bits into an "unsigned" long, which - // is big enough to hold all the positive values of an unsigned int. - return h1 & 0x00000000ffffffffL; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java deleted file mode 100644 index 4708e20..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/LogMessage.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import java.util.logging.Level; - -/** - * A messaged that was logged by a digital twin. - */ -public class LogMessage { - private String _message; - private Level _severity; - private long _timestamp; - LogMessage(Level severity, String message) { - _message = message; - _severity = severity; - _timestamp = System.currentTimeMillis(); - } - - /** - * Retrieve the string message associated with this log message. - * @return the message. - */ - public String getMessage() { - return _message; - } - - /** - * Retrieve the severity of this log message. - * @return the severity. - */ - public Level getSeverity() { - return _severity; - } - - /** - * Retrieve the timestamp from when this message was generated. - * @return the timestamp. - */ - public long getTimestamp() { - return _timestamp; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java deleted file mode 100644 index 0dd7e68..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/ProxyState.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -enum ProxyState { - // The proxy has an unspecified state. - Unspecified, - // The proxy is active. - Active, - // the proxy is removed - Removed -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java deleted file mode 100644 index 686936e..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEvent.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; - -import java.util.Date; - -abstract class SimulationEvent implements Comparable { - protected String _model; - protected String _id; - protected long _priority; - protected long _nextSimulationTime; - - SimulationEvent(String model, String id, long priority) { - _model = model; - _id = id; - _priority = priority; - } - - abstract SimulationEventResult processSimulationEvent(ProcessingContext context, Date currentTime) throws WorkbenchException; - - abstract ProxyState getProxyState(); - - abstract void setProxyState(ProxyState newState); - - abstract void handleResetNextSimulationTime(); - - abstract void simulationInit(Date simulationStartTime); - - long getPriority() { - return _priority; - } - - void setPriority(long priority) { - _priority = priority; - } - - String getId() { - return _id; - } - - String getModel() {return _model;} - - void setNextSimulationTime(long nextSimulationTime) { - _nextSimulationTime = nextSimulationTime; - handleResetNextSimulationTime(); - } - - - - @Override - public int compareTo(SimulationEvent other) { - return Long.compare(this._priority, other._priority); - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java deleted file mode 100644 index f917da6..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -/** - * A simulation event result. - */ -public abstract class SimulationEventResult { -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java deleted file mode 100644 index 49f9b5d..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTimerImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; -import com.scaleoutsoftware.digitaltwin.core.ProcessingContext; -import com.scaleoutsoftware.digitaltwin.core.TimerHandler; - -import java.util.Date; - -class SimulationEventTimerImpl extends SimulationEvent { - TwinProxy _proxy; - TimerHandler _handler; - String _timerName; - - SimulationEventTimerImpl(String model, String id, long priority, String name, TwinProxy proxy, TimerHandler handler) { - super(model, id,priority); - _timerName = name; - _proxy = proxy; - _handler = handler; - - } - - @Override - SimulationEventResult processSimulationEvent(ProcessingContext context, Date currentTime) { - DigitalTwinBase base = _proxy.getInstance(); - _handler.onTimedMessage(_timerName, base, context); - _proxy.setInstance(base); - return new SimulationEventResult(){}; - } - - @Override - ProxyState getProxyState() { - return _proxy.getProxyState(); - } - - @Override - void setProxyState(ProxyState newState) { - _proxy.setProxyState(newState); - } - - @Override - void handleResetNextSimulationTime() { - } - - @Override - void simulationInit(Date simulationStartTime) { - - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java deleted file mode 100644 index 27e4147..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationEventTwinImpl.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.nio.charset.StandardCharsets; -import java.util.Date; -import java.util.Objects; - -class SimulationEventTwinImpl extends SimulationEvent { - SimulationProcessor _processor; - TwinProxy _proxy; - SharedData _modelSharedData; - SharedData _globalSharedData; - - SimulationEventTwinImpl(long priority, TwinProxy proxy, SimulationProcessor processor, SharedData modelSharedData, SharedData globalSharedData) { - super(proxy.getInstance().Model, proxy.getInstance().Id, priority); - _proxy = proxy; - _processor = processor; - _modelSharedData = modelSharedData; - _globalSharedData = globalSharedData; - } - - @Override - SimulationEventResult processSimulationEvent(ProcessingContext context, Date currentTime) throws WorkbenchException { - try { - DigitalTwinBase base = _proxy.getInstance(); - synchronized (_proxy) { - WorkbenchProcessingContext wpc = (WorkbenchProcessingContext)context; - wpc.resetInstance(base); - _processor.processModel(wpc, base, currentTime); - _proxy.setInstance(base); - } - } catch (Exception e) { - throw new WorkbenchException(e); - } - return new SimulationEventResult(){}; - } - - @Override - ProxyState getProxyState() { - return _proxy.getProxyState(); - } - - @Override - void setProxyState(ProxyState newState) { - _proxy.setProxyState(newState); - } - - @Override - void handleResetNextSimulationTime() { - DigitalTwinBase base = _proxy.getInstance(); - base.NextSimulationTime = _nextSimulationTime; - _proxy.setInstance(base); - } - - @Override - void simulationInit(Date simulationStartTime) { - InitSimulationContext context = new WorkbenchInitSimulationContext(_globalSharedData, _modelSharedData); - synchronized (_proxy) { - DigitalTwinBase base = _proxy.getInstance(); - _processor.onInitSimulation(context, base, simulationStartTime); - _proxy.setInstance(base); - } - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - SimulationEventTwinImpl that = (SimulationEventTwinImpl) o; - return this._proxy.getInstance().getId().compareTo(that._id) == 0 && this._proxy.getInstance().getModel().compareTo(that._model) == 0; - } - - @Override - public int hashCode() { - return (int)Constants.getHash(_id.getBytes(StandardCharsets.UTF_8)); - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java deleted file mode 100644 index fa46b98..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationScheduler.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.*; -import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicInteger; - -class SimulationScheduler { - static AtomicInteger PROCESSED = new AtomicInteger(0); - static AtomicInteger QUEUED = new AtomicInteger(0); - static AtomicInteger SENT = new AtomicInteger(0); - private final List _workers; - private final ExecutorService _simulationService; - private final String _modelName; - private final SimulationProcessor _simulationProcessor; - private final Logger _logger = LogManager.getLogger(SimulationScheduler.class); - private long _curSimulationTime; - private Date _simulationStartTime; - private boolean _isActive; - - - public SimulationScheduler(String modelName, - Class digitalTwinClass, - SimulationProcessor modelProcessor, - TwinExecutionEngine executor, - int numWorkers) { - _modelName = modelName; - _simulationProcessor = modelProcessor; - _workers = new ArrayList<>(numWorkers); - _simulationService = Executors.newFixedThreadPool(numWorkers, new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - Thread t = new Thread(r, "SimulationWorker"); - t.setName(t.getName()+"-"+t.getId()); - t.setDaemon(true); - return t; - } - }); - for(int i = 0; i < numWorkers; i++) { - _workers.add(new SimulationWorker(i, _modelName, _simulationProcessor, digitalTwinClass, executor, this)); - } - } - - // -------------- package private methods ---------------- - SimulationStep runSimulation(SimulationStepArgs runSimulationEventArgs) { - _logger.info("Received run simulation event with args: " + runSimulationEventArgs.getCurSimulationTime() + " iterationSize: " + runSimulationEventArgs.getIterationSize() + " flags: " + runSimulationEventArgs.getSimulationFlags() ); - long current = System.currentTimeMillis(); - SimulationStep ret; - _curSimulationTime = runSimulationEventArgs.getCurSimulationTime(); - - if (runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Stop) { - _logger.info("Stopping simulation; shutting down workers."); - for(SimulationWorker worker : _workers) { - worker.shutdown(); - } - return new SimulationStep(SimulationStatus.UserRequested,_curSimulationTime); - } if(runSimulationEventArgs.getSimulationFlags() == WorkbenchSimulationFlags.Start) { - _logger.info("Starting simulation; initializing instances."); - for(SimulationWorker worker : _workers) { - worker.initSimulation(new Date(runSimulationEventArgs.getCurSimulationTime())); - } - return new SimulationStep(SimulationStatus.Running,_curSimulationTime); - } else { - ret = runSimulationStep(runSimulationEventArgs); - } - - _logger.info(String.format("runSim complete in %s ms... returning next: %s", (System.currentTimeMillis()-current), ret)); - return ret; - } - - long getCurrentTime() { - if(_isActive) { - return _curSimulationTime; - } - return System.currentTimeMillis(); - } - - void setStatus(boolean active) { - _isActive = active; - } - - Date getSimulationStartTime() { - return _simulationStartTime; - } - - void setSimulationStartTime(Date simulationStartTime) { - _simulationStartTime = simulationStartTime; - } - - - - // -------------- private methods ---------------- - private SimulationStep runSimulationStep(SimulationStepArgs args) { - long currentTimeMs = System.currentTimeMillis(); - List> futures = new LinkedList<>(); - for(SimulationWorker worker : _workers) { - worker.reset(args); - futures.add(_simulationService.submit(worker)); - } - - SimulationStatus status = SimulationStatus.Running; - boolean workFound = false; - long next = -1; - long cur = Long.MAX_VALUE; - for(Future f : futures) { - try { - SimulationStep result = f.get(); - if(result.getStatus() == SimulationStatus.Running) { - workFound = true; - } - if(result.getStatus() != SimulationStatus.Running) { - status = result.getStatus(); - } - cur = result.getTime(); - if (cur != -1 && cur < next) { - _logger.info(String.format("future return is lower than next... cur: %s next: %s", cur, next)); - next = cur; - } else if (next == -1 && cur > -1) { - next = cur; - } - } catch (InterruptedException e) { - throw new RuntimeException(e); - } catch (ExecutionException e) { - throw new RuntimeException(e); - } - } - _logger.info(String.format("Simulation step complete in %s ms... returning next: %s", (System.currentTimeMillis()-currentTimeMs), next)); - - if(workFound && status == SimulationStatus.NoRemainingWork) status = SimulationStatus.Running; - return new SimulationStep(status, next); - } - - void addInstance(TwinProxy proxy) { - SimulationWorker worker = _workers.get(findSlotId(proxy.getInstance().getId())); - worker.addTwinToQueue(proxy); - } - - void addTimer(TwinProxy proxy, String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { - SimulationWorker worker = _workers.get(findSlotId(proxy.getInstance().getId())); - worker.addTimerToQueue(proxy, modelName, id, timerName, type, interval, handler); - } - void stopTimer(String modelName, String id, String timerName) { - SimulationWorker worker = _workers.get(findSlotId(id)); - worker.stopTimer(modelName, id, timerName); - } - - void runThisInstance(String model, String id) throws WorkbenchException { - SimulationWorker worker = _workers.get(findSlotId(id)); - worker.runThisInstance(model, id); - } - - private int findSlotId(String id) { - return (int)((Constants.getHash(id.getBytes(StandardCharsets.UTF_8))) % (long)_workers.size()); - } - - -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java deleted file mode 100644 index c2a6dba..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStep.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.SimulationStatus; - -/** - * The simulation step class encases the metadata for a completed interval of a simulation. - */ -public class SimulationStep { - private SimulationStatus _status; - private long _intervalTime; - - SimulationStep(SimulationStatus status, long intervalTime) { - _status = status; - _intervalTime = intervalTime; - } - - /** - * Retrieve the {@link SimulationStatus} of the simulation interval. - * @return the current simulation status. - */ - public SimulationStatus getStatus() { - return _status; - } - - /** - * Retrieve the time of the simulation interval. - * @return the simulation interval time. - */ - public long getTime() { - return _intervalTime; - } - - // merge two simulation steps - void merge(SimulationStep result) { - if(this._status == SimulationStatus.Running && result._status != SimulationStatus.Running) { - this._status = result._status; - } - if(this._intervalTime > result._intervalTime) { - this._intervalTime = result.getTime(); - } - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java deleted file mode 100644 index c65ad79..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationStepArgs.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -class SimulationStepArgs { - private long _curSimulationTime; - private long _interval; - private WorkbenchSimulationFlags _simulationFlags; - - SimulationStepArgs(long currentSimulationTime, long interval, WorkbenchSimulationFlags flags) { - _curSimulationTime = currentSimulationTime; - _interval = interval; - _simulationFlags = flags; - } - - long getCurSimulationTime() { - return _curSimulationTime; - } - - long getIterationSize() { - return _interval; - } - - WorkbenchSimulationFlags getSimulationFlags() { - return this._simulationFlags; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java deleted file mode 100644 index e09c0e7..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationTime.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import java.util.Date; - -class SimulationTime { - private long _currentSimulationEpochMs; - private long _simulationIntervalMs; - - public SimulationTime(long currentSimulationEpochMs, long intervalMs) { - _currentSimulationEpochMs = currentSimulationEpochMs; - _simulationIntervalMs = intervalMs; - } - - long getCurrentSimulationTime() { - return _currentSimulationEpochMs; - } - - long getNextSimulationTime() { - return _currentSimulationEpochMs + _simulationIntervalMs; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java deleted file mode 100644 index ebaa891..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/SimulationWorker.java +++ /dev/null @@ -1,229 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -import java.time.Duration; -import java.util.*; -import java.util.concurrent.Callable; -import java.util.concurrent.ConcurrentHashMap; -import java.util.function.Predicate; - -class SimulationWorker implements Callable { - private final Logger _logger = LogManager.getLogger(SimulationWorker.class); - private final PriorityQueue _timeOrderedQueue = new PriorityQueue<>(); - private final ConcurrentHashMap _timers = new ConcurrentHashMap<>(); - private final ConcurrentHashMap _events = new ConcurrentHashMap<>(); - private final int _slotId; - private final String _modelName; - private final SimulationProcessor _simulationProcessor; - private final TwinExecutionEngine _twinExecutionEngine; - private final SimulationScheduler _simulationScheduler; - private long _curSimulationTime; - private long _simulationInterval; - private long _nextSimulationTime; - private boolean _running; - - public SimulationWorker(int slotId, - String model, - SimulationProcessor modelProcessor, - Class digitalTwinClass, - TwinExecutionEngine engine, - SimulationScheduler scheduler) { - _slotId = slotId; - _modelName = model; - _simulationProcessor = modelProcessor; - _twinExecutionEngine = engine; - _simulationScheduler = scheduler; - } - - public void reset(SimulationStepArgs runSimulationEventArgs) { - _curSimulationTime = runSimulationEventArgs.getCurSimulationTime(); - _simulationInterval = runSimulationEventArgs.getIterationSize(); - _logger.info(String.format("Worker reset... cur: %s interval: %s", _curSimulationTime, _simulationInterval)); - } - - public void shutdown() { - _timeOrderedQueue.clear(); - _events.clear(); - _timers.clear(); - } - - public void addTwinToQueue(TwinProxy proxy) { - SimulationEvent event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName))); - _timeOrderedQueue.add(event); - _events.put(String.format("%s%s",event.getModel(),event.getId()), event); - } - - public void addTwinToQueue(SimulationEvent event) { - _timeOrderedQueue.add(event); - _events.put(String.format("%s%s",event.getModel(),event.getId()), event); - } - - public void addTimerToQueue(TwinProxy proxy, String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { - SimulationEvent event = new SimulationEventTimerImpl(modelName, id, interval.toMillis(), timerName, proxy, handler); - _timers.put(timerName, event); - _timeOrderedQueue.add(event); - _events.put(String.format("%s%s",event.getModel(),event.getId()), event); - } - - public void stopTimer(String model, String id, String timerName) { - SimulationEvent event = _timers.remove(String.format("%s%s%s",model, id,timerName)); - event.setProxyState(ProxyState.Removed); - _events.remove(String.format("%s%s",event.getModel(),event.getId())); - } - - void initSimulation(Date startTime) { - for(SimulationEvent event : _events.values()) { - event.simulationInit(startTime); - } - } - - public void runThisInstance(String model, String id) throws WorkbenchException { - SimulationEvent event = _events.remove(String.format("%s%s",model,id)); - if(event == null) { - TwinProxy proxy = _twinExecutionEngine.getTwinProxy(model, id); - event = new SimulationEventTwinImpl(_curSimulationTime, proxy, _simulationProcessor, new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()), new WorkbenchSharedData(_twinExecutionEngine.getModelData(_modelName))); - } else { - _timeOrderedQueue.remove(event); - } - WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler); - WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController); - processingContext.reset(model, id, null); - Date date = new Date(); - date.setTime(_curSimulationTime); - event.processSimulationEvent(processingContext, date); - if(simulationController.delayRequested()) { - long delay = simulationController.getRequestedDelay(); - if(delay == 0x0000e677d21fdbffL) { - event.setPriority(simulationController.getRequestedDelay()); - event.setNextSimulationTime(simulationController.getRequestedDelay()); - } else if (delay == 0L) { - event.setPriority(_curSimulationTime); - event.setNextSimulationTime(_curSimulationTime); - } else { - event.setPriority(_curSimulationTime + simulationController.getRequestedDelay()); - event.setNextSimulationTime(_curSimulationTime + simulationController.getRequestedDelay()); - } - } else { - event.setPriority(_curSimulationTime + _simulationInterval); - event.setNextSimulationTime(_curSimulationTime + _simulationInterval); - } - _events.put(String.format("%s%s",model,id), event); - _timeOrderedQueue.add(event); - } - - @Override - public SimulationStep call() throws Exception { - synchronized (this) { - _running = true; - } - SimulationTime simulationTime = new SimulationTime(_curSimulationTime, _simulationInterval); - long lowestNextSimulationTime = Long.MAX_VALUE; - long nextQueueTm = Long.MAX_VALUE; - boolean keepProcessing = true; - boolean delayed = false; - boolean addToBuffer = true; - List buffer = new LinkedList<>(); - WorkbenchSimulationController simulationController = new WorkbenchSimulationController(_twinExecutionEngine, _simulationScheduler); - WorkbenchProcessingContext processingContext = new WorkbenchProcessingContext(_twinExecutionEngine, simulationController); - Date currentTime = new Date(); - currentTime.setTime(_curSimulationTime); - int processed = 0; - do { - addToBuffer = true; - SimulationEvent next = _timeOrderedQueue.poll(); - if(next != null) { - if(next.getProxyState() == ProxyState.Active) { - processed++; - nextQueueTm = next.getPriority(); - if(next.getPriority() <= simulationTime.getCurrentSimulationTime()) { - simulationController.reset(_modelName, next.getId()); - processingContext.reset(_modelName, next.getId(), null); - ProcessingResult result = ProcessingResult.NoUpdate; - try { - next.processSimulationEvent(processingContext, currentTime); - } catch (Exception e) { - _logger.error("simulation processor threw an exception.", e); - result = ProcessingResult.NoUpdate; - } - if(simulationController.delayRequested()) { - delayed = true; - long delay = simulationController.getRequestedDelay(); - if(delay == 0x0000e677d21fdbffL) { - next.setPriority(simulationController.getRequestedDelay()); - next.setNextSimulationTime(simulationController.getRequestedDelay()); - } else if (delay == 0L) { - next.setPriority(_curSimulationTime); - next.setNextSimulationTime(_curSimulationTime); - addToBuffer = false; - } else { - next.setPriority(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay()); - next.setNextSimulationTime(simulationTime.getCurrentSimulationTime() + simulationController.getRequestedDelay()); - } - } else { - next.setPriority(simulationTime.getNextSimulationTime()); - next.setNextSimulationTime(simulationTime.getNextSimulationTime()); - } - if(lowestNextSimulationTime > next.getPriority()) { - lowestNextSimulationTime = next.getPriority(); - } - if(simulationController.deleted()) { - result = ProcessingResult.NoUpdate; - } - if(!simulationController.enqueue()) { - // the user called "runThisInstance" -- the work item has already been re-enqueued for the - // current time slice. - addToBuffer = false; - } - } else { - synchronized (this) { - _running = false; - } - keepProcessing = false; - } - if(!simulationController.deleted() && addToBuffer) { - buffer.add(next); - } - } - } else { - synchronized (this) { - _running = false; - } - keepProcessing = false; - nextQueueTm = Long.MAX_VALUE; - } - } while (keepProcessing); - - _timeOrderedQueue.addAll(buffer); - _nextSimulationTime = Math.min(lowestNextSimulationTime, nextQueueTm); - - if(_nextSimulationTime == Long.MAX_VALUE && !delayed) { // check to make sure the user didn't set delay to Long.MAX_VALUE - _nextSimulationTime = simulationTime.getNextSimulationTime(); - } - - SimulationScheduler.PROCESSED.addAndGet(processed); - SimulationScheduler.QUEUED.addAndGet(_timeOrderedQueue.size()); - if(processed > 0) { - return new SimulationStep(simulationController.getSimulationStatus(), _nextSimulationTime); - } else { - return new SimulationStep(SimulationStatus.NoRemainingWork, _nextSimulationTime); - } - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java deleted file mode 100644 index bd34eca..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinExecutionEngine.java +++ /dev/null @@ -1,439 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.io.Closeable; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.time.Duration; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; - -class TwinExecutionEngine implements Closeable { - private List _modelNames; - private ConcurrentHashMap> _digitalTwins; - private ConcurrentHashMap _messageProcessors; - private ConcurrentHashMap _simulationProcessors; - private ConcurrentHashMap> _messageProcessorValueTypes; - private ConcurrentHashMap> _modelInstances; - private ConcurrentHashMap> _alertProviders; - private ConcurrentHashMap> _modelsSharedData; - private HashMap _globalSharedData; - private Workbench _workbench; - private ConcurrentHashMap _simulationSchedulers; - private ConcurrentHashMap _realTimeTimers; - private Gson _gson; - - - TwinExecutionEngine(Workbench workbench) { - _workbench = workbench; - init(); - } - - void init( ) { - _modelNames = new LinkedList<>(); - _digitalTwins = new ConcurrentHashMap<>(); - _messageProcessors = new ConcurrentHashMap<>(); - _simulationProcessors = new ConcurrentHashMap<>(); - _messageProcessorValueTypes = new ConcurrentHashMap<>(); - _modelInstances = new ConcurrentHashMap<>(); - _modelsSharedData = new ConcurrentHashMap<>(); - _globalSharedData = new HashMap<>(); - _alertProviders = new ConcurrentHashMap<>(); - _simulationSchedulers = new ConcurrentHashMap<>(); - _realTimeTimers = new ConcurrentHashMap<>(); - _gson = new Gson(); - } - - void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, Class dtType, Class messageClass) { - _modelNames.add(digitalTwinModelName); - _digitalTwins.put(digitalTwinModelName, dtType); - _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); - _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); - } - - void addDigitalTwin(String digitalTwinModelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass, int numWorkers) { - _modelNames.add(digitalTwinModelName); - _digitalTwins.put(digitalTwinModelName, dtType); - _messageProcessors.put(digitalTwinModelName, digitalTwinMessageProcessor); - _simulationProcessors.put(digitalTwinModelName, simulationProcessor); - _messageProcessorValueTypes.put(digitalTwinModelName, messageClass); - _simulationSchedulers.put(digitalTwinModelName, new SimulationScheduler(digitalTwinModelName, dtType, simulationProcessor, this, numWorkers)); - } - - void addTimer(String modelName, String id, String timerName, TimerType type, Duration interval, TimerHandler handler) { - ConcurrentHashMap modelInstances = _modelInstances.get(modelName); - TwinProxy proxy = modelInstances.get(id); - SimulationScheduler scheduler = _simulationSchedulers.get(modelName); - if (scheduler != null) { - scheduler.addTimer(proxy, modelName, id, timerName, type, interval, handler); - } else { - Timer timer = new Timer(); - WorkbenchTimerTask task = new WorkbenchTimerTask(this, modelName, id, timerName, proxy, type, interval, handler); - _realTimeTimers.put(String.format("%s%s%s", modelName, id, timerName), task); - switch(type) { - case OneTime: - timer.schedule(task, interval.toMillis()); - break; - case Recurring: - timer.scheduleAtFixedRate(task, interval.toMillis(), interval.toMillis()); - break; - } - } - - } - - void stopTimer(String modelName, String id, String timerName) { - SimulationScheduler scheduler = _simulationSchedulers.get(modelName); - if (scheduler != null) { - scheduler.stopTimer(modelName, id, timerName); - } else { - WorkbenchTimerTask task = _realTimeTimers.get(String.format("%s%s%s",modelName, id,timerName)); - task.cancel(); - } - } - - void addAlertProvider(String modelName, AlertProviderConfiguration configuration) { - ConcurrentHashMap configMap = new ConcurrentHashMap<>(); - configMap.put(configuration.getName(), configuration); - _alertProviders.put(modelName, configMap); - } - - void updateTwin(String model, String id, TwinProxy proxy) { - ConcurrentHashMap modelInstances = _modelInstances.get(model); - modelInstances.put(id, proxy); - _modelInstances.put(model, modelInstances); - } - - Date getTime(String model) { - if(_simulationSchedulers.containsKey(model)) { - SimulationScheduler scheduler = _simulationSchedulers.get(model); - return new Date(scheduler.getCurrentTime()); - } - return new Date(System.currentTimeMillis()); - } - - void setSimulationStatus(boolean status) { - for(SimulationScheduler scheduler : _simulationSchedulers.values()) { - scheduler.setStatus(status); - } - } - - List runningModels() { - return _modelNames; - } - - HashMap getTwinInstances(String model) { - HashMap ret = new HashMap<>(); - ConcurrentHashMap instances = _modelInstances.get(model); - if(instances!= null) { - for(Map.Entry entry : instances.entrySet()) { - ret.put(entry.getKey(), entry.getValue().getInstance()); - } - } - return ret; - } - - DigitalTwinBase getTwinInstance(String model, String id) { - DigitalTwinBase ret = null; - ConcurrentHashMap instances = _modelInstances.get(model); - if(instances != null) { - TwinProxy proxy = instances.get(id); - if(proxy != null) { - ret = proxy.getInstance(); - } - } - return ret; - } - - TwinProxy getTwinProxy(String model, String id) { - TwinProxy proxy = null; - ConcurrentHashMap instances = _modelInstances.get(model); - if(instances != null) { - proxy = instances.get(id); - return proxy; - } - return proxy; - } - - String generateModelSchema(String model) throws WorkbenchException { - if(_digitalTwins.get(model) != null) { - ModelSchema schema; - if(_simulationProcessors.get(model) != null) { - schema = new ModelSchema( - _digitalTwins.get(model).getName(), - _messageProcessors.get(model).getClass().getName(), - _messageProcessorValueTypes.get(model).getName(), - _simulationProcessors.get(model).getClass().getName(), - List.copyOf(_alertProviders.get(model) == null ? Collections.emptyList() : _alertProviders.get(model).values())); - } else { - schema = new ModelSchema( - _digitalTwins.get(model).getName(), - _messageProcessors.get(model).getClass().getName(), - _messageProcessorValueTypes.get(model).getName(), - List.copyOf(_alertProviders.get(model) == null ? Collections.emptyList() : _alertProviders.get(model).values())); - } - - Gson gson = new Gson(); - String modelSchemaJson = gson.toJson(schema, ModelSchema.class); - return modelSchemaJson; - } else { - throw new WorkbenchException("Model has not been added to this workbench."); - } - } - - boolean hasAlertProviderConfiguration(String model, String alertProviderName) { - if(hasModel(model)) { - return _alertProviders.containsKey(model) && _alertProviders.getOrDefault(model, new ConcurrentHashMap<>()).containsKey(alertProviderName); - } else { - return false; - } - - } - - boolean hasModel(String modelName) { - return _modelNames.contains(modelName); - } - - SendingResult sendToSource(String source, String model, String id, String msg) throws WorkbenchException { - if(_modelNames.contains(source)) { - String toSend = String.format("[%s]", msg); - run(source, id, null, toSend); - return SendingResult.Handled; - } else { - ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); - List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); - messages.add(msg); - messagesByModel.put(id, messages); - _workbench.SOURCE_MESSAGES.put(model, messagesByModel); - return SendingResult.Handled; - } - } - - SendingResult sendToSource(String source, String model, String id, List jsonSerializableMessage) throws WorkbenchException { - if (_modelNames.contains(source)) { - run(source, id, null, jsonSerializableMessage); - return SendingResult.Handled; - } else { - String msg = _gson.toJson(jsonSerializableMessage); - ConcurrentHashMap> messagesByModel = _workbench.SOURCE_MESSAGES.getOrDefault(model, new ConcurrentHashMap>()); - List messages = messagesByModel.getOrDefault(id, new LinkedList<>()); - messages.add(msg); - messagesByModel.put(id, messages); - _workbench.SOURCE_MESSAGES.put(model, messagesByModel); - return SendingResult.Handled; - } - } - - SimulationStep runSimulationStep(SimulationStepArgs args) { - SimulationStep status = null; - for(Map.Entry entry : _simulationSchedulers.entrySet()) { - SimulationStep next = entry.getValue().runSimulation(args); - if(status == null) { - status = next; - } else { - status.merge(next); - } - } - return status; - } - - HashMap getModelData(String model) { - HashMap sharedData = _modelsSharedData.get(model); - if(sharedData == null) sharedData = new HashMap<>(); - _modelsSharedData.put(model, sharedData); - return sharedData; - } - - HashMap getGlobalSharedData() { - return _globalSharedData; - } - - - public void logMessage(String model, LogMessage message) { - ConcurrentLinkedQueue prev = _workbench.LOGGED_MESSAGES.get(model); - if(prev == null) { - synchronized (_workbench.LOGGED_MESSAGES) { - prev = _workbench.LOGGED_MESSAGES.get(model); - if(prev == null) { - prev = new ConcurrentLinkedQueue<>(); - _workbench.LOGGED_MESSAGES.put(model, prev); - } - } - } - prev.add(message); - _workbench.LOGGED_MESSAGES.put(model, prev); - } - - public void recordAlertMessage(String model, String alertProvider, AlertMessage message) { - ConcurrentHashMap> perModelMessages = _workbench.ALERT_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); - ConcurrentLinkedQueue perApMessages = perModelMessages.getOrDefault(alertProvider, new ConcurrentLinkedQueue<>()); - perApMessages.add(message); - perModelMessages.put(alertProvider, perApMessages); - _workbench.ALERT_MESSAGES.put(model, perModelMessages); - } - - public void createInstance(String modelName, String id, DigitalTwinBase instance) { - TwinProxy proxy = new TwinProxy(instance); - ConcurrentHashMap modelInstances = _modelInstances.get(modelName); - if(modelInstances == null) { - modelInstances = new ConcurrentHashMap<>(); - } - modelInstances.put(id, proxy); - InitContext initContext = new WorkbenchInitContext(this, instance, modelName, id); - instance.init(initContext); - SimulationScheduler scheduler = _simulationSchedulers.get(modelName); - if(scheduler != null) { - proxy.setProxyState(ProxyState.Active); - scheduler.addInstance(proxy); - } - modelInstances.put(id, proxy); - _modelInstances.put(modelName, modelInstances); - } - - public void deleteSimulationInstance(String modelName, String id) { - ConcurrentHashMap modelInstances = _modelInstances.get(modelName); - TwinProxy proxy = modelInstances.remove(id); - proxy.setProxyState(ProxyState.Removed); - _modelInstances.put(modelName, modelInstances); - } - - ProcessingResult run(String model, String id, String source, String serializedList) throws WorkbenchException { - try { - ConcurrentHashMap twinInstances = _modelInstances.get(model); - if(twinInstances == null) { - twinInstances = new ConcurrentHashMap<>(); - } - TwinProxy proxy = twinInstances.get(id); - DigitalTwinBase instance = null; - if(proxy == null) { - Class dtClazz = _digitalTwins.get(model); - if(dtClazz == null) { - throw new WorkbenchException(String.format("DigitalTwin model \"%s\" does not exist on this workbench.", model)); - } - instance = dtClazz.getConstructor().newInstance(); - InitContext initContext = new WorkbenchInitContext(this, instance, model, id); - instance.init(initContext); - proxy = new TwinProxy(instance); - SimulationScheduler scheduler = _simulationSchedulers.get(model); - if(scheduler != null) { - proxy.setProxyState(ProxyState.Active); - scheduler.addInstance(proxy); - } - } else { - instance = proxy.getInstance(); - } - MessageProcessor mp = _messageProcessors.get(model); - HashMap sharedData = _modelsSharedData.get(model); - if(sharedData == null) sharedData = new HashMap<>(); - _modelsSharedData.put(model, sharedData); - SimulationController simulationController = null; - SimulationScheduler scheduler = _simulationSchedulers.get(model); - if(scheduler != null) { - simulationController = new WorkbenchSimulationController(this, scheduler); - } - WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController); - context.reset(model, id, source, instance); - ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(serializedList, _messageProcessorValueTypes.get(model))); - if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin; - switch(res) { - case UpdateDigitalTwin: - proxy.setInstance(instance); - twinInstances.put(id, proxy); - _modelInstances.put(model, twinInstances); - break; - case NoUpdate: - break; - default: - break; - } - return res; - } catch (Exception e) { - throw new WorkbenchException("Exception thrown while running message processor.", e); - } - } - - ProcessingResult run(String model, String id, String source, List messages) throws WorkbenchException { - try { - ConcurrentHashMap twinInstances = _modelInstances.get(model); - if(twinInstances == null) { - twinInstances = new ConcurrentHashMap<>(); - } - TwinProxy proxy = twinInstances.get(id); - DigitalTwinBase instance = null; - if(proxy == null) { - Class dtClazz = _digitalTwins.get(model); - if(dtClazz == null) return ProcessingResult.NoUpdate; - instance = dtClazz.getConstructor().newInstance(); - InitContext initContext = new WorkbenchInitContext(this, instance, model, id); - instance.init(initContext); - proxy = new TwinProxy(instance); - SimulationScheduler scheduler = _simulationSchedulers.get(model); - if(scheduler != null) { - proxy.setProxyState(ProxyState.Active); - scheduler.addInstance(proxy); - } - } else { - instance = proxy.getInstance(); - } - MessageProcessor mp = _messageProcessors.get(model); - HashMap sharedData = _modelsSharedData.get(model); - if(sharedData == null) sharedData = new HashMap<>(); - _modelsSharedData.put(model, sharedData); - WorkbenchSimulationController simulationController = null; - SimulationScheduler scheduler = _simulationSchedulers.get(model); - if(scheduler != null) { - simulationController = new WorkbenchSimulationController(this, scheduler); - } - WorkbenchProcessingContext context = new WorkbenchProcessingContext(_workbench._twinExecutionEngine, sharedData, _globalSharedData, simulationController); - context.reset(model, id, source, instance); - if(simulationController != null) { - simulationController.reset(model, id); - } - ProcessingResult res = mp.processMessages(context, instance, new WorkbenchMessageListFactory(messages, _messageProcessorValueTypes.get(model))); - if(context.forceSave()) res = ProcessingResult.UpdateDigitalTwin; - switch(res) { - case UpdateDigitalTwin: - proxy.setInstance(instance); - twinInstances.put(id, proxy); - _modelInstances.put(model, twinInstances); - break; - case NoUpdate: - break; - default: - break; - } - return res; - } catch (Exception e) { - throw new WorkbenchException(e.getMessage(), e); - } - } - - @Override - public void close() throws IOException { - if(_realTimeTimers != null && _realTimeTimers.size() > 0) { - for(Map.Entry entry : _realTimeTimers.entrySet()) { - WorkbenchTimerTask task = _realTimeTimers.remove(entry.getKey()); - task.cancel(); - } - _realTimeTimers = null; - } - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java deleted file mode 100644 index 4811ab7..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/TwinProxy.java +++ /dev/null @@ -1,52 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase; - -class TwinProxy { - private DigitalTwinBase _instance; - private ProxyState _state; - public TwinProxy(DigitalTwinBase instance) { - _instance = instance; - _state = ProxyState.Unspecified; - } - - void setProxyState(ProxyState state) { - _state = state; - } - - ProxyState getProxyState() { - return _state; - } - - DigitalTwinBase getInstance() { - return _instance; - } - - public void setInstance(DigitalTwinBase instance) { - _instance = instance; - } - - @Override - public String toString() { - return "TwinProxy{" + - "_instance=" + _instance + - ", _state=" + _state + - '}'; - } -} - diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java deleted file mode 100644 index 0cc6a07..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/Workbench.java +++ /dev/null @@ -1,769 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.io.*; -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentLinkedQueue; - -/** - * The Workbench is used to represent an environment where developers can test real-time and simulated digital twins. - *

                - * Quick start: - *

                - *

                - * Build a real-time digital twin model for testing real-time message processing with messages generated by a simulated - * digital twin. - *

                - *

                - * The real-time model will represent a car and the simulated digital twin will - * represent a pump increasing the real-time car's tire pressure. The real-time car will process messages from the - * simulated pump and send information back to the simulated pump when the tire is full. - *

                - * - *

                The quickstart will demonstrate the following:

                - *
                  - *
                • Define a real-time car digital twin
                • - *
                • Define a tire pressure change message
                • - *
                • Define a real-time car message processor
                • - *
                • Define a simulated pump digital twin
                • - *
                • Define a simulated pump message processor
                • - *
                • Define a simulated pump simulation processor
                • - *
                - * - *

                - * Defining the real-time car model: - *

                - * - *

                - * Create a class that extends the {@link DigitalTwinBase} class and add an integer property for tire pressure. - * When constructed by the {@link Workbench} this will be our real-time car instance. - *

                - *
                - *     public class RealTimeCar extends DigitalTwinBase {
                - *         private int _tirePressure;
                - *         public RealTimeCar() { _tirePressure=0; }
                - *         public RealTimeCar(int startingTirePressure) {
                - *             _tirePressure = startingTirePressure;
                - *         }
                - *
                - *         public void incrementTirePressure(int increment) {
                - *             _tirePressure += increment;
                - *         }
                - *
                - *         public int getTirePressure() {
                - *             return _tirePressure;
                - *         }
                - *     }
                - * 
                - *

                - * Defining the tire pressure change message: - *

                - *

                - * Implement a message to send from the simulated pump, to the real-time model. The message will tell the real-time - * car to increase the tire pressure by some value. - *

                - * - *
                - *     public class TirePressureMessage {
                - *         final int _pressureChange;
                - *         public TirePressureMessage(int pressureChange) {
                - *             _pressureChange = pressureChange;
                - *         }
                - *
                - *         public int getPressureChange() {
                - *             return _pressureChange;
                - *         }
                - *     }
                - * 
                - * - *

                - * Defining the real-time car message processor: - *

                - * - *

                - * Create the real-time car {@link MessageProcessor}. The message processor will apply the tire pressure change from the tire - * pressure message to the real-time car digital twin instance. When the tire is full, the message processor will - * send a message back to the simulated pump. - *

                - *
                - *     public class RealTimeCarMessageProcessor extends MessageProcessor{@literal <}RealTimeCar, TirePressureMessage{@literal >} implements Serializable {
                - *         final int TIRE_PRESSURE_FULL = 100;
                - *         public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable{@literal <}TirePressureMessage{@literal >} messages) throws Exception {
                - *             // apply the updates from the messages
                - *             for(TirePressureMessage message : messages) {
                - *                 car.incrementTirePressure(message.getPressureChange());
                - *             }
                - *             if(car.getTirePressure() {@literal >} TIRE_PRESSURE_FULL) {
                - *                 processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure()));
                - *             }
                - *             return ProcessingResult.UpdateDigitalTwin;
                - *         }
                - *     }
                - * 
                - * - *

                - * Defining the simulated pump model: - *

                - * - *

                - * Create a class that extends the {@link DigitalTwinBase} class and add a double property for tire pressure change. - * When constructed by the {@link Workbench} this will be our simulated pump instance. - *

                - *
                - *     public class SimulatedPump extends DigitalTwinBase {
                - *     private double _tirePressureChange;
                - *     private boolean _tirePressureReached = false;
                - *     public SimulatedPump() {}
                - *     public SimulatedPump(double pressureChange) {
                - *         _tirePressureChange = pressureChange;
                - *     }
                - *
                - *     public double getTirePressureChange() {
                - *         return _tirePressureChange;
                - *     }
                - *
                - *     public void setTirePressureReached() {
                - *         _tirePressureReached = true;
                - *     }
                - *
                - *     public boolean isTireFull() {
                - *         return _tirePressureReached;
                - *     }
                - * }
                - * 
                - * - *

                - * Defining the simulated pump message processor: - *

                - * - *

                - * The simulated pump should stop when the simulated pump message processor receives a message. The simulated pump message - * processor will update the state of the simulated pump indicating that the tire is full. - *

                - *
                - *     public class PumpMessageProcessor extends MessageProcessor{@literal <}SimulatedPump, TirePressureMessage{@literal >} implements Serializable {
                - *         public ProcessingResult processMessages(ProcessingContext processingContext, SimulatedPump pump, Iterable{@literal <}TirePressureMessage{@literal >} messages) throws Exception {
                - *             // apply the updates from the messages
                - *             pump.setTirePressureReached();
                - *             return ProcessingResult.UpdateDigitalTwin;
                - *         }
                - *     }
                - * 
                - * - *

                - * Defining the pump simulation processor: - *

                - * - *

                - * Define the simulated pump {@link SimulationProcessor}. This piece of code will be called at each simulation interval so - * long as the simulation has instances to run. This pump simulation processor will send a message to the - * real-time car with a tire pressure change derived from the state of the simulated pump. While the simulated pump has not been - * told to stop, it will continue sending tire pressure changes to the real-time car. - *

                - *
                - *     public class PumpSimulationProcessor extends SimulationProcessor{@literal <}SimulatedPump{@literal >} implements Serializable {
                - *         public ProcessingResult processModel(ProcessingContext processingContext, SimulatedPump simPump, Date date) {
                - *             SimulationController controller = processingContext.getSimulationController();
                - *             if(simPump.isTireFull()) {
                - *                 controller.deleteThisInstance();
                - *             } else {
                - *                 int change = (int) (100 * simPump.getTirePressureChange());
                - *                 controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change));
                - *             }
                - *             return ProcessingResult.UpdateDigitalTwin;
                - *         }
                - *     }
                - * 
                - * - *

                - * Using the workbench: - *

                - * - *

                - * The real-time and simulation models are complete. The workbench can now load up the models and then run a simulation. - * When beginning testing, the "step loop" is used to track the state of the twins and the simulation. Instantiate the - * workbench and add the models. - *

                - * - *
                - *     Workbench workbench = new Workbench();
                - *     workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class);
                - *     workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class);
                - * 
                - * - *

                - * The workbench is loaded up with the models. Add a single simulated pump instance. - * Note that no real-time car digital twin is created and added to the workbench. The first message from the - * simulated pump digital twin will cause the workbench to create a new real-time instance. - *

                - *
                - *     workbench.addInstance("SimPump", "23", new SimulationPump(0.29d));
                - * 
                - * - *

                Initialize the simulation and then step through the simulation intervals. Start the simulation now and end the - * simulation in 60 seconds.

                - * - *
                - *     SimulationStep step = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis()+60000, 1000);
                - * 
                - * - *

                - * At each interval, view the state of the real-time car to ensure the tire pressure is changing as expected. - *

                - * - *
                - *     while(step.getStatus() == SimulationStatus.Running) {
                - *         step = workbench.step();
                - *         HashMap{@literal <}String, DigitalTwinBase{@literal >} realTimeCars = workbench.getInstances("RealTimeCar");
                - *         RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23");
                - *         System.out.println("rtCar: " + rtCar.getTirePressure());
                - *     }
                - * 
                - * - *

                - * Summary: - *

                - *

                - * The simulated pump at each simulation step emits telemetry to the real-time car digital twin. With each tire pressure - * change message, the real-time car twin accrues state about the pressure of the tire. When the real-time car twins tire - * is full, it sends a message back to the simulated pump. When the simulated pump receives a message from the real-time car, - * it updates some internal state indicating to stop pumping. During the next simulation interval, the simulated pump - * deletes itself to stop pumping. This completes the simulation as there are no more remaining simulated pumps. - *

                - * - */ -public class Workbench implements AutoCloseable { - final ConcurrentHashMap> LOGGED_MESSAGES = new ConcurrentHashMap<>(); - final ConcurrentHashMap>> ALERT_MESSAGES = new ConcurrentHashMap<>(); - final ConcurrentHashMap>> SOURCE_MESSAGES = new ConcurrentHashMap<>(); - - TwinExecutionEngine _twinExecutionEngine; - private long _curTime, _endTime, _interval; - private long _now, _next; - private SimulationStep _result = null; - private boolean _simulationStarted = false; - private int _numWorkers = Runtime.getRuntime().availableProcessors(); - - - /** - * Instantiate the workbench. - */ - public Workbench() { - _twinExecutionEngine = new TwinExecutionEngine(this); - } - - /** - * Instantiate the workbench. - * @param numSimulationWorkers the number of simulation workers to use. Default is {@link Runtime#availableProcessors()}. - */ - public Workbench(int numSimulationWorkers) { - _twinExecutionEngine = new TwinExecutionEngine(this); - if(_numWorkers <= 0) throw new IllegalArgumentException("numSimulationWorkers must be greater-than 0."); - _numWorkers = numSimulationWorkers; - } - - - /** - * Adds a real-time digital twin model to the workbench. - * - * @param modelName the name of the model. - * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. - * @param dtType the model's {@link DigitalTwinBase} implementation. - * @param messageClass the model's message type. - * @param the type of the digital twin. - * @param the type of the message. - * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message - * processor must be serializable, and the digital twin implementation must have a parameterless constructor). - */ - public void addRealTimeModel(String modelName, MessageProcessor digitalTwinMessageProcessor, Class dtType, Class messageClass) throws WorkbenchException { - if(modelName == null || modelName.isBlank() || modelName.isEmpty() || digitalTwinMessageProcessor == null || dtType == null || messageClass == null) { - String errorMessage = String.format("modelName null: %b messageProcessor null: %b dtType null: %b messageType null: %b",modelName == null, digitalTwinMessageProcessor == null, dtType == null, messageClass == null); - throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); - } - - validate(digitalTwinMessageProcessor, dtType); - _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, dtType, messageClass); - } - - /** - * Adds a simulation digital twin model to the workbench. - * - * @param modelName the name of the model. - * @param digitalTwinMessageProcessor the model's {@link MessageProcessor} implementation. Must be marked as {@link Serializable}. - * @param simulationProcessor the model's {@link SimulationProcessor} implementation. Must be marked as {@link Serializable}. - * @param dtType the model's {@link DigitalTwinBase} implementation. - * @param messageClass the model's message type. - * @param the type of the digital twin. - * @param the type of the message. - * @throws WorkbenchException if any of the parameters are null or the model does not pass validation (the message - * processor must be serializable, and the digital twin implementation must have a parameterless constructor). - */ - public void addSimulationModel(String modelName, MessageProcessor digitalTwinMessageProcessor, SimulationProcessor simulationProcessor, Class dtType, Class messageClass) throws WorkbenchException { - if(modelName == null || modelName.isBlank() || modelName.isEmpty() || digitalTwinMessageProcessor == null || simulationProcessor == null || dtType == null || messageClass == null) { - String errorMessage = String.format("modelName null: %b messageProcessor null: %b simulationProcessor null: %b dtType null: %b messageType null: %b",modelName == null, digitalTwinMessageProcessor == null, simulationProcessor == null, dtType == null, messageClass == null); - throw new WorkbenchException(new IllegalArgumentException("All parameters required. Found null parameter.\n" + errorMessage)); - } - - validate(digitalTwinMessageProcessor, dtType); - _twinExecutionEngine.addDigitalTwin(modelName, digitalTwinMessageProcessor, simulationProcessor, dtType, messageClass, _numWorkers); - } - - /** - * Adds a digital twin instance to the workbench. - * Instances cannot be added to the workbench after {@link Workbench#runSimulation(long, long, double, long)} or - * {@link Workbench#initializeSimulation(long, long, long)} has been called. - * - * @param modelName the instances model. - * @param id the instance identifier. - * @param instance the real-time or simulation instance. - * @throws WorkbenchException If the model does not exist or if a simulation is already running. - */ - public void addInstance(String modelName, String id, DigitalTwinBase instance) throws WorkbenchException { - if(_simulationStarted) throw new WorkbenchException("Cannot add new instance while simulation is active."); - if(!_twinExecutionEngine.hasModel(modelName)) throw new WorkbenchException("The model does not exist on this workbench."); - _twinExecutionEngine.createInstance(modelName, id, instance); - } - - /** - * Adds an alert provider configuration to the specified model on this workbench. - * Alert provider configurations cannot be added to the workbench after {@link Workbench#runSimulation(long, long, double, long)} or - * {@link Workbench#initializeSimulation(long, long, long)} has been called. - * - * @param modelName the instances model. - * @param configuration the alert provider configuration. - * @throws WorkbenchException If the model does not exist or if a simulation is already running. - */ - public void addAlertProvider(String modelName, AlertProviderConfiguration configuration) throws WorkbenchException { - if(_simulationStarted) throw new WorkbenchException("Cannot add new alert provider while simulation is active."); - if(!_twinExecutionEngine.hasModel(modelName)) throw new WorkbenchException("The model does not exist on this workbench."); - _twinExecutionEngine.addAlertProvider(modelName, configuration); - } - - /** - * Runs a simulation from the given startTime until the given endTime OR there is no more work to do. - * A simulation has reached the end time when the time to run the next interval is greater than the end time or - * there are no more simulated twins to run. - * - * @param startTime the start time of the simulation. - * @param endTime the end time of the simulation. - * @param speedup the speedup of the interval (in real-time). - * @param interval the interval between simulation steps. - * @return a {@link SimulationStep} that details the final runtime and the {@link SimulationStatus}. - * @throws WorkbenchException if an exception is thrown by the simulated model or real-time model. - */ - public SimulationStep runSimulation(long startTime, long endTime, double speedup, long interval) throws WorkbenchException { - _twinExecutionEngine.setSimulationStatus(true); - _simulationStarted = true; - SimulationStep ret, result = null; - SimulationStepArgs args; - long now, curTime, start, end, deltaTm, delta, wait, numItv; - args = new SimulationStepArgs(startTime, interval, WorkbenchSimulationFlags.Start); - _twinExecutionEngine.runSimulationStep(args); - SimulationStatus status = SimulationStatus.Running; - now = curTime = startTime; - while(status == SimulationStatus.Running && - curTime < endTime) { - args = new SimulationStepArgs(curTime, interval, WorkbenchSimulationFlags.Run); - now = curTime; - start = System.currentTimeMillis(); - result = _twinExecutionEngine.runSimulationStep(args); - end = System.currentTimeMillis(); - delta = result.getTime() - curTime; - numItv = delta/interval; - numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv; - deltaTm = end-start; - wait = deltaTm >= interval ? 0L : (long)((interval-deltaTm)/speedup); - status = result.getStatus(); - curTime = curTime+(numItv*interval); - try { - Thread.sleep(wait); - } catch (Exception e) { - throw new WorkbenchException(e); - } - } - if(curTime >= endTime) { - ret = new SimulationStep(SimulationStatus.EndTimeReached, curTime); - _twinExecutionEngine.setSimulationStatus(false); - _simulationStarted = false; - } else { - ret = new SimulationStep(result.getStatus(), now); - _twinExecutionEngine.setSimulationStatus(false); - _simulationStarted = false; - } - return ret; - } - - /** - * Initializes the simulation so that each interval can be run separately by calling the {@link Workbench#step()} - * function. - * - * @param startTime the start time of the simulation. - * @param endTime the end time of the simulation. - * @param interval the interval between simulation steps. - * @return a {@link SimulationStep} that details the startTime and the {@link SimulationStatus} -- which will always be {@link SimulationStatus#Running}. - */ - public SimulationStep initializeSimulation(long startTime, long endTime, long interval) { - _simulationStarted = true; - _twinExecutionEngine.setSimulationStatus(true); - _curTime = startTime; - _endTime = endTime; - _interval = interval; - _result = new SimulationStep(SimulationStatus.Running, startTime); - _twinExecutionEngine.setSimulationStatus(true); - return _result; - } - - /** - * Run the next simulation interval. - * - * @return a {@link SimulationStep} that shows the time interval that was run and the corresponding {@link SimulationStatus} - * @throws WorkbenchException if an exception is thrown by the simulated model or real-time model. - */ - public SimulationStep step() throws WorkbenchException { - long delta, numItv; - SimulationStatus status = _result.getStatus(); - if(status == SimulationStatus.Running ) { - if(_curTime >= _endTime) { - _simulationStarted = false; - _twinExecutionEngine.setSimulationStatus(false); - return new SimulationStep(SimulationStatus.EndTimeReached, _curTime); - } - SimulationStepArgs args = new SimulationStepArgs(_curTime, _interval, WorkbenchSimulationFlags.Run); - _now = _curTime; - _result = _twinExecutionEngine.runSimulationStep(args); - delta = _result.getTime() - _curTime; - numItv = delta/_interval; - numItv = numItv > 0 ? delta%numItv != 0 ? numItv+1 : numItv : numItv+1; - _curTime = _curTime+(numItv*_interval); - _next = _curTime; - return new SimulationStep(_result.getStatus(), _now); - } else { - _simulationStarted = false; - _twinExecutionEngine.setSimulationStatus(false); - throw new WorkbenchException("Simulation is inactive. Simulation status: " + _result.getStatus()); - } - } - - /** - * Retrieves the current time interval of the simulation. - * @return a {@link Date} representation for the current interval time for the simulation. - * @throws WorkbenchException if the simulation is not started or initialized. - */ - public Date getTime() throws WorkbenchException { - if(_simulationStarted) { - return new Date(_now); - } - throw new WorkbenchException("Simulation is not started"); - - } - - /** - * Retrieves the next interval time of the simulation. - * @return a {@link Date} representation for the next interval time for the simulation. - * @throws WorkbenchException if the simulation is not started or initialized. - */ - public Date peek() throws WorkbenchException { - if(_simulationStarted) { - return new Date(_next); - } - throw new WorkbenchException("Simulation is not started"); - } - - /** - * Retrieves DigitalTwin instances for a given model. - * - * @param modelName the digital twin model name - * @return the instances associated with the parameter model - * @throws WorkbenchException if an exception occurs while retrieving digital twin instances for the parameter modelName - */ - public HashMap getInstances(String modelName) throws WorkbenchException { - if(_twinExecutionEngine.getTwinInstances(modelName) == null) - throw new WorkbenchException(String.format("No instances for model %s.", modelName)); - return _twinExecutionEngine.getTwinInstances(modelName); - } - - /** - * Retrieves messages logged by digital twin instances for a specified mdoel. If the provided timestamp is 0, all messages will be returned. - * Timestamps greater than 0 will return a sublist of logged messages where the first message in the returned list - * will be greater than the provided timestamp. If no messages exist after the timestamp, the returned list will be - * empty. - * - * @param model the model name for the logged messages. - * @param timestamp the timestamp used to filter the retrieved list. - * @return the list of messages defined by the timestamp - */ - public List getLoggedMessages(String model, long timestamp) { - if(timestamp == 0L) { - return Arrays.asList(LOGGED_MESSAGES.getOrDefault(model, new ConcurrentLinkedQueue<>()).toArray(new LogMessage[0])); - } else { - ConcurrentLinkedQueue modelMessages = LOGGED_MESSAGES.getOrDefault(model, new ConcurrentLinkedQueue<>()); - int endIdx = modelMessages.size()-1; - int bgnIdx = -1; - for(LogMessage msg : modelMessages) { - if(msg.getTimestamp() <= timestamp) { - bgnIdx++; - } else { - break; - } - } - - if(endIdx == bgnIdx) { - return Collections.emptyList(); - } else if(bgnIdx == -1){ - return Arrays.asList(LOGGED_MESSAGES.getOrDefault(model, new ConcurrentLinkedQueue<>()).toArray(new LogMessage[0])); - } - - return Arrays.asList(modelMessages.toArray(new LogMessage[0])).subList(bgnIdx, endIdx); - } - } - - /** - * Retrieves alert messages from digital twin instances. - * - * @param model the model to retrieve alert messages from. - * @param alertProvider the alert provider that generated the alerts. - * @return the list of alert messages generated by digital twin instances. - * @throws WorkbenchException if an exception occurs while retrieving logged messages. - */ - public List getAlertMessages(String model, String alertProvider) throws WorkbenchException { - if(!_twinExecutionEngine.hasModel(model)) throw new WorkbenchException(String.format("No registered model with name %s found.", model)); - if(!_twinExecutionEngine.hasAlertProviderConfiguration(model, alertProvider)) throw new WorkbenchException(String.format("No alert provider configuration, registered for model %s, for %s found.", model, alertProvider)); - - ConcurrentHashMap> perModelMessages = ALERT_MESSAGES.getOrDefault(model, new ConcurrentHashMap<>()); - return Arrays.asList(perModelMessages.get(alertProvider).toArray(new AlertMessage[0])); - } - - /** - * Retrieve the {@link SharedData} for a model. - * @param model the model name. - * @return the {@link SharedData} for a model. - * @throws WorkbenchException if an exception occurs while creating the working shared data. - */ - public SharedData getSharedModelData(String model) throws WorkbenchException { - if(_twinExecutionEngine.hasModel(model)) { - return new WorkbenchSharedData(_twinExecutionEngine.getModelData(model)); - } else { - throw new WorkbenchException("Workbench does not contain model " + model); - } - } - - /** - * Retrieve the global {@link SharedData}. - * @return the global {@link SharedData} of this workbench. - * @throws WorkbenchException if an exception occurs while creating the working shared data. - */ - public SharedData getSharedGlobalData() throws WorkbenchException { - return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); - } - - /** - * Generates a ModelSchema for the defined model - * - * @param modelName the digital twin model's name to generate a schema. - * @return a JSON string of the model's schema - * @throws WorkbenchException if an exception occurs while generating a model schema. - */ - public String generateModelSchema(String modelName) throws WorkbenchException { - if(_twinExecutionEngine.runningModels().contains(modelName)) { - return _twinExecutionEngine.generateModelSchema(modelName); - } - throw new WorkbenchException("Model is not loaded; cannot generate model schema."); - } - - /** - * Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system. If the - * parameter outputDirectory is null the file will be written to the working directory of the JVM. - * - * @param modelName the name of the digital twin model - * @param outputDirectory the directory to write the file to, or null to write the file to the current working directory. - * @return the full file path of the model.json schema file - * @throws WorkbenchException if an exception occurs while generating a model schema. - */ - public String generateModelSchema(String modelName, String outputDirectory) throws WorkbenchException { - if(modelName == null || modelName.isEmpty()) { - throw new WorkbenchException("Required parameters: modelName.", new IllegalArgumentException()); - } - - outputDirectory = outputDirectory == null ? System.getProperty("user.dir") : outputDirectory; - - if(_twinExecutionEngine.runningModels().contains(modelName)) { - try { - String filePath = String.format("%s\\model.json", outputDirectory); - FileWriter fileWriter = new FileWriter(filePath); - fileWriter.write(_twinExecutionEngine.generateModelSchema(modelName)); - fileWriter.flush(); - fileWriter.close(); - return filePath; - } catch (IOException e) { - throw new WorkbenchException("Could not write file to file system.", e); - } - - } - throw new WorkbenchException("Model is not loaded; cannot generate model schema."); - } - - /** - * Send a list of messages to a real-time or simulation model. - * @param modelName The model name. - * @param id the instance id. - * @param messages the messages to send. - * @return {@link SendingResult#Handled} unless an exception is thrown. - * @throws WorkbenchException if model name, id, or messages are null. Also thrown if the model's {@link MessageProcessor#processMessages(ProcessingContext, DigitalTwinBase, Iterable)} - * throws an exception. - */ - public SendingResult send(String modelName, String id, List messages) throws WorkbenchException { - if(modelName == null || id == null || messages == null) { - throw new WorkbenchException("ModelName, Id, and messages are required."); - } - if(_twinExecutionEngine.hasModel(modelName) && !_simulationStarted) { - _twinExecutionEngine.run(modelName, id, null, messages); - } else { - String msg = _twinExecutionEngine.hasModel(modelName) ? String.format("Cannot send message to %s. Simulation is active.", modelName) : String.format("Cannot send message to %s. Model does not exist.", modelName); - throw new WorkbenchException(msg); - } - return SendingResult.Handled; - } - -// /** -// * Sends a single JSON serialized UTF-8 string message to a digital twin. -// * -// * @param modelName the name of the digital twin model -// * @param id the ID of the digital twin model -// * @param jsonSerializedMessage the serialized JSON UTF-8 string message -// * @return the sending result -// * @throws WorkbenchException if an exception is thrown by the twin or an error occurs while processing. -// */ -// public SendingResult send(String modelName, String id, String jsonSerializedMessage) throws WorkbenchException { -// List msgs = new ArrayList<>(); -// msgs.add(jsonSerializedMessage); -// return send(modelName, id, msgs); -// } -// -// /** -// * -// * @param modelName the name of the digital twin model -// * @param id the ID of the digital twin model -// * @param jsonSerializedMessages a serialized list of JSON UTF-8 string messages -// * @return the sending result -// * @throws WorkbenchException if an exception occurs while sending a message -// */ -// public SendingResult send(String modelName, String id, List jsonSerializedMessages) throws WorkbenchException { -// return sendMessage(modelName, id, jsonSerializedMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; -// } - - ProcessingResult sendMessage(String model, String id, List jsonMessages) throws WorkbenchException { - if(_simulationStarted) throw new WorkbenchException("Cannot send message; simulation is active."); - StringBuilder serializedListBuilder = new StringBuilder(String.format("[%s", jsonMessages.remove(0))); - for(String msg : jsonMessages) { - serializedListBuilder.append(","); - serializedListBuilder.append(msg); - - } - serializedListBuilder.append("]"); - return _twinExecutionEngine.run(model, id, null, serializedListBuilder.toString()); - } - - - static void validate(MessageProcessor digitalTwinMessageProcessor, Class dtType) throws WorkbenchException { - WorkbenchException mee = null; - - ByteArrayOutputStream baos = null; - ObjectOutputStream oos = null; - - ByteArrayInputStream bais = null; - ObjectInputStream ois = null; - boolean serialized = false; - try { - // serialize MessageProcessor - baos = new ByteArrayOutputStream(); - oos = new ObjectOutputStream(baos); - oos.writeObject(digitalTwinMessageProcessor); - - byte[] serializedMP = baos.toByteArray(); - serialized = true; - - bais = new ByteArrayInputStream(serializedMP); - ois = new ObjectInputStream(bais); - MessageProcessor incoming = (MessageProcessor) ois.readObject(); - } catch (Exception all) { - if(serialized) - throw new WorkbenchException("Could not deserialize MessageProcessor instance.", all); - else - throw new WorkbenchException("Could not serialize MessageProcessor instance", all); - } finally { - try { - if(baos != null) { - baos.flush(); - baos.close(); - } - if(oos != null) { - oos.flush(); - oos.close(); - } - - if(bais != null) { - bais.close(); - } - if(ois != null) { - ois.close(); - } - } catch(Exception any) {} // best effort to cleanup - } - - try { - Class mpType = digitalTwinMessageProcessor.getClass(); - // instantiate TwinInstance - MessageProcessor instance = mpType.getConstructor().newInstance(); - } catch (Exception e) { - throw new WorkbenchException("Could not instantiate MessageProcessor instance. Default constructor required.", e); - } - - try { - // instantiate TwinInstance - DigitalTwinBase instance = dtType.getConstructor().newInstance(); - } catch (Exception e) { - throw new WorkbenchException("Could not instantiate DigitalTwin instance. Default constructor required.", e); - } - } - - /** - * Add a key/value pair to {@link SharedData} for a model. - * @param modelName the model name. - * @param key the key. - * @param value the value. - */ - public void addSharedModelData(String modelName, String key, byte[] value) { - _twinExecutionEngine.getModelData(modelName).put(key, value); - } - - /** - * Add a key/value pair to the global {@link SharedData}. - * @param key the key. - * @param value the value. - */ - public void addGlobalModelData(String key, byte[] value) { - _twinExecutionEngine.getGlobalSharedData().put(key, value); - } - - @Override - public void close() throws Exception { - _twinExecutionEngine.close(); - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java deleted file mode 100644 index b983f6c..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -/** - * A Workbench exception indicates that a real-time or simulated twin caused an exception. - */ -public class WorkbenchException extends Exception { - - /** - * The string message for this workbench exception. - */ - String _message; - /** - * The inner cause of the workbench exception. - */ - Exception _innerException; - - /** - * Instantiates a WorkbenchException with the parameter message and inner exception - * - * @param message the message of this exception - * @param e the inner exception - */ - public WorkbenchException(String message, Exception e) { - _message = message; - _innerException = e; - } - - /** - * Instantiates a WorkbenchException with the parameter inner exception - * - * @param e the inner exception - */ - public WorkbenchException(Exception e) { - _innerException = e; - _message = e.getMessage(); - } - - /** - * Instantiates a WorkbenchException with the parameter message - * - * @param message the message of this exception - */ - public WorkbenchException(String message) { - _message = message; - } - - @Override - public String getMessage() { - return _message; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java deleted file mode 100644 index 8cc55b0..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitContext.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.time.Duration; - -class WorkbenchInitContext extends InitContext { - TwinExecutionEngine _twinExecutionEngine; - DigitalTwinBase _instance; - String _model; - String _id; - - WorkbenchInitContext(TwinExecutionEngine twinExecutionEngine, DigitalTwinBase instance, String model, String id) { - _twinExecutionEngine = twinExecutionEngine; - _instance = instance; - _model = model; - _id = id; - } - - @Override - public TimerActionResult startTimer(String timerName, Duration duration, TimerType timerType, TimerHandler timerHandler) { - return WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_instance, _model, _id, timerName, duration, timerType, timerHandler); - } - - @Override - public SharedData getSharedModelData() { - return new WorkbenchSharedData(_twinExecutionEngine.getModelData(_model)); - } - - @Override - public SharedData getSharedGlobalData() { - return new WorkbenchSharedData(_twinExecutionEngine.getGlobalSharedData()); - } - - @Override - public String getId() { - return _id; - } - - @Override - public String getModel() { - return _model; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java deleted file mode 100644 index 3128ad8..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchInitSimulationContext.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.InitSimulationContext; -import com.scaleoutsoftware.digitaltwin.core.SharedData; - -class WorkbenchInitSimulationContext implements InitSimulationContext { - SharedData _globalData; - SharedData _modelData; - - WorkbenchInitSimulationContext(SharedData globalData, SharedData modelData) { - _globalData = globalData; - _modelData = modelData; - } - - @Override - public SharedData getSharedModelData() { - return _modelData; - } - - @Override - public SharedData getSharedGlobalData() { - return _globalData; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java deleted file mode 100644 index 43b0a06..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchMessageListFactory.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.MessageFactory; - -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import java.util.List; - -class WorkbenchMessageListFactory implements MessageFactory { - private String _serializedJsonList; - private List _messages; - private Class _type; - - WorkbenchMessageListFactory(String serializedJson, Class type) { - _serializedJsonList = serializedJson; - _messages = null; - _type = type; - } - - WorkbenchMessageListFactory(List messages, Class type) { - _serializedJsonList = null; - _messages = messages; - _type = type; - } - - @Override - public Iterable getIncomingMessages() { - if (_messages != null) { - return (Iterable) _messages; - } else { - Gson gson = new Gson(); - return gson.fromJson(_serializedJsonList, getTypedList(_type)); - } - } - - private Type getTypedList(final Class paramClass) { - return new ParameterizedType() { - public Type[] getActualTypeArguments() { - return new Type[]{paramClass}; - } - - public Type getRawType() { - return List.class; - } - - public Type getOwnerType() { - return null; - } - }; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java deleted file mode 100644 index 2846a09..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchProcessingContext.java +++ /dev/null @@ -1,237 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.google.gson.Gson; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.*; -import java.util.logging.Level; - -class WorkbenchProcessingContext extends ProcessingContext { - final TwinExecutionEngine _twinExecutionEngine; - String _model; - String _id; - String _source; - DigitalTwinBase _twinInstance; - SimulationController _controller; - HashMap _modelData; - HashMap _globalData; - boolean _forceSave; - - WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, HashMap modelSharedData, HashMap globalSharedData, SimulationController simulationController) { - _twinExecutionEngine = twinExecutionEngine; - _controller = simulationController; - _modelData = modelSharedData; - _globalData = globalSharedData; - } - - WorkbenchProcessingContext(TwinExecutionEngine twinExecutionEngine, SimulationController controller) { - _twinExecutionEngine = twinExecutionEngine; - _controller = controller; - } - - void reset(String model, String id, String source, DigitalTwinBase instance) { - _model = model; - _id = id; - _twinInstance = instance; - _forceSave = false; - _source = source; - _modelData = _twinExecutionEngine.getModelData(model); - _globalData = _twinExecutionEngine.getGlobalSharedData(); - } - - void reset(String model, String id, String source) { - _model = model; - _id = id; - _forceSave = false; - _source = source; - _modelData = _twinExecutionEngine.getModelData(model); - _globalData = _twinExecutionEngine.getGlobalSharedData(); - } - - void resetInstance(DigitalTwinBase instance) { - _twinInstance = instance; - } - - boolean forceSave() { - return _forceSave; - } - - @Override - public SendingResult sendToDataSource(byte[] bytes) { - try { - return _twinExecutionEngine.sendToSource(_source, _model, _id, new String(bytes, StandardCharsets.UTF_8)); - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDataSource(Object jsonSerializableMessage) { - try { - List jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); - return _twinExecutionEngine.sendToSource(_source, _model, _id, jsonSerializableMessages); - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDataSource(List list) { - try { - return _twinExecutionEngine.sendToSource(_source, _model, _id, list); - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, byte[] bytes) { - List msgs = new LinkedList<>(); - msgs.add(bytes); - return sendToDigitalTwin(model, id, msgs); - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, Object jsonSerializableMessage) { - try { - if(_twinExecutionEngine.getTwinInstance(model, id) != null) { - List jsonSerializableMessages; - if(jsonSerializableMessage instanceof List) { - jsonSerializableMessages = (List)jsonSerializableMessage; - } else { - jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); - } - - return _twinExecutionEngine.run(model, id, null, jsonSerializableMessages) != null ? SendingResult.Handled : SendingResult.NotHandled; - } else { - return SendingResult.NotHandled; - } - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, String msg) { - return sendToDigitalTwin(model, id, msg.getBytes(StandardCharsets.UTF_8)); - } - - @Override - public SendingResult sendToDigitalTwin(String model, String id, List list) { - if( (model == null || model.isEmpty()) || - (id == null || id.isEmpty()) || - (list == null || list.isEmpty())) { - return SendingResult.NotHandled; - } - Gson gson = new Gson(); - List msgs = new LinkedList<>(); - for(byte[] serialMsg : list) { - msgs.add(new String(serialMsg, StandardCharsets.UTF_8)); - } - String json = gson.toJson(msgs); - try { - if(_twinExecutionEngine.getTwinInstance(model, id) != null) { - return _twinExecutionEngine.run(model, id, null, json) != null ? SendingResult.Handled : SendingResult.NotHandled; - } else { - return SendingResult.NotHandled; - } - - } catch (WorkbenchException e) { - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult sendAlert(String alertProviderName, AlertMessage alertMessage) { - if(alertProviderName.isBlank() || alertProviderName.isEmpty() || alertMessage == null) return SendingResult.NotHandled; - else if (!_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) return SendingResult.NotHandled; - else { - if(_twinExecutionEngine.hasAlertProviderConfiguration(_model, alertProviderName)) { - _twinExecutionEngine.recordAlertMessage(_model, alertProviderName, alertMessage); - } - return SendingResult.Handled; - } - } - - @Override - public PersistenceProvider getPersistenceProvider() { - return null; - } - - @Override - public String getDataSourceId() { - return _id; - } - - @Override - public String getDigitalTwinModel() { - return _model; - } - - @Override - public void logMessage(Level level, String msg) { - _twinExecutionEngine.logMessage(_model, new LogMessage(level, msg)); - } - - @Override - public TimerActionResult startTimer(String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { - TimerActionResult ret = WorkbenchTimerService.startTimer(_twinExecutionEngine, (T)_twinInstance, _model, _id, timerName, interval, timerType, timerHandler); - if(ret != TimerActionResult.Success) { - _forceSave = false; - } else { - _forceSave = true; - } - return ret; - } - - @Override - public TimerActionResult stopTimer(String timerName) { - TimerActionResult ret = WorkbenchTimerService.stopTimer(_twinExecutionEngine, _twinInstance, _model, _id, timerName); - if(ret != TimerActionResult.Success) { - _forceSave = false; - } else { - _forceSave = true; - } - return ret; - } - - @Override - public Date getCurrentTime() { - return _twinExecutionEngine.getTime(_model); - } - - @Override - public SimulationController getSimulationController() { - return _controller; - } - - @Override - public SharedData getSharedModelData() { - return new WorkbenchSharedData(_modelData); - } - - @Override - public SharedData getSharedGlobalData() { - return new WorkbenchSharedData(_globalData); - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java deleted file mode 100644 index 0712e9a..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSharedData.java +++ /dev/null @@ -1,112 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus; -import com.scaleoutsoftware.digitaltwin.core.CacheResult; -import com.scaleoutsoftware.digitaltwin.core.SharedData; - -import java.util.HashMap; - -class WorkbenchSharedData implements SharedData { - private final HashMap data; - - public WorkbenchSharedData(HashMap shared) { - data = shared; - } - @Override - public CacheResult get(String s) { - return new CacheResult() { - @Override - public String getKey() { - return s; - } - - @Override - public byte[] getValue() { - return data.getOrDefault(s, null); - } - - @Override - public CacheOperationStatus getStatus() { - return data.containsKey(s) ? CacheOperationStatus.ObjectRetrieved : CacheOperationStatus.ObjectDoesNotExist; - } - }; - } - - @Override - public CacheResult put(String s, byte[] bytes) { - data.put(s, bytes); - return new CacheResult() { - @Override - public String getKey() { - return s; - } - - @Override - public byte[] getValue() { - return bytes; - } - - @Override - public CacheOperationStatus getStatus() { - return CacheOperationStatus.ObjectPut; - } - }; - } - - @Override - public CacheResult remove(String s) { - byte[] v = data.remove(s); - return new CacheResult() { - @Override - public String getKey() { - return s; - } - - @Override - public byte[] getValue() { - return v; - } - - @Override - public CacheOperationStatus getStatus() { - return v == null ? CacheOperationStatus.ObjectDoesNotExist : CacheOperationStatus.ObjectRemoved; - } - }; - } - - @Override - public CacheResult clear() { - data.clear(); - return new CacheResult() { - @Override - public String getKey() { - return null; - } - - @Override - public byte[] getValue() { - return null; - } - - @Override - public CacheOperationStatus getStatus() { - return CacheOperationStatus.CacheCleared; - } - }; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java deleted file mode 100644 index 611d7af..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationController.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; - -class WorkbenchSimulationController implements SimulationController { - TwinExecutionEngine _engine; - SimulationScheduler _scheduler; - private long _requestedDelay; - private boolean _delayRequested; - private boolean _deleted; - private boolean _enqueue; - private String _modelName; - private String _id; - private SimulationStatus _simulationStatus = SimulationStatus.Running; - - public WorkbenchSimulationController(TwinExecutionEngine engine, SimulationScheduler scheduler) { - _engine = engine; - _scheduler = scheduler; - } - - @Override - public Duration getSimulationTimeIncrement() { - return null; - } - - @Override - public Date getSimulationStartTime() { - return _scheduler.getSimulationStartTime(); - } - - @Override - public SendingResult delay(Duration duration) { - _requestedDelay = duration.toMillis(); - _delayRequested = true; - return SendingResult.Handled; - } - - @Override - public SendingResult delayIndefinitely() { - _requestedDelay = 0x0000e677d21fdbffL; - _delayRequested = true; - return SendingResult.Handled; - } - - @Override - public SendingResult emitTelemetry(String modelName, byte[] bytes) { - try { - _engine.run(modelName, _id, _modelName, String.format("[%s]", new String(bytes, StandardCharsets.UTF_8))); - return SendingResult.Handled; - } catch (WorkbenchException e) { - e.printStackTrace(); - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult emitTelemetry(String modelName, Object jsonSerializableMessage) { - try { - if(_engine.hasModel(modelName)) { - List jsonSerializableMessages = new LinkedList<>(); - jsonSerializableMessages.add(jsonSerializableMessage); - _engine.run(modelName, _id, _modelName, jsonSerializableMessages); - return SendingResult.Handled; - } else { - return SendingResult.NotHandled; - } - - } catch (WorkbenchException e) { - e.printStackTrace(); - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult createInstance(String modelName, String id, T instance) { - try { - _engine.createInstance(modelName, id, instance); - return SendingResult.Handled; - } catch (Exception e) { - e.printStackTrace(); - return SendingResult.NotHandled; - } - } - - @Override - public SendingResult createInstanceFromPersistenceStore(String modelName, String id) { - try { - throw new NoSuchMethodException("Not available on the workbench."); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - @Override - public SendingResult createInstanceFromPersistenceStore(String modelName, String id, T defaultInstance) { - try { - throw new NoSuchMethodException("Not available on the workbench."); - } catch (NoSuchMethodException e) { - throw new RuntimeException(e); - } - } - - @Override - public SendingResult deleteInstance(String modelName, String id) { - _engine.deleteSimulationInstance(modelName, id); - return SendingResult.Handled; - } - - @Override - public SendingResult deleteThisInstance() { - _engine.deleteSimulationInstance(_modelName, _id); - _deleted = true; - return SendingResult.Handled; - } - - @Override - public void runThisInstance() { - try { - _scheduler.runThisInstance(_modelName, _id); - _enqueue = false; - } catch (WorkbenchException e) { - throw new RuntimeException(e); - } - - } - - @Override - public SimulationStatus stopSimulation() { - _simulationStatus = SimulationStatus.InstanceRequestedStop; - return _simulationStatus; - } - - public boolean delayRequested() { - return _delayRequested; - } - - public void reset(String modelName, String id) { - _modelName = modelName; - _id = id; - _requestedDelay = Long.MIN_VALUE; - _delayRequested = false; - _deleted = false; - _enqueue = true; - } - - public long getRequestedDelay() { - return _requestedDelay; - } - - public boolean deleted() { - return _deleted; - } - - public boolean enqueue() { - return _enqueue; - } - - public SimulationStatus getSimulationStatus() { - return _simulationStatus; - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java deleted file mode 100644 index 4e7acff..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchSimulationFlags.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -enum WorkbenchSimulationFlags { - // Start the simulation - Start, - // Run the simulation - Run, - // Stop the simulation - Stop -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java deleted file mode 100644 index c5911a7..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerService.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.time.Duration; - -class WorkbenchTimerService { - - static TimerActionResult startTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName, Duration interval, TimerType timerType, TimerHandler timerHandler) { - if(timerName == null || timerName.isBlank() || timerName.isEmpty() || interval == null || - interval.isZero() || interval.isNegative() || timerType == null || timerHandler == null) { - String msg = String.format("Empty, blank, zero, or null parameter provided: timerName %s interval %s timerType %s timerHandler %s", - timerName, interval, timerType, timerHandler); - throw new IllegalArgumentException(msg); - - } - if (instance.TimerHandlers.size() >= Constants.MAX_TIMER_COUNT) // all timer slots are occupied - return TimerActionResult.FailedTooManyTimers; - - if(instance.TimerHandlers.containsKey(timerName)) return TimerActionResult.FailedTimerAlreadyExists; - - int timerId = -1; - - boolean[] taken = new boolean[Constants.MAX_TIMER_COUNT]; - // List of all timer Ids - for (TimerMetadata md : instance.TimerHandlers.values()) { - taken[md.getTimerId()] = true; - } - - for(int i = 0; i < taken.length; i++) { - if(!taken[i]) { - timerId = i; - break; - } - } - - twinExecutionEngine.addTimer(model, id, timerName, timerType, interval, timerHandler); - - TimerMetadata metadata = new TimerMetadata<>(timerHandler, timerType, interval.toMillis(), timerId); - instance.TimerHandlers.put(timerName, metadata); - return TimerActionResult.Success; - } - - static TimerActionResult stopTimer(TwinExecutionEngine twinExecutionEngine, T instance, String model, String id, String timerName) { - twinExecutionEngine.stopTimer(model, id, timerName); - instance.TimerHandlers.remove(timerName); - return TimerActionResult.Success; - } - -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java deleted file mode 100644 index 6118b9e..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/WorkbenchTimerTask.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.scaleoutsoftware.digitaltwin.core.*; - -import java.time.Duration; -import java.util.TimerTask; - -class WorkbenchTimerTask extends TimerTask { - TwinExecutionEngine _engine; - String _modelName; - String _id; - String _timerName; - TwinProxy _proxy; - TimerType _type; - Duration _interval; - TimerHandler _handler; - - WorkbenchTimerTask(TwinExecutionEngine engine, String modelName, String id, String timerName, TwinProxy proxy, TimerType type, Duration interval, TimerHandler handler) { - _engine = engine; - _modelName = modelName; - _id = id; - _timerName = timerName; - _proxy = proxy; - _type = type; - _interval = interval; - _handler = handler; - } - - @Override - public void run() { - DigitalTwinBase instance = _proxy.getInstance(); - WorkbenchProcessingContext context = new WorkbenchProcessingContext(_engine, null); - context.reset(_modelName, _id, null, instance); - ProcessingResult result; - synchronized (instance) { - result = _handler.onTimedMessage(_timerName, instance, context); - } - switch (result) { - case UpdateDigitalTwin: - _engine.updateTwin(_modelName, _id, _proxy); - break; - case NoUpdate: - break; - default: - throw new RuntimeException(new WorkbenchException("Unknown return type from timer handler.")); - } - } -} diff --git a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java b/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java deleted file mode 100644 index c8df4a2..0000000 --- a/docs/digitaltwin-core-docs/src/main/java/com/scaleoutsoftware/digitaltwin/development/package-info.java +++ /dev/null @@ -1,21 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/** - * Digital twin development API - Develop and test simulation/real-time digital twins. - */ -package com.scaleoutsoftware.digitaltwin.development; - diff --git a/docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java b/docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java deleted file mode 100644 index 4864388..0000000 --- a/docs/digitaltwin-core-docs/src/test/java/com/scaleoutsoftware/digitaltwin/development/TestWorkbench.java +++ /dev/null @@ -1,873 +0,0 @@ -/* - Copyright (c) 2025 by ScaleOut Software, Inc. - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ -package com.scaleoutsoftware.digitaltwin.development; - -import com.google.gson.Gson; -import com.scaleoutsoftware.digitaltwin.core.*; -import org.junit.Assert; -import org.junit.Test; - -import java.io.Serializable; -import java.nio.charset.StandardCharsets; -import java.time.Duration; -import java.util.*; -import java.util.concurrent.atomic.AtomicInteger; -import java.util.logging.Level; - -public class TestWorkbench { - public static class SimpleDigitalTwin extends DigitalTwinBase { - private String _stringProp; - public SimpleDigitalTwin() {} - public SimpleDigitalTwin(String stringProp) { - _stringProp = stringProp; - } - } - - public static class SimpleMessage { - String stringChange; - int intChange; - String payload; - public SimpleMessage(String s, int i) { - stringChange = s; - intChange = i; - } - } - - public static class SimpleMessageProcessor extends MessageProcessor implements Serializable { - - public SimpleMessageProcessor() {} - - @Override - public ProcessingResult processMessages(ProcessingContext processingContext, SimpleDigitalTwin instance, Iterable messages) { - Gson gson = new Gson(); - Date currentTime = processingContext.getCurrentTime(); - PersistenceProvider provider = processingContext.getPersistenceProvider(); - if(processingContext.getDigitalTwinModel().compareTo(instance.getModel()) != 0) { - throw new IllegalStateException(String.format("context.getModel and instance.getModel difer. %s:%s", processingContext.getDigitalTwinModel(), instance.getModel())); - } - if(processingContext.getDataSourceId().compareTo(instance.getId()) != 0) { - throw new IllegalStateException(String.format("context.getModel and instance.getModel difer. %s:%s", processingContext.getDigitalTwinModel(), instance.getModel())); - } - - if(instance.getModel().compareTo("SimSimple") == 0) {// if this is a simulation model... - for(SimpleMessage msg : messages) { - System.out.println(msg.stringChange); - } - } else { - for(SimpleMessage msg : messages) { - switch (msg.stringChange) { - case "SendToSource": - processingContext.sendToDataSource(new SimpleMessage("Hello from data source!", 10)); - break; - case "SendToTwin": - String jsonMsg = gson.toJson(msg); - byte[] bytes = jsonMsg.getBytes(StandardCharsets.UTF_8); - processingContext.sendToDigitalTwin(msg.payload == null ? msg.payload : "model", msg.intChange+"",bytes); - break; - case "LogMessage": - processingContext.logMessage(Level.INFO, msg.payload); - break; - case "StartTimer": - processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.Recurring, - new TimerHandler() { - @Override - public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { - System.out.println("Hello from real-time timer."); - return ProcessingResult.UpdateDigitalTwin; - } - }); - break; - case "StopTimer": - processingContext.stopTimer("timer"); - break; - case "SharedData": - SharedData sharedData = processingContext.getSharedModelData(); - CacheResult result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); - if(result.getStatus() == CacheOperationStatus.ObjectPut) { - System.out.println("Successfully stored object in model storage."); - } - result = sharedData.get("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { - System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); - } - result = sharedData.remove("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { - System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from model storage."); - } - result = sharedData.put("modelTest", "assert".getBytes(StandardCharsets.UTF_8)); - sharedData = processingContext.getSharedGlobalData(); - result = sharedData.put("Hello", "Some string...".getBytes(StandardCharsets.UTF_8)); - if(result.getStatus() == CacheOperationStatus.ObjectPut) { - System.out.println("Successfully stored object in global storage."); - } - result = sharedData.get("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRetrieved) { - System.out.println("Successfully retrieved " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); - } - result = sharedData.remove("Hello"); - if(result.getStatus() == CacheOperationStatus.ObjectRemoved) { - System.out.println("Successfully removed " + new String(result.getValue(), StandardCharsets.UTF_8) + " from global storage."); - } - result = sharedData.put("globalTest", "assert".getBytes(StandardCharsets.UTF_8)); - break; - case "WakeUp": - SimulationController controller = processingContext.getSimulationController(); - instance._stringProp = "WakeUp"; - System.out.println("Calling run this twin..."); - controller.runThisInstance(); - break; - default: - break; - } - } - } - return ProcessingResult.UpdateDigitalTwin; - } - } - - public static class RealTimeCar extends DigitalTwinBase { - private int _tirePressure; - public RealTimeCar() { _tirePressure=0; } - public RealTimeCar(int startingTirePressure) { - _tirePressure = startingTirePressure; - } - - public void incrementTirePressure(int increment) { - _tirePressure += increment; - } - - public int getTirePressure() { - return _tirePressure; - } - } - - public static class TirePressureMessage { - final int _pressureChange; - public TirePressureMessage(int pressureChange) { - _pressureChange = pressureChange; - } - - public int getPressureChange() { - return _pressureChange; - } - } - - public static class RealTimeCarMessageProcessor extends MessageProcessor implements Serializable { - final int TIRE_PRESSURE_FULL = 100; - @Override - public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable messages) throws Exception { - // apply the updates from the messages - for(TirePressureMessage message : messages) { - car.incrementTirePressure(message.getPressureChange()); - } - if(car.getTirePressure() > TIRE_PRESSURE_FULL) { - processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure())); - } - return ProcessingResult.UpdateDigitalTwin; - } - } - - public static class SimulationPump extends DigitalTwinBase { - private double _tirePressureChange; - private boolean _tirePressureReached = false; - public SimulationPump() {} - public SimulationPump(double pressureChange) { - _tirePressureChange = pressureChange; - } - - public double getTirePressureChange() { - return _tirePressureChange; - } - - public void setTirePressureReached() { - _tirePressureReached = true; - } - - public boolean isTireFull() { - return _tirePressureReached; - } - } - - public static class SimulatedPumpMessageProcessor extends MessageProcessor implements Serializable { - @Override - public ProcessingResult processMessages(ProcessingContext processingContext, SimulationPump simCar, Iterable messages) throws Exception { - // apply the updates from the messages - simCar.setTirePressureReached(); - return ProcessingResult.UpdateDigitalTwin; - } - } - - public static class PumpSimulationProcessor extends SimulationProcessor implements Serializable { - @Override - public ProcessingResult processModel(ProcessingContext processingContext, SimulationPump simPump, Date date) { - SimulationController controller = processingContext.getSimulationController(); - if(simPump.isTireFull()) { - controller.deleteThisInstance(); - } else { - int change = (int) (100 * simPump.getTirePressureChange()); - controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change)); - } - return ProcessingResult.UpdateDigitalTwin; - } - } - - public static class SimpleSimProcessor extends SimulationProcessor implements Serializable { - private Gson _gson = new Gson(); - private AtomicInteger timesInvoked = new AtomicInteger(0); - private boolean _useJson; - private String _modelIdToMessage; - private String _instanceIdToMessage; - - public SimpleSimProcessor(boolean json) { - _useJson = json; - } - - public SimpleSimProcessor(String modelIdToMessage, String instanceIdToMessage) { - _useJson = false; - _modelIdToMessage = modelIdToMessage; - _instanceIdToMessage = instanceIdToMessage; - } - - public int getTimesInvoked() { - return timesInvoked.get(); - } - - @Override - public ProcessingResult processModel(ProcessingContext processingContext, SimpleDigitalTwin simpleDigitalTwin, Date date) { - timesInvoked.addAndGet(1); - SimulationController controller = processingContext.getSimulationController(); - if(simpleDigitalTwin.getId().compareTo("stop") == 0) { - controller.stopSimulation(); - return ProcessingResult.UpdateDigitalTwin; - } else if(simpleDigitalTwin.getId().contains("delay")) { - controller.delay(Duration.ofSeconds(600)); - return ProcessingResult.UpdateDigitalTwin; - } else if (simpleDigitalTwin.getId().contains("timer")) { - processingContext.startTimer("timer", Duration.ofMillis(1000), TimerType.OneTime, new TimerHandler<>() { - @Override - public ProcessingResult onTimedMessage(String s, DigitalTwinBase digitalTwinBase, ProcessingContext processingContext) { - System.out.println("timer called!"); - return ProcessingResult.UpdateDigitalTwin; - } - }); - return ProcessingResult.UpdateDigitalTwin; - } else if (simpleDigitalTwin.getId().contains("log")) { - processingContext.logMessage(Level.INFO, simpleDigitalTwin._stringProp); - processingContext.logMessage(Level.WARNING, simpleDigitalTwin._stringProp); - processingContext.logMessage(Level.SEVERE, simpleDigitalTwin._stringProp); - return ProcessingResult.UpdateDigitalTwin; - } else if (simpleDigitalTwin.getId().contains("alert")) { - processingContext.sendAlert("alert", new AlertMessage(simpleDigitalTwin.getId(), simpleDigitalTwin.getId(), simpleDigitalTwin._stringProp)); - return ProcessingResult.UpdateDigitalTwin; - } else if (simpleDigitalTwin.getId().contains("sleeper")) { - if(simpleDigitalTwin._stringProp.compareTo("WakeUp") == 0) { - System.out.println("Model ran after runThisInstance"); - simpleDigitalTwin._stringProp = "asleep"; - } - System.out.println("Going to sleep..."); - controller.delayIndefinitely(); - return ProcessingResult.UpdateDigitalTwin; - } else if (simpleDigitalTwin.getId().contains("waker")) { - System.out.println("Waking up sleeper..."); - processingContext.sendToDigitalTwin(_modelIdToMessage, _instanceIdToMessage, new SimpleMessage("WakeUp", 23)); - return ProcessingResult.UpdateDigitalTwin; - } else if (simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { - return ProcessingResult.UpdateDigitalTwin; - } - long delay = Long.parseLong(simpleDigitalTwin.getId()); - controller.delay(Duration.ofSeconds(delay)); - if(_useJson) { - byte[] msg = _gson.toJson(new SimpleMessage("SendToSource", 23)).getBytes(StandardCharsets.UTF_8); - controller.emitTelemetry("Simple", msg); - } else { - SimpleMessage telemetry = new SimpleMessage("SendToSource", 23); - controller.emitTelemetry("Simple", telemetry); - } - return ProcessingResult.UpdateDigitalTwin; - } - - @Override - public ProcessingResult onInitSimulation(InitSimulationContext ctx, SimpleDigitalTwin simpleDigitalTwin, Date date) { - if(simpleDigitalTwin.getId().compareTo("initSimulation") == 0) { - timesInvoked.set(1000); - } - - return ProcessingResult.UpdateDigitalTwin; - } - } - - @Test - public void TestWorkbenchNoInstances() throws WorkbenchException { - Gson gson = new Gson(); - SimulationStep result; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class); - - result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); - Assert.assertSame(SimulationStatus.NoRemainingWork, result.getStatus()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchOnlySimulationInstances() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - Gson gson = new Gson(); - SimulationStep result; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - for (int i = 1; i < 2; i++) { - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); - workbench.addInstance("SimSimple", "" + i, instance); - } - - result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(60, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - - - } - - @Test - public void TestWorkbenchSample() throws WorkbenchException { - long expectedStop; - SimulationStep step; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class); - workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class); - - workbench.addInstance("SimPump", "23", new SimulationPump(0.29d)); - long start = System.currentTimeMillis(); - long end = start + 60000; - expectedStop = start + 5000; - step = workbench.initializeSimulation(start, end, 1000); - - while (step.getStatus() == SimulationStatus.Running) { - step = workbench.step(); - HashMap realTimeCars = workbench.getInstances("RealTimeCar"); - RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23"); - System.out.println("rtCar: " + rtCar.getTirePressure()); - } - Assert.assertEquals(expectedStop, step.getTime()); - System.out.println("Simulation completed. Sim status: " + step.getStatus() + " endTime: " + step.getTime()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchSampleRun() throws WorkbenchException { - long expectedStop; - SimulationStep step; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class); - workbench.addSimulationModel("SimModel", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class); - - workbench.addInstance("SimModel", "23", new SimulationPump(0.29d)); - long start = System.currentTimeMillis(); - long end = start + 60000; - expectedStop = start + 5000; - step = workbench.runSimulation(start, end, 1, 1000); - Assert.assertEquals(expectedStop, step.getTime()); - System.out.println("Simulation completed. Sim status: " + step.getStatus() + " endTime: " + step.getTime()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchSpeedup() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - Gson gson = new Gson(); - SimulationStep result; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - for (int i = 0; i < 1000; i++) { - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + i); - workbench.addInstance("SimSimple", "" + i, instance); - } - - long start = System.currentTimeMillis(); - long stop = start + 60000; - result = workbench.runSimulation(System.currentTimeMillis(), stop, 100, 1000); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - - // each id (0-999) delays for it's id in seconds - Assert.assertEquals(1249, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchDebug() throws WorkbenchException{ - Gson gson = new Gson(); - int numInstance = 10; - int numItterations = 0; - for(int i = 0; i < 20; i ++) { - SimpleSimProcessor processor = new SimpleSimProcessor(i >= 10); - SimulationStep result; - long start; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - for (int twinCount = 0; twinCount < 1000; twinCount++) { - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + twinCount); - workbench.addInstance("SimSimple", "" + twinCount, instance); - } - result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); - start = System.currentTimeMillis(); - while (result.getStatus() == SimulationStatus.Running) { - result = workbench.step(); - if (result.getStatus() == SimulationStatus.Running) { - numItterations++; - } - } - long stop = System.currentTimeMillis(); - System.out.println("RunTime: " + (stop-start)); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - // each id (0-999) delays for it's id in seconds, processor.getTimesInvoked()); - Assert.assertEquals(1249, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - } - - @Test - public void testWorkbenchDebugOnlySimulationInstances() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - Gson gson = new Gson(); - long stopTimeMs; - SimulationStep step; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); - workbench.addInstance("SimSimple", "" + 100, instance); - - long startTimeMs = System.currentTimeMillis(); - stopTimeMs = startTimeMs + 60000; - long expectedTm = startTimeMs; - step = workbench.initializeSimulation(startTimeMs, stopTimeMs, 1000); - while (step.getStatus() == SimulationStatus.Running) { - step = workbench.step(); - Assert.assertEquals(expectedTm, step.getTime()); - expectedTm += 1000; - } - Assert.assertSame(SimulationStatus.EndTimeReached, step.getStatus()); - Assert.assertEquals(stopTimeMs, step.getTime()); - Assert.assertEquals(60, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchStop() throws WorkbenchException{ - Gson gson = new Gson(); - int numInstance = 10; - int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); - SimulationStep result; - long start; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - for (int twinCount = 0; twinCount < 1000; twinCount++) { - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + twinCount); - workbench.addInstance("SimSimple", "" + twinCount, instance); - } - DigitalTwinBase instance = new SimpleDigitalTwin("stop"); - workbench.addInstance("SimSimple", "stop", instance); - - result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); - start = System.currentTimeMillis(); - while (result.getStatus() == SimulationStatus.Running) { - result = workbench.step(); - } - long stop = System.currentTimeMillis(); - System.out.println("RunTime: " + (stop-start)); - Assert.assertSame(SimulationStatus.InstanceRequestedStop, result.getStatus()); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - - @Test - public void TestWorkbenchHugeDelays() throws WorkbenchException{ - Gson gson = new Gson(); - int numInstance = 10; - int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); - SimulationStep result; - long start; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - for (int twinCount = 0; twinCount < 1000; twinCount++) { - DigitalTwinBase instance = new SimpleDigitalTwin("delay" + twinCount); - workbench.addInstance("SimSimple", "delay" + twinCount, instance); - } - - result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); - start = System.currentTimeMillis(); - while (result.getStatus() == SimulationStatus.Running) { - result = workbench.step(); - } - long stop = System.currentTimeMillis(); - System.out.println("RunTime: " + (stop-start)); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(1000, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - - @Test - public void TestWorkbenchTimer() throws WorkbenchException{ - Gson gson = new Gson(); - int numInstance = 10; - int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); - SimulationStep result; - long start; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - for (int twinCount = 0; twinCount < 1; twinCount++) { - DigitalTwinBase instance = new SimpleDigitalTwin("timer" + twinCount); - workbench.addInstance("SimSimple", "timer" + twinCount, instance); - } - - result = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1000); - start = System.currentTimeMillis(); - while (result.getStatus() == SimulationStatus.Running) { - result = workbench.step(); - } - long stop = System.currentTimeMillis(); - System.out.println("RunTime: " + (stop-start)); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(60, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - - @Test - public void TestWorkbenchRealtimeTimer() throws WorkbenchException, InterruptedException { - Gson gson = new Gson(); - int numInstance = 10; - int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - - for (int twinCount = 0; twinCount < 1; twinCount++) { - DigitalTwinBase instance = new SimpleDigitalTwin("timer" + twinCount); - workbench.addInstance("Simple", "timer" + twinCount, instance); - } - - List messages = new LinkedList<>(); - messages.add(new SimpleMessage("StartTimer", 0)); - workbench.send("Simple", "timer0", messages); - - Thread.sleep(3000); - messages = new LinkedList<>(); - messages.add(new SimpleMessage("StopTimer", 0)); - workbench.send("Simple", "timer0", messages); - Thread.sleep(2000); - } catch (Exception e) { - throw new RuntimeException(e); - } - - } - - @Test - public void TestWorkbenchRealtimeTimerScope() throws WorkbenchException, InterruptedException { - Gson gson = new Gson(); - int numInstance = 10; - int numItterations = 0; - SimpleSimProcessor processor = new SimpleSimProcessor(false); - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - - for(int twinCount = 0; twinCount < 1; twinCount++) { - DigitalTwinBase instance = new SimpleDigitalTwin("timer"+twinCount); - workbench.addInstance("Simple", "timer" + twinCount, instance); - } - - List messages = new LinkedList<>(); - messages.add(new SimpleMessage("StartTimer", 0)); - workbench.send("Simple", "timer0", messages); - Thread.sleep(3000); - } catch (Exception e) { - Assert.fail(); - } - Thread.sleep(5000); - } - - @Test - public void TestWorkbenchSimulationLogMessage() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - Gson gson = new Gson(); - String logMessageContent; - long exp; - long start; - long stop; - List messages; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - logMessageContent = "this is a log message"; - for (int i = 0; i < 1; i++) { - DigitalTwinBase instance = new SimpleDigitalTwin(logMessageContent); - workbench.addInstance("SimSimple", "log" + i, instance); - } - - exp = 60; - start = System.currentTimeMillis(); - stop = start + (exp * 1000); - SimulationStep result = workbench.runSimulation(start, stop, 1, 1000); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(stop, result.getTime()); - Assert.assertEquals(exp, processor.getTimesInvoked()); - messages = workbench.getLoggedMessages("SimSimple", start); - Assert.assertEquals(messages.size(), exp * 3); - for (LogMessage message : messages) { - Assert.assertSame(logMessageContent, message.getMessage()); - Assert.assertTrue(message.getSeverity() == Level.INFO || - message.getSeverity() == Level.WARNING || - message.getSeverity() == Level.SEVERE); - Assert.assertTrue(message.getTimestamp() >= start && message.getTimestamp() < stop); - } - - messages = workbench.getLoggedMessages("SimSimple", 0L); - Assert.assertEquals(messages.size(), exp * 3); - for (LogMessage message : messages) { - Assert.assertSame(logMessageContent, message.getMessage()); - Assert.assertTrue(message.getSeverity() == Level.INFO || - message.getSeverity() == Level.WARNING || - message.getSeverity() == Level.SEVERE); - Assert.assertTrue(message.getTimestamp() >= start && message.getTimestamp() < stop); - } - - messages = workbench.getLoggedMessages("SimSimple", start + 5000); - Assert.assertEquals(messages.size(), (exp*3 - (5*3))); - for(LogMessage message : messages) { - Assert.assertSame(logMessageContent, message.getMessage()); - Assert.assertTrue(message.getSeverity() == Level.INFO || - message.getSeverity() == Level.WARNING || - message.getSeverity() == Level.SEVERE); - Assert.assertTrue(message.getTimestamp() >= start && message.getTimestamp() < stop); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchSimulationAlertMessage() throws WorkbenchException { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - Gson gson = new Gson(); - SimulationStep result; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addAlertProvider("SimSimple", new AlertProviderConfiguration("test", "www.url.com", "integrationkey", "routingKey", "alert", "entityId")); - - String alertMessageContent = "this is an alert message"; - String id = "alert"; - for (int i = 0; i < 1; i++) { - DigitalTwinBase instance = new SimpleDigitalTwin(alertMessageContent); - workbench.addInstance("SimSimple", id, instance); - } - long exp = 60; - long start = System.currentTimeMillis(); - long stop = start + (exp * 1000); - result = workbench.runSimulation(System.currentTimeMillis(), System.currentTimeMillis() + 60000, 1, 1000); - Assert.assertSame(SimulationStatus.EndTimeReached, result.getStatus()); - Assert.assertEquals(stop, result.getTime()); - Assert.assertEquals(exp, processor.getTimesInvoked()); - List messages = workbench.getAlertMessages("SimSimple", "alert"); - Assert.assertEquals(messages.size(), exp); - for(AlertMessage msg : messages) { - Assert.assertSame(msg.getMessage(), alertMessageContent); - Assert.assertSame(msg.getSeverity(), id); - Assert.assertSame(msg.getTitle(), id); - Assert.assertNull(msg.getOptionalTwinInstanceProperties()); - } - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test(expected = WorkbenchException.class) - public void TestWorkbenchException() throws Exception { - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", null, SimpleDigitalTwin.class, SimpleMessage.class); - } catch (Exception e) { - throw e; - } - } - - @Test - public void TestWorkbenchPeek() throws Exception { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - long stopTimeMs; - SimulationStep step; - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - - DigitalTwinBase instance = new SimpleDigitalTwin("hello" + 100); - workbench.addInstance("SimSimple", "" + 100, instance); - - long startTimeMs = System.currentTimeMillis(); - stopTimeMs = startTimeMs + 60000; - long expectedTm = startTimeMs; - step = workbench.initializeSimulation(startTimeMs, stopTimeMs, 1000); - while (step.getStatus() == SimulationStatus.Running) { - step = workbench.step(); - Assert.assertEquals(expectedTm, step.getTime()); - expectedTm += 1000; - if(step.getStatus() == SimulationStatus.Running) { - Date peek = workbench.peek(); - Assert.assertEquals(expectedTm, peek.getTime()); - } - } - Assert.assertSame(SimulationStatus.EndTimeReached, step.getStatus()); - Assert.assertEquals(stopTimeMs, step.getTime()); - Assert.assertEquals(60, processor.getTimesInvoked()); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test - public void TestWorkbenchGenerateModelSchema() throws Exception { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - String schemaAsJson = workbench.generateModelSchema("Simple"); - Assert.assertSame(schemaAsJson, "{\"modelType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleDigitalTwin\",\"messageProcessorType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessageProcessor\",\"messageType\":\"com.scaleoutsoftware.digitaltwin.development.TestWorkbench$SimpleMessage\",\"assemblyName\":\"NOT_USED_BY_JAVA_MODELS\",\"enablePersistence\":false,\"enableSimulationSupport\":false,\"alertProviders\":[]}"); - String dir = workbench.generateModelSchema("SimSimple", System.getProperty("user.dir")); - Assert.assertEquals(String.format("%s\\model.json", System.getProperty("user.dir")), dir); - } catch (Exception e) { - throw new RuntimeException(e); - } - } - - @Test (expected = WorkbenchException.class) - public void TestWorkbenchGenerateModelSchemaExceptionally() throws Exception { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("SimSimple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - String schemaAsJson = workbench.generateModelSchema(""); - Assert.assertNotNull(schemaAsJson); - } catch (Exception e) { - throw e; - } - } - - @Test - public void TestWorkbenchSharedData() throws Exception { - try (Workbench workbench = new Workbench()) { - workbench.addRealTimeModel("Simple", new SimpleMessageProcessor(), SimpleDigitalTwin.class, SimpleMessage.class); - LinkedList messages = new LinkedList<>(); - messages.add(new SimpleMessage("SharedData", 29)); - workbench.send("Simple", "23", messages); - CacheResult result = workbench.getSharedModelData("Simple").get("modelTest"); - Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); - Assert.assertEquals("modelTest", result.getKey()); - Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); - result = workbench.getSharedGlobalData("Simple").get("globalTest"); - Assert.assertEquals(CacheOperationStatus.ObjectRetrieved, result.getStatus()); - Assert.assertEquals("globalTest", result.getKey()); - Assert.assertEquals("assert", new String(result.getValue(), StandardCharsets.UTF_8)); - } catch (Exception e) { - throw e; - } - } - - @Test - public void TestWorkbenchRunThisInstance() throws Exception { - try (Workbench workbench = new Workbench()) { - workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), new SimpleSimProcessor("Simple2", "sleeper"), SimpleDigitalTwin.class, SimpleMessage.class); - workbench.addSimulationModel("Simple2", new SimpleMessageProcessor(), new SimpleSimProcessor(false), SimpleDigitalTwin.class, SimpleMessage.class); - - workbench.addInstance("Simple", "waker", new SimpleDigitalTwin("waker")); - workbench.addInstance("Simple2", "sleeper", new SimpleDigitalTwin("sleeper")); - long startTimeMs = System.currentTimeMillis(); - long stopTimeMs = startTimeMs + 15000L; - long step = 1000L; - workbench.runSimulation(startTimeMs, stopTimeMs, 1, step); - SimpleDigitalTwin waker = (SimpleDigitalTwin) workbench.getInstances("Simple").get("waker"); - SimpleDigitalTwin sleeper = (SimpleDigitalTwin) workbench.getInstances("Simple2").get("sleeper"); - Assert.assertNotNull(waker); - Assert.assertNotNull(sleeper); - Assert.assertEquals("waker", waker._stringProp); - Assert.assertEquals("asleep", sleeper._stringProp); - } catch (Exception e) { - throw e; - } - } - - @Test - public void TestWorkbenchInitSimulation() throws Exception { - try (Workbench workbench = new Workbench()) { - SimpleSimProcessor processor = new SimpleSimProcessor(false); - workbench.addSimulationModel("Simple", new SimpleMessageProcessor(), processor, SimpleDigitalTwin.class, SimpleMessage.class); - - workbench.addInstance("Simple", "initSimulation", new SimpleDigitalTwin("waker")); - - long simRuntimeMs = 15000L; - long startTimeMs = System.currentTimeMillis(); - long stopTimeMs = startTimeMs + simRuntimeMs; - int speedup = 1; - long step = 1000L; - long expectedInvokes = simRuntimeMs/1000L; - int initSimExpectedInvokes = 1000; - workbench.runSimulation(startTimeMs, stopTimeMs, speedup, step); - Assert.assertEquals(expectedInvokes + initSimExpectedInvokes, processor.timesInvoked.get()); - } catch (Exception e) { - throw e; - } - } -} diff --git a/docs/element-list b/docs/element-list deleted file mode 100644 index 15c7761..0000000 --- a/docs/element-list +++ /dev/null @@ -1,2 +0,0 @@ -com.scaleoutsoftware.digitaltwin.core -com.scaleoutsoftware.digitaltwin.development diff --git a/docs/help-doc.html b/docs/help-doc.html deleted file mode 100644 index 16c9fe8..0000000 --- a/docs/help-doc.html +++ /dev/null @@ -1,180 +0,0 @@ - - - - -API Help (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
                - -
                -
                -

                JavaDoc Help

                - -
                -
                -

                Navigation

                -Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces - -
                -
                -
                -

                Kinds of Pages

                -The following sections describe the different kinds of pages in this collection. -
                -

                Overview

                -

                The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

                -
                -
                -

                Package

                -

                Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

                -
                  -
                • Interfaces
                • -
                • Classes
                • -
                • Enum Classes
                • -
                • Exceptions
                • -
                • Errors
                • -
                • Annotation Interfaces
                • -
                -
                -
                -

                Class or Interface

                -

                Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

                -
                  -
                • Class Inheritance Diagram
                • -
                • Direct Subclasses
                • -
                • All Known Subinterfaces
                • -
                • All Known Implementing Classes
                • -
                • Class or Interface Declaration
                • -
                • Class or Interface Description
                • -
                -
                -
                  -
                • Nested Class Summary
                • -
                • Enum Constant Summary
                • -
                • Field Summary
                • -
                • Property Summary
                • -
                • Constructor Summary
                • -
                • Method Summary
                • -
                • Required Element Summary
                • -
                • Optional Element Summary
                • -
                -
                -
                  -
                • Enum Constant Details
                • -
                • Field Details
                • -
                • Property Details
                • -
                • Constructor Details
                • -
                • Method Details
                • -
                • Element Details
                • -
                -

                Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

                -

                The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

                -
                -
                -

                Other Files

                -

                Packages and modules may contain pages with additional information related to the declarations nearby.

                -
                -
                -

                Tree (Class Hierarchy)

                -

                There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

                -
                  -
                • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
                • -
                • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
                • -
                -
                -
                -

                Serialized Form

                -

                Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

                -
                -
                -

                All Packages

                -

                The All Packages page contains an alphabetic index of all packages contained in the documentation.

                -
                -
                -

                All Classes and Interfaces

                -

                The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

                -
                -
                -

                Index

                -

                The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

                -
                -
                -
                -This help file applies to API documentation generated by the standard doclet.
                -
                -
                - - diff --git a/docs/index-all.html b/docs/index-all.html deleted file mode 100644 index 282504b..0000000 --- a/docs/index-all.html +++ /dev/null @@ -1,1137 +0,0 @@ - - - - -Index (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
                - -
                -
                -
                -

                Index

                -
                -A C D E F G H I L M N O P R S T U V W 
                All Classes and Interfaces|All Packages|Serialized Form -

                A

                -
                -
                addAlertProvider(String, AlertProviderConfiguration) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Adds an alert provider configuration to the specified model on this workbench.
                -
                -
                addGlobalModelData(String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Add a key/value pair to the global SharedData.
                -
                -
                addInstance(String, String, DigitalTwinBase) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Adds a digital twin instance to the workbench.
                -
                -
                addRealTimeModel(String, MessageProcessor<T, V>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Adds a real-time digital twin model to the workbench.
                -
                -
                addSharedModelData(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Add a key/value pair to SharedData for a model.
                -
                -
                addSimulationModel(String, MessageProcessor<T, V>, SimulationProcessor<T>, Class<T>, Class<V>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Adds a simulation digital twin model to the workbench.
                -
                -
                AlertMessage - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                A message that should be sent to a configured alert provider.
                -
                -
                AlertMessage(String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                -
                Construct an alert message with a title, severity, and custom message.
                -
                -
                AlertMessage(String, String, String, HashMap<String, String>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                -
                Construct an alert message with a title, severity, and custom message.
                -
                -
                AlertProviderConfiguration - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Configuration for an alert provider.
                -
                -
                AlertProviderConfiguration(String, String, String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Construct an alert provider configuration.
                -
                -
                AzureDigitalTwinsService - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Enum for the Azure Digital Twin service.
                -
                -
                -

                C

                -
                -
                CacheCleared - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                The cache was cleared successfully.
                -
                -
                CacheOperationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Status of a cache operation.
                -
                -
                CacheResult - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Represents a response from a SharedData operation.
                -
                -
                clear() - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
                -
                -
                Clear the shared data cache.
                -
                -
                close() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                 
                -
                com.scaleoutsoftware.digitaltwin.core - package com.scaleoutsoftware.digitaltwin.core
                -
                -
                Digital twin model API - Create a digital twin model.
                -
                -
                com.scaleoutsoftware.digitaltwin.development - package com.scaleoutsoftware.digitaltwin.development
                -
                -
                Digital twin development API - Develop and test simulation/real-time digital twins.
                -
                -
                CosmosDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Enum for CosmosDB
                -
                -
                createInstance(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                Create a new digital twin instance for simulation processing.
                -
                -
                createInstanceFromPersistenceStore(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                Create a new digital twin instance for simulation processing from a persistence store.
                -
                -
                createInstanceFromPersistenceStore(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                The twin instance will be loaded via model name and id from a persistence store.
                -
                -
                -

                D

                -
                -
                delay(Duration) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                - Delay simulation processing for this DigitalTwin instance for a duration of time.
                -
                -
                delayIndefinitely() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                - Delay simulation processing for this DigitalTwin instance, indefinitely.
                -
                -
                deleteInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                Delete and remove a digital twin instance from simulation processing.
                -
                -
                deleteThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                Delete and remove this digital twin instance from simulation processing.
                -
                -
                DigitalTwinBase - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                A real-time digital twin of a data source.
                -
                -
                DigitalTwinBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                Default constructor.
                -
                -
                DigitalTwinTimerMessage - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                A message sent to a digital twin instance's message processor.
                -
                -
                DigitalTwinTimerMessage(String, String, int, String, TimerType) - Constructor for class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
                -
                -
                Construct a digital twin timer message.
                -
                -
                DynamoDb - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Enum for DynamoDB
                -
                -
                -

                E

                -
                -
                emitTelemetry(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                - Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
                -
                -
                emitTelemetry(String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                - Asynchronously send a JSON serializable message to a DigitalTwin instance that will be processed by the DigitalTwin - models MessageProcessor.processMessages(ProcessingContext, DigitalTwinBase, Iterable) method.
                -
                -
                EndTimeReached - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                The simulation end time has been reached.
                -
                -
                Enqueued - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
                -
                -
                Enqueued indicates that a message was successfully formed and then sent to an internal messaging service
                -
                -
                -

                F

                -
                -
                FailedInternalError - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Failed to start/stop timer due to an internal error.
                -
                -
                FailedNoSuchTimer - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Failed to stop the existing timer, the timer is no longer active.
                -
                -
                FailedTimerAlreadyExists - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Failed to start the timer, the timer with the specified name already exists.
                -
                -
                FailedTooManyTimers - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Failed to start a new timer due to reaching the limit for a number of active timers.
                -
                -
                fromOrdinal(int) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Return the PersistenceProviderType from an ordinal value.
                -
                -
                fromOrdinal(int) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Convert an ordinal into a TimerActionResult.
                -
                -
                fromString(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Return the PersistenceProviderType from a string value.
                -
                -
                -

                G

                -
                -
                generateModelSchema(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Generates a ModelSchema for the defined model
                -
                -
                generateModelSchema(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Generates a ModelSchema for the parameter modelName and writes the schema to a file on the file system.
                -
                -
                get(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
                -
                -
                Retrieves an existing object from the cache.
                -
                -
                getAlertMessages(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieves alert messages from digital twin instances.
                -
                -
                getAlertProviders() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the alert provider configurations.
                -
                -
                getAlertProviderType() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Retrieve the alert provider type for this configuration.
                -
                -
                getAssemblyName() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                NOT USED BY JAVA MODEL SCHEMA
                -
                -
                getAzureDigitalTwinModelName() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the Azure Digital Twin model name.
                -
                -
                getCurrentTime() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Retrieves the current time.
                -
                -
                getDataSourceId() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID)
                -
                -
                getDigitalTwinModel() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin)
                -
                -
                getEntityId() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Retrieve the entity ID for this alert provider configuration.
                -
                -
                getEntryPoint() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieves the packaged model's entry point (fully-qualified class name -- FQCN -- of a Java main) for launching.
                -
                -
                getId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                The identifier of this DigitalTwin.
                -
                -
                getId() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
                -
                -
                Get the model-unique Id identifier of the initializing digital twin instance.
                -
                -
                getIncomingMessages() - Method in interface com.scaleoutsoftware.digitaltwin.core.MessageFactory
                -
                -
                Returns all incoming messages
                -
                -
                getInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves an instance or null if it doesn't exist.
                -
                -
                getInstanceAsync(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that when complete will return an instance or null if it doesn't exist.
                -
                -
                getInstanceIds(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves the instance IDs stored in a container, or an empty list if no instances exist.
                -
                -
                getInstanceIdsAsync(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist.
                -
                -
                getInstances(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieves DigitalTwin instances for a given model.
                -
                -
                getIntegrationKey() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Retrieve the integration key for this alert provider configuration.
                -
                -
                getKey() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
                -
                -
                Gets the key or null to the object associated with the result.
                -
                -
                getLoggedMessages(String, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieves messages logged by digital twin instances for a specified mdoel.
                -
                -
                getMessage() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                -
                Retrieve the message for this alert message.
                -
                -
                getMessage() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
                -
                -
                Retrieve the string message associated with this log message.
                -
                -
                getMessage() - Method in exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                -
                 
                -
                getMessageProcessorType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the message processor type (a MessageProcessor implementation).
                -
                -
                getMessageType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the message type (JSON serializable message implementation).
                -
                -
                getModel() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                The model for this DigitalTwin.
                -
                -
                getModel() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
                -
                -
                Get the Model identifier of the initializing digital twin instance.
                -
                -
                getModelName() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
                -
                -
                Retrieve the digital twin model name.
                -
                -
                getModelType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the digital twin model type (a DigitalTwinBase implementation).
                -
                -
                getName() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Retrieve the name of this alert provider configuration.
                -
                -
                getName() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Retrieve the name of the persistence provider type.
                -
                -
                getNextSimulationTimeMs() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                Retrieve the next simulation time in milliseconds.
                -
                -
                getOptionalTwinInstanceProperties() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                -
                Retrieve the optional twin instance properties for this alert message.
                -
                -
                getPersistenceProvider() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the persistence provider type.
                -
                -
                getPersistenceProvider() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Returns the configured persistence provider or null if no persistence provider configuration can be found.
                -
                -
                getProperty(String, String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a property or null if the property does not exist.
                -
                -
                getPropertyAsync(String, String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that will return a property or null if the property does not exist.
                -
                -
                getPropertyMap(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a map of property names to property types, or an empty map.
                -
                -
                getPropertyMapAsync(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that will return a map of property names to property, or an empty map.
                -
                -
                getProviderType() - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves this persistence providers type.
                -
                -
                getRoutingKey() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Retrieve the routing key for this alert provider configuration.
                -
                -
                getRtdtProperty(String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a property for a RTDT instance or null if the property does not exist.
                -
                -
                getRtdtPropertyAsync(String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that will return a property value for a RTDT instance or null if the property doesn't exist.
                -
                -
                getServiceOrdinalValue() - Method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Retrieve the ordinal value (used by the DTBuidler service).
                -
                -
                getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                -
                Retrieve the severity for this alert message.
                -
                -
                getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
                -
                -
                Retrieve the severity of this log message.
                -
                -
                getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
                -
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                getSharedGlobalData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
                -
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Retrieve a SharedData accessor for globally shared data.
                -
                -
                getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieve the global SharedData.
                -
                -
                getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
                -
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                getSharedModelData() - Method in interface com.scaleoutsoftware.digitaltwin.core.InitSimulationContext
                -
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Retrieve a SharedData accessor for this model's shared data.
                -
                -
                getSharedModelData(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieve the SharedData for a model.
                -
                -
                getSimulationController() - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Retrieve the running SimulationController or null if no simulation is running.
                -
                -
                getSimulationProcessorType() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve the simulation processor type (a SimulationProcessor implementation).
                -
                -
                getSimulationStartTime() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                - Retrieves the simulation start time.
                -
                -
                getSimulationTimeIncrement() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                - Retrieves the current simulation time increment.
                -
                -
                getStatus() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
                -
                -
                Gets the status of the cache operation.
                -
                -
                getStatus() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
                -
                -
                Retrieve the SimulationStatus of the simulation interval.
                -
                -
                getTime() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
                -
                -
                Retrieve the time of the simulation interval.
                -
                -
                getTime() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieves the current time interval of the simulation.
                -
                -
                getTimerHandlerClass() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
                -
                -
                Retrieves the timer handler class name.
                -
                -
                getTimerId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
                -
                -
                Retrieve the timer ID.
                -
                -
                getTimerId() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
                -
                -
                Retrieves the timer ID.
                -
                -
                getTimerIntervalMs() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
                -
                -
                Retrieves the timer interval.
                -
                -
                getTimerName() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
                -
                -
                Retrieve the timer name.
                -
                -
                getTimerType() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
                -
                -
                Retrieve the TimerType.
                -
                -
                getTimerType() - Method in class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
                -
                -
                Retrieves the timer type.
                -
                -
                getTimestamp() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
                -
                -
                Retrieve the timestamp from when this message was generated.
                -
                -
                getTitle() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                -
                Retrieve the title for this alert message.
                -
                -
                getTwinId() - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinTimerMessage
                -
                -
                Retrieve the digital twin ID.
                -
                -
                getURL() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                -
                Retrieve the URL for this alert provider configuration.
                -
                -
                getValue() - Method in interface com.scaleoutsoftware.digitaltwin.core.CacheResult
                -
                -
                Get the object returned from a Get operation.
                -
                -
                -

                H

                -
                -
                Handled - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
                -
                -
                Handled indicates that a message was successfully sent and processed
                -
                -
                -

                I

                -
                -
                Id - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                The identifier for this twin instance
                -
                -
                init(InitContext) - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                Initialization method to set the identifier and model for a DigitalTwin instance.
                -
                -
                InitContext - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing - digital twin.
                -
                -
                InitContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.InitContext
                -
                -
                Default constructor.
                -
                -
                initializeSimulation(long, long, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Initializes the simulation so that each interval can be run separately by calling the Workbench.step() - function.
                -
                -
                InitSimulationContext - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of - digital twin instance when a simulation is initializing.
                -
                -
                InstanceRequestedStop - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
                -
                -
                isActive() - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Returns true if this PersistenceProvider is active, false otherwise.
                -
                -
                -

                L

                -
                -
                logMessage(Level, String) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Logs a message to the real-time digital twin cloud service.
                -
                -
                LogMessage - Class in com.scaleoutsoftware.digitaltwin.development
                -
                -
                A messaged that was logged by a digital twin.
                -
                -
                -

                M

                -
                -
                MessageFactory - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Message list factory retrieves message lists for a MessageProcessor
                -
                -
                MessageProcessor<T extends DigitalTwinBase,V> - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Processes messages for a real-time digital twin.
                -
                -
                MessageProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
                -
                -
                Default constructor.
                -
                -
                MessageProcessorBase<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Base class for the MessageProcessor to help with typing.
                -
                -
                MessageProcessorBase() - Constructor for class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
                -
                -
                Default constructor.
                -
                -
                messageRecordingEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieves the message recording enabled status.
                -
                -
                Model - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                The model this twin instance belongs to.
                -
                -
                ModelSchema - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The ModelSchema class is used as a Java object representation of the model.json schema file used for deploying a - digital twin model to the real-time digital twin cloud service.
                -
                -
                ModelSchema(String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                ModelSchema(String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                ModelSchema(String, String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Model schema with a defined entry point.
                -
                -
                ModelSchema(String, String, String, String, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, and a message class.
                -
                -
                ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                ModelSchema(String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                ModelSchema(String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, - a simulation processor class, an Azure Digital Twin Model name class, a persistence provider type, - and an alert provider configuration.
                -
                -
                ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                ModelSchema(String, String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                ModelSchema(String, String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                ModelSchema(String, String, String, String, List<AlertProviderConfiguration>, boolean) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                ModelSchema(String, String, String, List<AlertProviderConfiguration>) - Constructor for class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Creates a model schema from a digital twin class, a message processor class, a message class, and - alert provider configurations.
                -
                -
                -

                N

                -
                -
                NextSimulationTime - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                Note: Simulation only.
                -
                -
                NoRemainingWork - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                There is no remaining work for the simulation.
                -
                -
                NotHandled - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
                -
                -
                NotHandled indicates that the message was not handled.
                -
                -
                NotSet - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                The simulation status is not set.
                -
                -
                NoUpdate - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
                -
                -
                Do not update the digital twin.
                -
                -
                -

                O

                -
                -
                ObjectDoesNotExist - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                The object could not be retrieved because it was not found.
                -
                -
                ObjectPut - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                The object was successfully added/updated.
                -
                -
                ObjectRemoved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                The object was removed successfully.
                -
                -
                ObjectRetrieved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                The object was successfully retrieved.
                -
                -
                OneTime - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
                -
                -
                This timer should trigger one time.
                -
                -
                onInitSimulation(InitSimulationContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
                -
                -
                - Optional method that is called per-instance when a simulation is started.
                -
                -
                onTimedMessage(String, T, ProcessingContext) - Method in interface com.scaleoutsoftware.digitaltwin.core.TimerHandler
                -
                -
                Callback to handle a timer message.
                -
                -
                -

                P

                -
                -
                peek() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Retrieves the next interval time of the simulation.
                -
                -
                persistenceEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve persistence status.
                -
                -
                PersistenceProvider - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                An interface that can be used for persisting/retrieving the state of real-time digital twins.
                -
                -
                PersistenceProviderType - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Available PersistenceProvider types.
                -
                -
                ProcessingContext - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Context object that allows the user to send a message to a DataSource.
                -
                -
                ProcessingContext() - Constructor for class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Default constructor.
                -
                -
                ProcessingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The result from a message processor which indicates to update the state object or to ignore
                -
                -
                processMessages(ProcessingContext, T, MessageFactory) - Method in class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
                -
                -
                Helper method to ensure proper typing for user methods.
                -
                -
                processMessages(ProcessingContext, T, MessageFactory) - Method in class com.scaleoutsoftware.digitaltwin.core.MessageProcessorBase
                -
                -
                Helper method to ensure proper typing for the user methods.
                -
                -
                processMessages(ProcessingContext, T, Iterable<V>) - Method in class com.scaleoutsoftware.digitaltwin.core.MessageProcessor
                -
                -
                Processes a set of incoming messages and determines whether to update the real-time digital twin.
                -
                -
                processModel(ProcessingContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
                -
                -
                Processes simulation events for a real-time digital twin.
                -
                -
                put(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
                -
                -
                Put a new key/value mapping into the cache.
                -
                -
                -

                R

                -
                -
                Recurring - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
                -
                -
                This timer should reoccur on a schedule.
                -
                -
                remove(String) - Method in interface com.scaleoutsoftware.digitaltwin.core.SharedData
                -
                -
                Remove a key/value mapping from the cache.
                -
                -
                Running - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                The simulation is running.
                -
                -
                runSimulation(long, long, double, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Runs a simulation from the given startTime until the given endTime OR there is no more work to do.
                -
                -
                runThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                Run this instance during this simulation step.
                -
                -
                -

                S

                -
                -
                send(String, String, List<Object>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Send a list of messages to a real-time or simulation model.
                -
                -
                sendAlert(String, AlertMessage) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - This method sends an alert message to supported systems.
                -
                -
                SendingResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Marks a message as Delivered or not Delivered
                -
                -
                sendToDataSource(byte[]) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - Sends a message to a data source.
                -
                -
                sendToDataSource(Object) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - Sends a message to a data source.
                -
                -
                sendToDataSource(List<Object>) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - Sends a list of messages to a data source.
                -
                -
                sendToDigitalTwin(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - This method sends a serialized JSON message to a real-time digital twin
                -
                -
                sendToDigitalTwin(String, String, Object) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - This method sends a serialized JSON message to a real-time digital twin
                -
                -
                sendToDigitalTwin(String, String, String) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - This method sends a JSON message to a real-time digital twin
                -
                -
                sendToDigitalTwin(String, String, List<byte[]>) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                - This method sends a list of serialized JSON message to a real-time digital twin
                -
                -
                setNextSimulationTime(long) - Method in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                Set the next simulation time in milliseconds.
                -
                -
                SharedData - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                SharedData is used to access a model's, or globally, shared cache.
                -
                -
                SimulationController - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The SimulationController interface is used to interact with the running DigitalTwin simulation.
                -
                -
                SimulationEventResult - Class in com.scaleoutsoftware.digitaltwin.development
                -
                -
                A simulation event result.
                -
                -
                SimulationEventResult() - Constructor for class com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
                -
                 
                -
                SimulationProcessor<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Processes simulation events for a digital twin.
                -
                -
                SimulationProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.core.SimulationProcessor
                -
                -
                Default constructor.
                -
                -
                SimulationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The status of a simulation.
                -
                -
                SimulationStep - Class in com.scaleoutsoftware.digitaltwin.development
                -
                -
                The simulation step class encases the metadata for a completed interval of a simulation.
                -
                -
                simulationSupportEnabled() - Method in class com.scaleoutsoftware.digitaltwin.core.ModelSchema
                -
                -
                Retrieve simulation support enabled status.
                -
                -
                SQLite - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Enum for SQLite
                -
                -
                SQLServer - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Enum for SQLServer
                -
                -
                startTimer(String, Duration, TimerType, TimerHandler<T>) - Method in class com.scaleoutsoftware.digitaltwin.core.InitContext
                -
                -
                Starts a new timer for the digital twin
                -
                -
                startTimer(String, Duration, TimerType, TimerHandler<T>) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Starts a new timer for the digital twin
                -
                -
                step() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Run the next simulation interval.
                -
                -
                stopSimulation() - Method in interface com.scaleoutsoftware.digitaltwin.core.SimulationController
                -
                -
                Stop the simulation.
                -
                -
                stopTimer(String) - Method in class com.scaleoutsoftware.digitaltwin.core.ProcessingContext
                -
                -
                Stops the specified timer.
                -
                -
                Success - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                The operation completed successfully.
                -
                -
                -

                T

                -
                -
                TimerActionResult - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                The result of a timer action.
                -
                -
                TimerHandler<T extends DigitalTwinBase> - Interface in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Callback to a handle a timer message for a DigitalTwinBase.
                -
                -
                TimerHandlers - Variable in class com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase
                -
                -
                The timer handlers for this twin instance.
                -
                -
                TimerMetadata<T extends DigitalTwinBase> - Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Metadata class for a timer.
                -
                -
                TimerMetadata(TimerHandler<T>, TimerType, long, int) - Constructor for class com.scaleoutsoftware.digitaltwin.core.TimerMetadata
                -
                -
                Constructs a timer metadata.
                -
                -
                TimerType - Enum Class in com.scaleoutsoftware.digitaltwin.core
                -
                -
                Enum representation of the available timer types
                -
                -
                toString() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertMessage
                -
                 
                -
                toString() - Method in class com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration
                -
                 
                -
                -

                U

                -
                -
                Unconfigured - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Enum for an unconfigured PersistenceProvider
                -
                -
                UnexpectedChangeInConfiguration - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                There was a runtime-change of simulation configuration.
                -
                -
                UpdateDigitalTwin - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
                -
                -
                Update the digital twin.
                -
                -
                updateProperty(String, String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Updates a property for the provided instance id in the provided container specified by the property name and property value.
                -
                -
                updatePropertyAsync(String, String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated.
                -
                -
                updateRtdtProperty(String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Updates a RTDT property for the provided instance id specified by the property name and property value.
                -
                -
                updateRtdtPropertyAsync(String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.core.PersistenceProvider
                -
                -
                Retrieves a future that will complete exceptionally or return void if the RTDT's property was successfully updated.
                -
                -
                UserRequested - Enum constant in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                The user requested a stop.
                -
                -
                -

                V

                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
                -
                -
                Returns the enum constant of this class with the specified name.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.CacheOperationStatus
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.ProcessingResult
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SendingResult
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.SimulationStatus
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerActionResult
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                values() - Static method in enum class com.scaleoutsoftware.digitaltwin.core.TimerType
                -
                -
                Returns an array containing the constants of this enum class, in -the order they are declared.
                -
                -
                -

                W

                -
                -
                Workbench - Class in com.scaleoutsoftware.digitaltwin.development
                -
                -
                The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
                -
                -
                Workbench() - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Instantiate the workbench.
                -
                -
                Workbench(int) - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
                -
                -
                Instantiate the workbench.
                -
                -
                WorkbenchException - Exception in com.scaleoutsoftware.digitaltwin.development
                -
                -
                A Workbench exception indicates that a real-time or simulated twin caused an exception.
                -
                -
                WorkbenchException(Exception) - Constructor for exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                -
                -
                Instantiates a WorkbenchException with the parameter inner exception
                -
                -
                WorkbenchException(String) - Constructor for exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                -
                -
                Instantiates a WorkbenchException with the parameter message
                -
                -
                WorkbenchException(String, Exception) - Constructor for exception com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                -
                -
                Instantiates a WorkbenchException with the parameter message and inner exception
                -
                -
                -A C D E F G H I L M N O P R S T U V W 
                All Classes and Interfaces|All Packages|Serialized Form
                -
                -
                - - diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index c1028e2..0000000 --- a/docs/index.html +++ /dev/null @@ -1,71 +0,0 @@ - - - - -Overview (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
                - -
                -
                -
                -

                digitaltwin-core-docs 3.0.5 API

                -
                -
                -
                Packages
                -
                -
                Package
                -
                Description
                - -
                -
                Digital twin model API - Create a digital twin model.
                -
                - -
                -
                Digital twin development API - Develop and test simulation/real-time digital twins.
                -
                -
                -
                -
                -
                -
                - - diff --git a/docs/jquery-ui.overrides.css b/docs/jquery-ui.overrides.css deleted file mode 100644 index f89acb6..0000000 --- a/docs/jquery-ui.overrides.css +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -.ui-state-active, -.ui-widget-content .ui-state-active, -.ui-widget-header .ui-state-active, -a.ui-button:active, -.ui-button:active, -.ui-button.ui-state-active:hover { - /* Overrides the color of selection used in jQuery UI */ - background: #F8981D; -} diff --git a/docs/legal/ADDITIONAL_LICENSE_INFO b/docs/legal/ADDITIONAL_LICENSE_INFO deleted file mode 100644 index b62cc3e..0000000 --- a/docs/legal/ADDITIONAL_LICENSE_INFO +++ /dev/null @@ -1 +0,0 @@ -Please see ..\java.base\ADDITIONAL_LICENSE_INFO diff --git a/docs/legal/ASSEMBLY_EXCEPTION b/docs/legal/ASSEMBLY_EXCEPTION deleted file mode 100644 index 0d4cfb4..0000000 --- a/docs/legal/ASSEMBLY_EXCEPTION +++ /dev/null @@ -1 +0,0 @@ -Please see ..\java.base\ASSEMBLY_EXCEPTION diff --git a/docs/legal/LICENSE b/docs/legal/LICENSE deleted file mode 100644 index 4ad9fe4..0000000 --- a/docs/legal/LICENSE +++ /dev/null @@ -1 +0,0 @@ -Please see ..\java.base\LICENSE diff --git a/docs/legal/jquery.md b/docs/legal/jquery.md deleted file mode 100644 index 8054a34..0000000 --- a/docs/legal/jquery.md +++ /dev/null @@ -1,72 +0,0 @@ -## jQuery v3.5.1 - -### jQuery License -``` -jQuery v 3.5.1 -Copyright JS Foundation and other contributors, https://js.foundation/ - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -****************************************** - -The jQuery JavaScript Library v3.5.1 also includes Sizzle.js - -Sizzle.js includes the following license: - -Copyright JS Foundation and other contributors, https://js.foundation/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/sizzle - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -********************* - -``` diff --git a/docs/legal/jqueryUI.md b/docs/legal/jqueryUI.md deleted file mode 100644 index 8031bdb..0000000 --- a/docs/legal/jqueryUI.md +++ /dev/null @@ -1,49 +0,0 @@ -## jQuery UI v1.12.1 - -### jQuery UI License -``` -Copyright jQuery Foundation and other contributors, https://jquery.org/ - -This software consists of voluntary contributions made by many -individuals. For exact contribution history, see the revision history -available at https://github.com/jquery/jquery-ui - -The following license applies to all parts of this software except as -documented below: - -==== - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -==== - -Copyright and related rights for sample code are waived via CC0. Sample -code is defined as all source code contained within the demos directory. - -CC0: http://creativecommons.org/publicdomain/zero/1.0/ - -==== - -All files located in the node_modules and external directories are -externally maintained libraries used by this software which have their -own licenses; we recommend you read them, as their terms may differ from -the terms above. - -``` diff --git a/docs/member-search-index.js b/docs/member-search-index.js deleted file mode 100644 index a4c179e..0000000 --- a/docs/member-search-index.js +++ /dev/null @@ -1 +0,0 @@ -memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, AlertProviderConfiguration)","u":"addAlertProvider(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertProviderConfiguration)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addGlobalModelData(String, byte[])","u":"addGlobalModelData(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, DigitalTwinBase)","u":"addInstance(java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.DigitalTwinBase)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSharedModelData(String, String, byte[])","u":"addSharedModelData(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.core.MessageProcessor,com.scaleoutsoftware.digitaltwin.core.SimulationProcessor,java.lang.Class,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"AlertProviderConfiguration(String, String, String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"AzureDigitalTwinsService"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"CacheCleared"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"clear()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"CosmosDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"createInstanceFromPersistenceStore(String, String, T)","u":"createInstanceFromPersistenceStore(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"delayIndefinitely()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"DigitalTwinTimerMessage(String, String, int, String, TimerType)","u":"%3Cinit%3E(java.lang.String,java.lang.String,int,java.lang.String,com.scaleoutsoftware.digitaltwin.core.TimerType)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"DynamoDb"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"emitTelemetry(String, Object)","u":"emitTelemetry(java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"fromString(String)","u":"fromString(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String)","u":"generateModelSchema(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"generateModelSchema(String, String)","u":"generateModelSchema(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"get(String)","u":"get(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAlertProviders()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getAlertProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAssemblyName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getAzureDigitalTwinModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getEntityId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getEntryPoint()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageFactory","l":"getIncomingMessages()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getIntegrationKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getMessageType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getModelName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getModelType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"getNextSimulationTimeMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getPersistenceProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getProviderType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getRoutingKey()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtProperty(String, String, Class)","u":"getRtdtProperty(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"getRtdtPropertyAsync(String, String, Class)","u":"getRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"getServiceOrdinalValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitSimulationContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedModelData(String)","u":"getSharedModelData(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"getSimulationProcessorType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationStartTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerHandlerClass()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerName()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinTimerMessage","l":"getTwinId()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"getURL()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheResult","l":"getValue()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.core.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"MessageProcessorBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"messageRecordingEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"ModelSchema(String, String, String, String, String, String, PersistenceProviderType, List, boolean)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,com.scaleoutsoftware.digitaltwin.core.PersistenceProviderType,java.util.List,boolean)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"NextSimulationTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectDoesNotExist"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectPut"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRemoved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"ObjectRetrieved"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"onInitSimulation(InitSimulationContext, T, Date)","u":"onInitSimulation(com.scaleoutsoftware.digitaltwin.core.InitSimulationContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.core.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"persistenceEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, Iterable)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.lang.Iterable)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessor","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"MessageProcessorBase","l":"processMessages(ProcessingContext, T, MessageFactory)","u":"processMessages(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,com.scaleoutsoftware.digitaltwin.core.MessageFactory)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.core.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"put(String, byte[])","u":"put(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SharedData","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"runThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, List)","u":"send(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendAlert(String, AlertMessage)","u":"sendAlert(java.lang.String,com.scaleoutsoftware.digitaltwin.core.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(List)","u":"sendToDataSource(java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDataSource(Object)","u":"sendToDataSource(java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, List)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.util.List)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, Object)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, String)","u":"sendToDigitalTwin(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"setNextSimulationTime(long)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ModelSchema","l":"simulationSupportEnabled()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLite"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"SQLServer"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.core.TimerType,com.scaleoutsoftware.digitaltwin.core.TimerHandler)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"DigitalTwinBase","l":"TimerHandlers"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.core.TimerHandler,com.scaleoutsoftware.digitaltwin.core.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"AlertProviderConfiguration","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"Unconfigured"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtProperty(String, String, Object)","u":"updateRtdtProperty(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProvider","l":"updateRtdtPropertyAsync(String, String, Object)","u":"updateRtdtPropertyAsync(java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"CacheOperationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"PersistenceProviderType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.core","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench(int)","u":"%3Cinit%3E(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/module-search-index.js b/docs/module-search-index.js deleted file mode 100644 index 0d59754..0000000 --- a/docs/module-search-index.js +++ /dev/null @@ -1 +0,0 @@ -moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/overview-summary.html b/docs/overview-summary.html deleted file mode 100644 index 0832a3f..0000000 --- a/docs/overview-summary.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - -digitaltwin-core-docs 3.0.5 API - - - - - - - - - - -
                - -

                index.html

                -
                - - diff --git a/docs/overview-tree.html b/docs/overview-tree.html deleted file mode 100644 index e355db6..0000000 --- a/docs/overview-tree.html +++ /dev/null @@ -1,129 +0,0 @@ - - - - -Class Hierarchy (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
                - -
                -
                -
                -

                Hierarchy For All Packages

                -Package Hierarchies: - -
                -
                -

                Class Hierarchy

                - -
                -
                -

                Interface Hierarchy

                - -
                -
                -

                Enum Class Hierarchy

                - -
                -
                -
                -
                - - diff --git a/docs/package-search-index.js b/docs/package-search-index.js deleted file mode 100644 index 3b34403..0000000 --- a/docs/package-search-index.js +++ /dev/null @@ -1 +0,0 @@ -packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.scaleoutsoftware.digitaltwin.core"},{"l":"com.scaleoutsoftware.digitaltwin.development"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/resources/glass.png b/docs/resources/glass.png deleted file mode 100644 index a7f591f467a1c0c949bbc510156a0c1afb860a6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY diff --git a/docs/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png b/docs/script-dir/images/ui-bg_glass_55_fbf9ee_1x400.png deleted file mode 100644 index 34abd18f32d3a55a297fdcf93409bd033ae573e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 335 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&fCnc6a#?2AmP!?*K(O3p^r= zfwTu0yPeFo12TF&T^vI^j=w#x$i?I+((tf;UXnmgbH|3oY>pC!)f}(GR!16S-u+#{ ze6YEqRkW=8vGl=5qArKM<9}TC-}iEvB{zdaTcX5$wyRTK&ALRXUCGx5b?-VBQkUm|IuXOmYJrBRJgj{Vx zMbNnqUkncy+qa2-mWYc>swkcIuvGK#>(0d)B7)5f`@$Ei28nH~0h*~=;u=wsl30>z zm0Xkxq!^403@vmGjdTsnLJUl-Obo4zO|=aStPBhe<(7X!(U6;;l9^VCTf=69^L{`L N44$rjF6*2UngDu&PXPb` diff --git a/docs/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png b/docs/script-dir/images/ui-bg_glass_75_e6e6e6_1x400.png deleted file mode 100644 index a90afb8bf8028404d206114965669b023dcb85ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^j6gI&0LWmFTHNUZq?nSt-Ch3w7g=q17Rci)@Q5r1 z(jH*!b~4)z#PD=+46!(!TrvH)L6@80)r*_cdCvDr%)6ghVL16=s@mbz7H!uRdGeDa z?kzLg)16i!f8fKx84s0>4hES%`s&m5HI1v5B^Uft7(lid2moiiX_$l+3hB+!{pPkNg5^ OVDNPHb6Mw<&;$T*0!_~V diff --git a/docs/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png b/docs/script-dir/images/ui-bg_glass_95_fef1ec_1x400.png deleted file mode 100644 index dbe091f6dc036fc1dc11b005738e951e27a43f7a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 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�_j6WK+Gj+xJRxVvl#lh7y-4uY);t)n47k4ot z9YsU`HVk7fg4;r{;)FHk7ZHyZJ+W|$aKwj=g&_$VCVFn5%XzSA`|z}+4ItZ|`hB}R z>h-6Be`d>nmv8;kQHJg!HMr^cCGG=T5;3HhZ_JRq0_4a3TsY7Pz{V+}z>;!R^U4*c zJ>wRI59B-)92Vi?b&EWvH(`<(G5A?W)z>EuDMG@VENAb7aHa`I#tKw{0uUc3(#J8& z*_S%A_ZxCIY385{%qN-b1K)TWmCjUA4nWKx_ZnKLSvEf0($&_0@DS~ zN8JOXJXXcaFm^OCYrz(R7N5DQkXKGnnt}yzfw^8s%=A?7hxza;ylJ;XQ&XtC`pM%b z6$5Ff0{(ALcSlTKvIbr@mR`0Z)*iM`2EfO|E5OMk$jQsE!^mat*drqV diff --git a/docs/script-dir/images/ui-icons_2e83ff_256x240.png b/docs/script-dir/images/ui-icons_2e83ff_256x240.png deleted file mode 100644 index 1f5f49756ca64bd20a1048bd7a3a584457d4bf00..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 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 diff --git a/docs/script-dir/images/ui-icons_888888_256x240.png b/docs/script-dir/images/ui-icons_888888_256x240.png deleted file mode 100644 index ee5e33f27235d1b5cf0259f63f3894a6be33c679..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6999 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 diff --git a/docs/script-dir/images/ui-icons_cd0a0a_256x240.png b/docs/script-dir/images/ui-icons_cd0a0a_256x240.png deleted file mode 100644 index 7e8ebc180a2d2a74739059799407b8b7b57a9092..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4549 zcmeHK2U8PFw@yL`geFb85=9ZD1*F$df}vOGyaXvKy$K2df>fnT5l|3bse%xZCPhLK zq(s2bG?a)Sy-1T5a?x+*n|uGmeP(CR*`0mn>^?hl=A6f-#y6Q6_!s~H0J9!S#~c6v zp1FW6dYZF&QcwTzY=gzr&=N^tVEF&>Uj<|d!K-Hi*#?;#TL5@jZ-D7d+aKjhUB2ay za7XiT$P6-HQsvS@8Ne>u30;%65Ra9O$98#q8tPF*3bZzTz*N?kB)u+wBUmd+0T!5D z*<^r#Xj1>ZovB|~<30Q0ri+GeWcuAh#6Q2zf&gzD+|&Ui&|W~DEuelV+rTsX$43El z`#jYFfOD>TI+~UbzO6elx{w;!AbqIU%Q;US-y3k0y&ZS`{PXJ9%GKuT? zA=YB~_}-7h}grk~UMM~1{IJu5z36&nH&VPs=tlLlQ$TWf}@j0@_1Mr{7PN}kZ@ zU@9N%V%HL9eSE z*BdLzdW%d9Pf1SA5`lAsx?6C@pGL*pIra&^83Gx%WYG^8aT%R?OG4Ou=0P3R5)KZ5 z2&PGFszDp$u%zsXBYLrEImJ}xFS--_mkY=#l)@OKCnEoMOo8S*eqcoB^(_J&4tmM< zs4&xp4^NNgy&HVP!O(^_6JQclp)V-Ib9=q9aWcaz*Gx~fED_HM%LFsYU%*S)OnQwc zjLYYoLk)hxsCi6qp^!9HRp8G%b|f68yfB?n<^DBz9!E*WgJ2gV*g5_E7alHp*g2_wbc8Pw7*-B9ToxV53c2rO-Vs4Px{7M!NqIXUcMSHv1cqfD&&RnMQs) z8771gCX+j09M{&*+~vB&SSU^b{}8I6?+$$T9I*OL*{LYxAHX;*iW?dX43jc> zp~TZQLjbC#e#FPvV$ou|K+q=`%KR&iGq0m)&%Qcc{(18s?cH)B<=dn&oKq#&CVm$KVlo#Io;OGBX$ckfqw0sl%9n2giktQ~NFXr`I; z@h650el?%I!6y~!d;+G2vdswoOkzni?&A=OT9T`SipWyQFEyIunl_G*e?HE^ zx7hkb*WF(Q-{^pB`|k8FH76TXH6UL4I}2h>bLnbqDDskSJx^zYBqL{y$Sn($8Qire zMAVY2aEEb~T~WwSd>Zm#SF3TtfRem42m@SaPkNC3#AX)UgT%TW=5u7S=dxp|3h~tk+8yZee}?!M9HI@f1WTU?%HqiNq#8O^RmBZ`M8nW z4|fZvl;5BN{Lb=BYDGdiZ)y8 zAJE}UL0VRg6Y7k--*#>qd}SW1`t(XXl);%iKi{ne!56tAR#KrNk#?YdO;$EPr~Ghg zL?F4G51g8yyaYA|gz0Frg48>AICegIAO6!sUwFPVn!UV}NVFIh?iYutyf9vPz5yy( z6DHSbg~R&3N2@w%ro3d+aztG`xPRDrWGn*Y&;syq!6%Nw=lpy*v1>S; zz{fdE9!dF+My~C&wlU5dQQi|liohaCEU{7=clSmk*wsDU+doSXunDD0ppEf~z7_WK zr+{Ip?==2A3sWeggPH~cD#9z$y`Scm$bJE%)>E|H9P>`Q=3WWq&5Gckv?(2+idix- z=}@U*Mw5z1u`6g?w5skq?WtvLzqBse`dg0I`$C5Hc0=;s zkPHED_%Qv>At$X$ZQoAYc=|i@^yMF^9@eeSh=MAFRi5FHuyr-LC*Z!C9W%qiV99!$ z+O4V2zvRN1wsMwg1WGvGv~LqgOA2pQZi~E#pY5Lj`j`sW1jcRidq&GPu(oq7&iz*W zKqyJ$uZ1uC=#zeW>zJF-nx-gt-}Ak+qN{)H+eFKjl(8fvzoS10rN}hbM=2ZHn7&EW z&8^#HYV0+@3zAc}_pVhH22dU+MW5s4HwjodZU|T(EZaZ2D1Vuc&fO1}CSck5&kdJ% zi5gTPGKuKSk8XiGTl>tjIdMWO%>rJ^?&*|Ie1H+ zQLN{pqOrow2FVb%V>X_jBIhzH6s6~oS_oYp;iE>C%Z8w|lf!Ev?jfhYkP?FOAJ=__ zr3Ndn*>IP;iK|Ccxw##$W6H7snuYuHC7o)bP}ir&X4B|!Zd3cDm`a244dW*}1CN%5 zXbw16r3xZMsYF85zpYIaVr} z?@&!YCHZY9Dhmzcwq`}f17^3P{$})GtY|@wRkgs2TGgSwUV|As8%gAY&4}SLTG6V7 zW4_tEA;9}Q!A@(ZaEcrzDlf2bSL%{R)ka6gH9z06;tUEGAxQhi>~Q}sg1^506i46bzM;PHOzX~mY*`jhIiS}ZN2&$pmjO9S=Mj>^wMj=hEu zl~8}2{%}WDK+?okXRZA{H+!LjL{Qw9wi7vK1jiPkap+~_ak9^lCE_h!OeGWGGC-f1 zVRpAm`}*sOCzi+Ga`RF(!KxOX_nSKFZ%-ou%u?^0ue8}s6S?Xo-QGlc{EYuH{+mQ} z>M!OEuy)pxcgz<<{Cz|GC0u}FhbpDfLsov{TnAe9J`HN1 za$1aaKcULuO}iD`>6xOm$wW+_K_~{}#cJyGb!F&r_u_WE*8>}sUhJ6ueSj+chaBTO z_5$EOo-Ic;$S9Ktg;7Yrv0}eqi8w*$7sq2td!fj=Cb#w8?(xBoqj;W#K&Bk`$}tA3 z9AGH_)V?G6ZC=jUdQlN6RDFWODgd0RQQ;0q(jfFwegfKM0~6S+>;@7olQV~&k49?f4c6ReTPQa($S^cob|b_kZ$#iX{C8Kz*x0%0 zo>cBW9N_VWlazSRa?1##MXSou-fxeD!_&QLemU3-p!Hs?V4m6Uct-_K_|&bHnK!W$ zV;63=dGgzIvcKFCOuQk~(75AeyWPI#G+g@N6{x%iJmUeHX;4Zap?8EBjG*?Rg>>ai z2KP;zLI>J)rrvOVNW5NFP3LK%e~$B;2#8-H>%?dKvqQey7_%N$0BA{1=_#M`>JpGj zx^=X=@Ue4rw&8wAx+E@QbDpFk)D;j9<|OP%PJua#2WVcDDKfA63c=(IOQ-ItOLyLj z#xi9OEcg{vTTL1PH0YM4?khk(&TzrkU^aY+ypr5 z{jp4uL+LRby+u5hgmq)J$>w4X_2hrqq;M%gOnCFRl<7qk=J7~NV(r#;uVaI=;k)yH z3s|;iNg&Le8;yH+`qw4sWA#bWtE1?ftr!s26wPW{TB4{eZ7}vcT{CttS+z#yeHZD` z!Dm{7xPVwM1jvxV5cImPfv~WUzB0lD0V?KmAfl1#yl9`E3o(FJ-W+yQ`0C&D)y6G7Fqei&raMZE$9ts7fa z4f4?J_L;XiwLe#tFZPq{Hi=d2HL_a#J6156HfF@TAh; z*?Y}c7mP70lKYjiy#yEAjAE=?L_%I!DCR2DHw8zdS^Oe`Q{pKe%3AToxCN@8lKi~y z{NBUBt1t6X6V9;2e1t)uN}rcE_dBkxip3*do}=#z;&-%u?-?GxK;Dbzs!>Q^*6ptj zm^eD>*BoA?nOOnx9cmrMao0O|mq-wu>SauA6^XMeyN#cZXde*AQjDKU-aV#`nCYM! zK93Mnh)oEUJD3C2u*7fg1Z6u(rIWt=TFIqI@vO6HP*2{$Nfzqqt)jply2Pr`P1<{K zAJze>9Iexn7%VzWXJ<9dI_s1qgpT?U{aFjU?#mtfXwP1}`wno0q-!-Ch4te$o&7NO zv0K{_tOX8j$%GwNi1XUiA4V4r(b+)i-C0MYc`g)V`!_Vllu=)fmSLWy3MWmjV{~>( z2}Qmx;l8gN7vOQhu1Ct|e;v2u<}Z#5f0Ri`pg-r)`~A!ONc0I6kHauS0UE#sMlq4I z%K6CTTyOG<7_>u(<5A(mz`ps}+2ji&AfFQ+KjMEIGm>t=ebp$kBvqJzq Mq_Ix57W&cu0AIB!=l}o! diff --git a/docs/script-dir/jquery-3.5.1.min.js b/docs/script-dir/jquery-3.5.1.min.js deleted file mode 100644 index b061403..0000000 --- a/docs/script-dir/jquery-3.5.1.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
                "],col:[2,"","
                "],tr:[2,"","
                "],td:[3,"","
                "],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="
                ",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0a;a++)for(s in o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void 0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return e},t.widget.bridge=function(e,s){var n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var a="string"==typeof o,r=i.call(arguments,1),l=this;return a?this.length||"instance"!==o?this.each(function(){var i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void 0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void 0):t.error("no such method '"+o+"' for "+e+" widget instance"):t.error("cannot call methods on "+e+" prior to initialization; "+"attempted to call method '"+o+"'")}):l=void 0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"
                ",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return this.element},option:function(e,i){var s,n,o,a=e;if(0===arguments.length)return t.widget.extend({},this.options);if("string"==typeof e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void 0===this.options[e]?null:this.options[e];a[e]=i}return this._setOptions(a),this},_setOptions:function(t){var e;for(e in t)this._setOption(e,t[e]);return this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var i,s,n;for(i in e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return this._setOptions({disabled:!1})},disable:function(){return this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var s=[],n=this;return e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join(" ")},_untrackClassesElement:function(e){var i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof s?s:i;var n="string"==typeof t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var n,o=this;"boolean"!=typeof e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function r(){return e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var s=this;return setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n in o)n in i||(i[n]=o[n]);return this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof n?i:n.effect||i:e;n=n||{},"number"==typeof n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,function(){function e(t,e,i){return[parseFloat(t[0])*(u.test(t[0])?e/100:1),parseFloat(t[1])*(u.test(t[1])?i/100:1)]}function i(e,i){return parseInt(t.css(e,i),10)||0}function s(e){var i=e[0];return 9===i.nodeType?{width:e.width(),height:e.height(),offset:{top:0,left:0}}:t.isWindow(i)?{width:e.width(),height:e.height(),offset:{top:e.scrollTop(),left:e.scrollLeft()}}:i.preventDefault?{width:0,height:0,offset:{top:i.pageY,left:i.pageX}}:{width:e.outerWidth(),height:e.outerHeight(),offset:e.offset()}}var n,o=Math.max,a=Math.abs,r=/left|center|right/,l=/top|center|bottom/,h=/[\+\-]\d+(\.[\d]+)?%?/,c=/^\w+/,u=/%$/,d=t.fn.position;t.position={scrollbarWidth:function(){if(void 0!==n)return n;var e,i,s=t("
                "),o=s.children()[0];return t("body").append(s),e=o.offsetWidth,s.css("overflow","scroll"),i=o.offsetWidth,e===i&&(i=s[0].clientWidth),s.remove(),n=e-i},getScrollInfo:function(e){var i=e.isWindow||e.isDocument?"":e.element.css("overflow-x"),s=e.isWindow||e.isDocument?"":e.element.css("overflow-y"),n="scroll"===i||"auto"===i&&e.widthi?"left":e>0?"right":"center",vertical:0>r?"top":s>0?"bottom":"middle"};h>p&&p>a(e+i)&&(u.horizontal="center"),c>f&&f>a(s+r)&&(u.vertical="middle"),u.important=o(a(e),a(i))>o(a(s),a(r))?"horizontal":"vertical",n.using.call(this,t,u)}),l.offset(t.extend(D,{using:r}))})},t.ui.position={fit:{left:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollLeft:s.offset.left,a=s.width,r=t.left-e.collisionPosition.marginLeft,l=n-r,h=r+e.collisionWidth-a-n;e.collisionWidth>a?l>0&&0>=h?(i=t.left+l+e.collisionWidth-a-n,t.left+=l-i):t.left=h>0&&0>=l?n:l>h?n+a-e.collisionWidth:n:l>0?t.left+=l:h>0?t.left-=h:t.left=o(t.left-r,t.left)},top:function(t,e){var i,s=e.within,n=s.isWindow?s.scrollTop:s.offset.top,a=e.within.height,r=t.top-e.collisionPosition.marginTop,l=n-r,h=r+e.collisionHeight-a-n;e.collisionHeight>a?l>0&&0>=h?(i=t.top+l+e.collisionHeight-a-n,t.top+=l-i):t.top=h>0&&0>=l?n:l>h?n+a-e.collisionHeight:n:l>0?t.top+=l:h>0?t.top-=h:t.top=o(t.top-r,t.top)}},flip:{left:function(t,e){var i,s,n=e.within,o=n.offset.left+n.scrollLeft,r=n.width,l=n.isWindow?n.scrollLeft:n.offset.left,h=t.left-e.collisionPosition.marginLeft,c=h-l,u=h+e.collisionWidth-r-l,d="left"===e.my[0]?-e.elemWidth:"right"===e.my[0]?e.elemWidth:0,p="left"===e.at[0]?e.targetWidth:"right"===e.at[0]?-e.targetWidth:0,f=-2*e.offset[0];0>c?(i=t.left+d+p+f+e.collisionWidth-r-o,(0>i||a(c)>i)&&(t.left+=d+p+f)):u>0&&(s=t.left-e.collisionPosition.marginLeft+d+p+f-l,(s>0||u>a(s))&&(t.left+=d+p+f))},top:function(t,e){var i,s,n=e.within,o=n.offset.top+n.scrollTop,r=n.height,l=n.isWindow?n.scrollTop:n.offset.top,h=t.top-e.collisionPosition.marginTop,c=h-l,u=h+e.collisionHeight-r-l,d="top"===e.my[1],p=d?-e.elemHeight:"bottom"===e.my[1]?e.elemHeight:0,f="top"===e.at[1]?e.targetHeight:"bottom"===e.at[1]?-e.targetHeight:0,g=-2*e.offset[1];0>c?(s=t.top+p+f+g+e.collisionHeight-r-o,(0>s||a(c)>s)&&(t.top+=p+f+g)):u>0&&(i=t.top-e.collisionPosition.marginTop+p+f+g-l,(i>0||u>a(i))&&(t.top+=p+f+g))}},flipfit:{left:function(){t.ui.position.flip.left.apply(this,arguments),t.ui.position.fit.left.apply(this,arguments)},top:function(){t.ui.position.flip.top.apply(this,arguments),t.ui.position.fit.top.apply(this,arguments)}}}}(),t.ui.position,t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.fn.extend({uniqueId:function(){var t=0;return function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++t)})}}(),removeUniqueId:function(){return this.each(function(){/^ui-id-\d+$/.test(this.id)&&t(this).removeAttr("id")})}}),t.ui.safeActiveElement=function(t){var e;try{e=t.activeElement}catch(i){e=t.body}return e||(e=t.body),e.nodeName||(e=t.body),e},t.widget("ui.menu",{version:"1.12.1",defaultElement:"
                  ",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault()},"click .ui-menu-item":function(e){var i=t(e.target),s=t(t.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&i.not(".ui-state-disabled").length&&(this.select(e),e.isPropagationStopped()||(this.mouseHandled=!0),i.has(".ui-menu").length?this.expand(e):!this.element.is(":focus")&&s.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":function(e){if(!this.previousFilter){var i=t(e.target).closest(".ui-menu-item"),s=t(e.currentTarget);i[0]===s[0]&&(this._removeClass(s.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(e,s))}},mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this.element.find(this.options.items).eq(0);e||this.focus(t,i)},blur:function(e){this._delay(function(){var i=!t.contains(this.element[0],t.ui.safeActiveElement(this.document[0]));i&&this.collapseAll(e)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t),this.mouseHandled=!1}})},_destroy:function(){var e=this.element.find(".ui-menu-item").removeAttr("role aria-disabled"),i=e.children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),i.children().each(function(){var e=t(this);e.data("ui-menu-submenu-caret")&&e.remove()})},_keydown:function(e){var i,s,n,o,a=!0;switch(e.keyCode){case t.ui.keyCode.PAGE_UP:this.previousPage(e);break;case t.ui.keyCode.PAGE_DOWN:this.nextPage(e);break;case t.ui.keyCode.HOME:this._move("first","first",e);break;case t.ui.keyCode.END:this._move("last","last",e);break;case t.ui.keyCode.UP:this.previous(e);break;case t.ui.keyCode.DOWN:this.next(e);break;case t.ui.keyCode.LEFT:this.collapse(e);break;case t.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(e);break;case t.ui.keyCode.ENTER:case t.ui.keyCode.SPACE:this._activate(e);break;case t.ui.keyCode.ESCAPE:this.collapse(e);break;default:a=!1,s=this.previousFilter||"",o=!1,n=e.keyCode>=96&&105>=e.keyCode?""+(e.keyCode-96):String.fromCharCode(e.keyCode),clearTimeout(this.filterTimer),n===s?o=!0:n=s+n,i=this._filterMenuItems(n),i=o&&-1!==i.index(this.active.next())?this.active.nextAll(".ui-menu-item"):i,i.length||(n=String.fromCharCode(e.keyCode),i=this._filterMenuItems(n)),i.length?(this.focus(e,i),this.previousFilter=n,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}a&&e.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var e,i,s,n,o,a=this,r=this.options.icons.submenu,l=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),s=l.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var e=t(this),i=e.prev(),s=t("").data("ui-menu-submenu-caret",!0);a._addClass(s,"ui-menu-icon","ui-icon "+r),i.attr("aria-haspopup","true").prepend(s),e.attr("aria-labelledby",i.attr("id"))}),this._addClass(s,"ui-menu","ui-widget ui-widget-content ui-front"),e=l.add(this.element),i=e.find(this.options.items),i.not(".ui-menu-item").each(function(){var e=t(this);a._isDivider(e)&&a._addClass(e,"ui-menu-divider","ui-widget-content")}),n=i.not(".ui-menu-item, .ui-menu-divider"),o=n.children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(n,"ui-menu-item")._addClass(o,"ui-menu-item-wrapper"),i.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!t.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){if("icons"===t){var i=this.element.find(".ui-menu-icon");this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)}this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",t+""),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i,s,n;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),s=this.active.children(".ui-menu-item-wrapper"),this._addClass(s,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",s.attr("id")),n=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(n,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),i=e.children(".ui-menu"),i.length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(e){var i,s,n,o,a,r;this._hasScroll()&&(i=parseFloat(t.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(t.css(this.activeMenu[0],"paddingTop"))||0,n=e.offset().top-this.activeMenu.offset().top-i-s,o=this.activeMenu.scrollTop(),a=this.activeMenu.height(),r=e.outerHeight(),0>n?this.activeMenu.scrollTop(o+n):n+r>a&&this.activeMenu.scrollTop(o+n-a+r))},blur:function(t,e){e||clearTimeout(this.timer),this.active&&(this._removeClass(this.active.children(".ui-menu-item-wrapper"),null,"ui-state-active"),this._trigger("blur",t,{item:this.active}),this.active=null)},_startOpening:function(t){clearTimeout(this.timer),"true"===t.attr("aria-hidden")&&(this.timer=this._delay(function(){this._close(),this._open(t)},this.delay))},_open:function(e){var i=t.extend({of:this.active},this.options.position);clearTimeout(this.timer),this.element.find(".ui-menu").not(e.parents(".ui-menu")).hide().attr("aria-hidden","true"),e.show().removeAttr("aria-hidden").attr("aria-expanded","true").position(i)},collapseAll:function(e,i){clearTimeout(this.timer),this.timer=this._delay(function(){var s=i?this.element:t(e&&e.target).closest(this.element.find(".ui-menu"));s.length||(s=this.element),this._close(s),this.blur(e),this._removeClass(s.find(".ui-state-active"),null,"ui-state-active"),this.activeMenu=s},this.delay)},_close:function(t){t||(t=this.active?this.active.parent():this.element),t.find(".ui-menu").hide().attr("aria-hidden","true").attr("aria-expanded","false")},_closeOnDocumentClick:function(e){return!t(e.target).closest(".ui-menu").length},_isDivider:function(t){return!/[^\-\u2014\u2013\s]/.test(t.text())},collapse:function(t){var e=this.active&&this.active.parent().closest(".ui-menu-item",this.element);e&&e.length&&(this._close(),this.focus(t,e))},expand:function(t){var e=this.active&&this.active.children(".ui-menu ").find(this.options.items).first();e&&e.length&&(this._open(e.parent()),this._delay(function(){this.focus(t,e)}))},next:function(t){this._move("next","first",t)},previous:function(t){this._move("prev","last",t)},isFirstItem:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},isLastItem:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},_move:function(t,e,i){var s;this.active&&(s="first"===t||"last"===t?this.active["first"===t?"prevAll":"nextAll"](".ui-menu-item").eq(-1):this.active[t+"All"](".ui-menu-item").eq(0)),s&&s.length&&this.active||(s=this.activeMenu.find(this.options.items)[e]()),this.focus(i,s)},nextPage:function(e){var i,s,n;return this.active?(this.isLastItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.nextAll(".ui-menu-item").each(function(){return i=t(this),0>i.offset().top-s-n}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items)[this.active?"last":"first"]())),void 0):(this.next(e),void 0)},previousPage:function(e){var i,s,n;return this.active?(this.isFirstItem()||(this._hasScroll()?(s=this.active.offset().top,n=this.element.height(),this.active.prevAll(".ui-menu-item").each(function(){return i=t(this),i.offset().top-s+n>0}),this.focus(e,i)):this.focus(e,this.activeMenu.find(this.options.items).first())),void 0):(this.next(e),void 0)},_hasScroll:function(){return this.element.outerHeight()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,_create:function(){var e,i,s,n=this.element[0].nodeName.toLowerCase(),o="textarea"===n,a="input"===n;this.isMultiLine=o||!a&&this._isContentEditable(this.element),this.valueMethod=this.element[o||a?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(n){if(this.element.prop("readOnly"))return e=!0,s=!0,i=!0,void 0;e=!1,s=!1,i=!1;var o=t.ui.keyCode;switch(n.keyCode){case o.PAGE_UP:e=!0,this._move("previousPage",n);break;case o.PAGE_DOWN:e=!0,this._move("nextPage",n);break;case o.UP:e=!0,this._keyEvent("previous",n);break;case o.DOWN:e=!0,this._keyEvent("next",n);break;case o.ENTER:this.menu.active&&(e=!0,n.preventDefault(),this.menu.select(n));break;case o.TAB:this.menu.active&&this.menu.select(n);break;case o.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(n),n.preventDefault());break;default:i=!0,this._searchTimeout(n)}},keypress:function(s){if(e)return e=!1,(!this.isMultiLine||this.menu.element.is(":visible"))&&s.preventDefault(),void 0;if(!i){var n=t.ui.keyCode;switch(s.keyCode){case n.PAGE_UP:this._move("previousPage",s);break;case n.PAGE_DOWN:this._move("nextPage",s);break;case n.UP:this._keyEvent("previous",s);break;case n.DOWN:this._keyEvent("next",s)}}},input:function(t){return s?(s=!1,t.preventDefault(),void 0):(this._searchTimeout(t),void 0)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){return this.cancelBlur?(delete this.cancelBlur,void 0):(clearTimeout(this.searching),this.close(t),this._change(t),void 0)}}),this._initSource(),this.menu=t("
                    ").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault(),this.cancelBlur=!0,this._delay(function(){delete this.cancelBlur,this.element[0]!==t.ui.safeActiveElement(this.document[0])&&this.element.trigger("focus")})},menufocus:function(e,i){var s,n;return this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){t(e.target).trigger(e.originalEvent)}),void 0):(n=i.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:n})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(n.value),s=i.item.attr("aria-label")||n.value,s&&t.trim(s).length&&(this.liveRegion.children().hide(),t("
                    ").text(s).appendTo(this.liveRegion)),void 0)},menuselect:function(e,i){var s=i.item.data("ui-autocomplete-item"),n=this.previous;this.element[0]!==t.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=n,this._delay(function(){this.previous=n,this.selectedItem=s})),!1!==this._trigger("select",e,{item:s})&&this._value(s.value),this.term=this._value(),this.close(e),this.selectedItem=s}}),this.liveRegion=t("
                    ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var i=this.menu.element[0];return e.target===this.element[0]||e.target===i||t.contains(i,e.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e&&(e=e.jquery||e.nodeType?t(e):this.document.find(e).eq(0)),e&&e[0]||(e=this.element.closest(".ui-front, dialog")),e.length||(e=this.document[0].body),e},_initSource:function(){var e,i,s=this;t.isArray(this.options.source)?(e=this.options.source,this.source=function(i,s){s(t.ui.autocomplete.filter(e,i.term))}):"string"==typeof this.options.source?(i=this.options.source,this.source=function(e,n){s.xhr&&s.xhr.abort(),s.xhr=t.ajax({url:i,data:e,dataType:"json",success:function(t){n(t)},error:function(){n([])}})}):this.source=this.options.source},_searchTimeout:function(t){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),i=this.menu.element.is(":visible"),s=t.altKey||t.ctrlKey||t.metaKey||t.shiftKey;(!e||e&&!i&&!s)&&(this.selectedItem=null,this.search(null,t))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(t("
                    ").text(i.label)).appendTo(e)},_move:function(t,e){return this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),this.menu.blur(),void 0):(this.menu[t](e),void 0):(this.search(null,e),void 0)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){(!this.isMultiLine||this.menu.element.is(":visible"))&&(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),t.extend(t.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,i){var s=RegExp(t.ui.autocomplete.escapeRegex(i),"i");return t.grep(e,function(t){return s.test(t.label||t.value||t)})}}),t.widget("ui.autocomplete",t.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(t>1?" results are":" result is")+" available, use up and down arrow keys to navigate."}}},__response:function(e){var i;this._superApply(arguments),this.options.disabled||this.cancelSearch||(i=e&&e.length?this.options.messages.results(e.length):this.options.messages.noResults,this.liveRegion.children().hide(),t("
                    ").text(i).appendTo(this.liveRegion))}}),t.ui.autocomplete}); \ No newline at end of file diff --git a/docs/script-dir/jquery-ui.structure.min.css b/docs/script-dir/jquery-ui.structure.min.css deleted file mode 100644 index e880892..0000000 --- a/docs/script-dir/jquery-ui.structure.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! jQuery UI - v1.12.1 - 2018-12-06 -* http://jqueryui.com -* Copyright jQuery Foundation and other contributors; Licensed MIT */ - -.ui-helper-hidden{display:none}.ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none}.ui-helper-clearfix:before,.ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse}.ui-helper-clearfix:after{clear:both}.ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)}.ui-front{z-index:100}.ui-state-disabled{cursor:default!important;pointer-events:none}.ui-icon{display:inline-block;vertical-align:middle;margin-top:-.25em;position:relative;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat}.ui-widget-icon-block{left:50%;margin-left:-8px;display:block}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-autocomplete{position:absolute;top:0;left:0;cursor:default}.ui-menu{list-style:none;padding:0;margin:0;display:block;outline:0}.ui-menu .ui-menu{position:absolute}.ui-menu .ui-menu-item{margin:0;cursor:pointer;list-style-image:url("data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")}.ui-menu .ui-menu-item-wrapper{position:relative;padding:3px 1em 3px .4em}.ui-menu .ui-menu-divider{margin:5px 0;height:0;font-size:0;line-height:0;border-width:1px 0 0 0}.ui-menu .ui-state-focus,.ui-menu .ui-state-active{margin:-1px}.ui-menu-icons{position:relative}.ui-menu-icons .ui-menu-item-wrapper{padding-left:2em}.ui-menu .ui-icon{position:absolute;top:0;bottom:0;left:.2em;margin:auto 0}.ui-menu .ui-menu-icon{left:auto;right:0} \ No newline at end of file diff --git a/docs/script.js b/docs/script.js deleted file mode 100644 index 864989c..0000000 --- a/docs/script.js +++ /dev/null @@ -1,132 +0,0 @@ -/* - * Copyright (c) 2013, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var moduleSearchIndex; -var packageSearchIndex; -var typeSearchIndex; -var memberSearchIndex; -var tagSearchIndex; -function loadScripts(doc, tag) { - createElem(doc, tag, 'search.js'); - - createElem(doc, tag, 'module-search-index.js'); - createElem(doc, tag, 'package-search-index.js'); - createElem(doc, tag, 'type-search-index.js'); - createElem(doc, tag, 'member-search-index.js'); - createElem(doc, tag, 'tag-search-index.js'); -} - -function createElem(doc, tag, path) { - var script = doc.createElement(tag); - var scriptElement = doc.getElementsByTagName(tag)[0]; - script.src = pathtoroot + path; - scriptElement.parentNode.insertBefore(script, scriptElement); -} - -function show(tableId, selected, columns) { - if (tableId !== selected) { - document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') - .forEach(function(elem) { - elem.style.display = 'none'; - }); - } - document.querySelectorAll('div.' + selected) - .forEach(function(elem, index) { - elem.style.display = ''; - var isEvenRow = index % (columns * 2) < columns; - elem.classList.remove(isEvenRow ? oddRowColor : evenRowColor); - elem.classList.add(isEvenRow ? evenRowColor : oddRowColor); - }); - updateTabs(tableId, selected); -} - -function updateTabs(tableId, selected) { - document.querySelector('div#' + tableId +' .summary-table') - .setAttribute('aria-labelledby', selected); - document.querySelectorAll('button[id^="' + tableId + '"]') - .forEach(function(tab, index) { - if (selected === tab.id || (tableId === selected && index === 0)) { - tab.className = activeTableTab; - tab.setAttribute('aria-selected', true); - tab.setAttribute('tabindex',0); - } else { - tab.className = tableTab; - tab.setAttribute('aria-selected', false); - tab.setAttribute('tabindex',-1); - } - }); -} - -function switchTab(e) { - var selected = document.querySelector('[aria-selected=true]'); - if (selected) { - if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { - // left or up arrow key pressed: move focus to previous tab - selected.previousSibling.click(); - selected.previousSibling.focus(); - e.preventDefault(); - } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { - // right or down arrow key pressed: move focus to next tab - selected.nextSibling.click(); - selected.nextSibling.focus(); - e.preventDefault(); - } - } -} - -var updateSearchResults = function() {}; - -function indexFilesLoaded() { - return moduleSearchIndex - && packageSearchIndex - && typeSearchIndex - && memberSearchIndex - && tagSearchIndex; -} - -// Workaround for scroll position not being included in browser history (8249133) -document.addEventListener("DOMContentLoaded", function(e) { - var contentDiv = document.querySelector("div.flex-content"); - window.addEventListener("popstate", function(e) { - if (e.state !== null) { - contentDiv.scrollTop = e.state; - } - }); - window.addEventListener("hashchange", function(e) { - history.replaceState(contentDiv.scrollTop, document.title); - }); - contentDiv.addEventListener("scroll", function(e) { - var timeoutID; - if (!timeoutID) { - timeoutID = setTimeout(function() { - history.replaceState(contentDiv.scrollTop, document.title); - timeoutID = null; - }, 100); - } - }); - if (!location.hash) { - history.replaceState(contentDiv.scrollTop, document.title); - } -}); diff --git a/docs/search.js b/docs/search.js deleted file mode 100644 index db3b2f4..0000000 --- a/docs/search.js +++ /dev/null @@ -1,354 +0,0 @@ -/* - * Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved. - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * This code is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License version 2 only, as - * published by the Free Software Foundation. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * This code 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 - * version 2 for more details (a copy is included in the LICENSE file that - * accompanied this code). - * - * You should have received a copy of the GNU General Public License version - * 2 along with this work; if not, write to the Free Software Foundation, - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. - * - * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA - * or visit www.oracle.com if you need additional information or have any - * questions. - */ - -var noResult = {l: "No results found"}; -var loading = {l: "Loading search index..."}; -var catModules = "Modules"; -var catPackages = "Packages"; -var catTypes = "Classes and Interfaces"; -var catMembers = "Members"; -var catSearchTags = "Search Tags"; -var highlight = "$&"; -var searchPattern = ""; -var fallbackPattern = ""; -var RANKING_THRESHOLD = 2; -var NO_MATCH = 0xffff; -var MIN_RESULTS = 3; -var MAX_RESULTS = 500; -var UNNAMED = ""; -function escapeHtml(str) { - return str.replace(//g, ">"); -} -function getHighlightedText(item, matcher, fallbackMatcher) { - var escapedItem = escapeHtml(item); - var highlighted = escapedItem.replace(matcher, highlight); - if (highlighted === escapedItem) { - highlighted = escapedItem.replace(fallbackMatcher, highlight) - } - return highlighted; -} -function getURLPrefix(ui) { - var urlPrefix=""; - var slash = "/"; - if (ui.item.category === catModules) { - return ui.item.l + slash; - } else if (ui.item.category === catPackages && ui.item.m) { - return ui.item.m + slash; - } else if (ui.item.category === catTypes || ui.item.category === catMembers) { - if (ui.item.m) { - urlPrefix = ui.item.m + slash; - } else { - $.each(packageSearchIndex, function(index, item) { - if (item.m && ui.item.p === item.l) { - urlPrefix = item.m + slash; - } - }); - } - } - return urlPrefix; -} -function createSearchPattern(term) { - var pattern = ""; - var isWordToken = false; - term.replace(/,\s*/g, ", ").trim().split(/\s+/).forEach(function(w, index) { - if (index > 0) { - // whitespace between identifiers is significant - pattern += (isWordToken && /^\w/.test(w)) ? "\\s+" : "\\s*"; - } - var tokens = w.split(/(?=[A-Z,.()<>[\/])/); - for (var i = 0; i < tokens.length; i++) { - var s = tokens[i]; - if (s === "") { - continue; - } - pattern += $.ui.autocomplete.escapeRegex(s); - isWordToken = /\w$/.test(s); - if (isWordToken) { - pattern += "([a-z0-9_$<>\\[\\]]*?)"; - } - } - }); - return pattern; -} -function createMatcher(pattern, flags) { - var isCamelCase = /[A-Z]/.test(pattern); - return new RegExp(pattern, flags + (isCamelCase ? "" : "i")); -} -var watermark = 'Search'; -$(function() { - var search = $("#search-input"); - var reset = $("#reset-button"); - search.val(''); - search.prop("disabled", false); - reset.prop("disabled", false); - search.val(watermark).addClass('watermark'); - search.blur(function() { - if ($(this).val().length === 0) { - $(this).val(watermark).addClass('watermark'); - } - }); - search.on('click keydown paste', function() { - if ($(this).val() === watermark) { - $(this).val('').removeClass('watermark'); - } - }); - reset.click(function() { - search.val('').focus(); - }); - search.focus()[0].setSelectionRange(0, 0); -}); -$.widget("custom.catcomplete", $.ui.autocomplete, { - _create: function() { - this._super(); - this.widget().menu("option", "items", "> :not(.ui-autocomplete-category)"); - }, - _renderMenu: function(ul, items) { - var rMenu = this; - var currentCategory = ""; - rMenu.menu.bindings = $(); - $.each(items, function(index, item) { - var li; - if (item.category && item.category !== currentCategory) { - ul.append("
                  • " + item.category + "
                  • "); - currentCategory = item.category; - } - li = rMenu._renderItemData(ul, item); - if (item.category) { - li.attr("aria-label", item.category + " : " + item.l); - li.attr("class", "result-item"); - } else { - li.attr("aria-label", item.l); - li.attr("class", "result-item"); - } - }); - }, - _renderItem: function(ul, item) { - var label = ""; - var matcher = createMatcher(escapeHtml(searchPattern), "g"); - var fallbackMatcher = new RegExp(fallbackPattern, "gi") - if (item.category === catModules) { - label = getHighlightedText(item.l, matcher, fallbackMatcher); - } else if (item.category === catPackages) { - label = getHighlightedText(item.l, matcher, fallbackMatcher); - } else if (item.category === catTypes) { - label = (item.p && item.p !== UNNAMED) - ? getHighlightedText(item.p + "." + item.l, matcher, fallbackMatcher) - : getHighlightedText(item.l, matcher, fallbackMatcher); - } else if (item.category === catMembers) { - label = (item.p && item.p !== UNNAMED) - ? getHighlightedText(item.p + "." + item.c + "." + item.l, matcher, fallbackMatcher) - : getHighlightedText(item.c + "." + item.l, matcher, fallbackMatcher); - } else if (item.category === catSearchTags) { - label = getHighlightedText(item.l, matcher, fallbackMatcher); - } else { - label = item.l; - } - var li = $("
                  • ").appendTo(ul); - var div = $("
                    ").appendTo(li); - if (item.category === catSearchTags && item.h) { - if (item.d) { - div.html(label + " (" + item.h + ")
                    " - + item.d + "
                    "); - } else { - div.html(label + " (" + item.h + ")"); - } - } else { - if (item.m) { - div.html(item.m + "/" + label); - } else { - div.html(label); - } - } - return li; - } -}); -function rankMatch(match, category) { - if (!match) { - return NO_MATCH; - } - var index = match.index; - var input = match.input; - var leftBoundaryMatch = 2; - var periferalMatch = 0; - // make sure match is anchored on a left word boundary - if (index === 0 || /\W/.test(input[index - 1]) || "_" === input[index]) { - leftBoundaryMatch = 0; - } else if ("_" === input[index - 1] || (input[index] === input[index].toUpperCase() && !/^[A-Z0-9_$]+$/.test(input))) { - leftBoundaryMatch = 1; - } - var matchEnd = index + match[0].length; - var leftParen = input.indexOf("("); - var endOfName = leftParen > -1 ? leftParen : input.length; - // exclude peripheral matches - if (category !== catModules && category !== catSearchTags) { - var delim = category === catPackages ? "/" : "."; - if (leftParen > -1 && leftParen < index) { - periferalMatch += 2; - } else if (input.lastIndexOf(delim, endOfName) >= matchEnd) { - periferalMatch += 2; - } - } - var delta = match[0].length === endOfName ? 0 : 1; // rank full match higher than partial match - for (var i = 1; i < match.length; i++) { - // lower ranking if parts of the name are missing - if (match[i]) - delta += match[i].length; - } - if (category === catTypes) { - // lower ranking if a type name contains unmatched camel-case parts - if (/[A-Z]/.test(input.substring(matchEnd))) - delta += 5; - if (/[A-Z]/.test(input.substring(0, index))) - delta += 5; - } - return leftBoundaryMatch + periferalMatch + (delta / 200); - -} -function doSearch(request, response) { - var result = []; - searchPattern = createSearchPattern(request.term); - fallbackPattern = createSearchPattern(request.term.toLowerCase()); - if (searchPattern === "") { - return this.close(); - } - var camelCaseMatcher = createMatcher(searchPattern, ""); - var fallbackMatcher = new RegExp(fallbackPattern, "i"); - - function searchIndexWithMatcher(indexArray, matcher, category, nameFunc) { - if (indexArray) { - var newResults = []; - $.each(indexArray, function (i, item) { - item.category = category; - var ranking = rankMatch(matcher.exec(nameFunc(item)), category); - if (ranking < RANKING_THRESHOLD) { - newResults.push({ranking: ranking, item: item}); - } - return newResults.length <= MAX_RESULTS; - }); - return newResults.sort(function(e1, e2) { - return e1.ranking - e2.ranking; - }).map(function(e) { - return e.item; - }); - } - return []; - } - function searchIndex(indexArray, category, nameFunc) { - var primaryResults = searchIndexWithMatcher(indexArray, camelCaseMatcher, category, nameFunc); - result = result.concat(primaryResults); - if (primaryResults.length <= MIN_RESULTS && !camelCaseMatcher.ignoreCase) { - var secondaryResults = searchIndexWithMatcher(indexArray, fallbackMatcher, category, nameFunc); - result = result.concat(secondaryResults.filter(function (item) { - return primaryResults.indexOf(item) === -1; - })); - } - } - - searchIndex(moduleSearchIndex, catModules, function(item) { return item.l; }); - searchIndex(packageSearchIndex, catPackages, function(item) { - return (item.m && request.term.indexOf("/") > -1) - ? (item.m + "/" + item.l) : item.l; - }); - searchIndex(typeSearchIndex, catTypes, function(item) { - return request.term.indexOf(".") > -1 ? item.p + "." + item.l : item.l; - }); - searchIndex(memberSearchIndex, catMembers, function(item) { - return request.term.indexOf(".") > -1 - ? item.p + "." + item.c + "." + item.l : item.l; - }); - searchIndex(tagSearchIndex, catSearchTags, function(item) { return item.l; }); - - if (!indexFilesLoaded()) { - updateSearchResults = function() { - doSearch(request, response); - } - result.unshift(loading); - } else { - updateSearchResults = function() {}; - } - response(result); -} -$(function() { - $("#search-input").catcomplete({ - minLength: 1, - delay: 300, - source: doSearch, - response: function(event, ui) { - if (!ui.content.length) { - ui.content.push(noResult); - } else { - $("#search-input").empty(); - } - }, - autoFocus: true, - focus: function(event, ui) { - return false; - }, - position: { - collision: "flip" - }, - select: function(event, ui) { - if (ui.item.category) { - var url = getURLPrefix(ui); - if (ui.item.category === catModules) { - url += "module-summary.html"; - } else if (ui.item.category === catPackages) { - if (ui.item.u) { - url = ui.item.u; - } else { - url += ui.item.l.replace(/\./g, '/') + "/package-summary.html"; - } - } else if (ui.item.category === catTypes) { - if (ui.item.u) { - url = ui.item.u; - } else if (ui.item.p === UNNAMED) { - url += ui.item.l + ".html"; - } else { - url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.l + ".html"; - } - } else if (ui.item.category === catMembers) { - if (ui.item.p === UNNAMED) { - url += ui.item.c + ".html" + "#"; - } else { - url += ui.item.p.replace(/\./g, '/') + "/" + ui.item.c + ".html" + "#"; - } - if (ui.item.u) { - url += ui.item.u; - } else { - url += ui.item.l; - } - } else if (ui.item.category === catSearchTags) { - url += ui.item.u; - } - if (top !== window) { - parent.classFrame.location = pathtoroot + url; - } else { - window.location.href = pathtoroot + url; - } - $("#search-input").focus(); - } - } - }); -}); diff --git a/docs/serialized-form.html b/docs/serialized-form.html deleted file mode 100644 index 86e2438..0000000 --- a/docs/serialized-form.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - -Serialized Form (digitaltwin-core-docs 3.0.5 API) - - - - - - - - - - - - - - -
                    - -
                    -
                    -
                    -

                    Serialized Form

                    -
                    - -
                    -
                    -
                    - - diff --git a/docs/stylesheet.css b/docs/stylesheet.css deleted file mode 100644 index 836c62d..0000000 --- a/docs/stylesheet.css +++ /dev/null @@ -1,865 +0,0 @@ -/* - * Javadoc style sheet - */ - -@import url('resources/fonts/dejavu.css'); - -/* - * Styles for individual HTML elements. - * - * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular - * HTML element throughout the page. - */ - -body { - background-color:#ffffff; - color:#353833; - font-family:'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:14px; - margin:0; - padding:0; - height:100%; - width:100%; -} -iframe { - margin:0; - padding:0; - height:100%; - width:100%; - overflow-y:scroll; - border:none; -} -a:link, a:visited { - text-decoration:none; - color:#4A6782; -} -a[href]:hover, a[href]:focus { - text-decoration:none; - color:#bb7a2a; -} -a[name] { - color:#353833; -} -pre { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; -} -h1 { - font-size:20px; -} -h2 { - font-size:18px; -} -h3 { - font-size:16px; -} -h4 { - font-size:15px; -} -h5 { - font-size:14px; -} -h6 { - font-size:13px; -} -ul { - list-style-type:disc; -} -code, tt { - font-family:'DejaVu Sans Mono', monospace; -} -:not(h1, h2, h3, h4, h5, h6) > code, -:not(h1, h2, h3, h4, h5, h6) > tt { - font-size:14px; - padding-top:4px; - margin-top:8px; - line-height:1.4em; -} -dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - padding-top:4px; -} -.summary-table dt code { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - vertical-align:top; - padding-top:4px; -} -sup { - font-size:8px; -} -button { - font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size: 14px; -} -/* - * Styles for HTML generated by javadoc. - * - * These are style classes that are used by the standard doclet to generate HTML documentation. - */ - -/* - * Styles for document title and copyright. - */ -.clear { - clear:both; - height:0; - overflow:hidden; -} -.about-language { - float:right; - padding:0 21px 8px 8px; - font-size:11px; - margin-top:-9px; - height:2.9em; -} -.legal-copy { - margin-left:.5em; -} -.tab { - background-color:#0066FF; - color:#ffffff; - padding:8px; - width:5em; - font-weight:bold; -} -/* - * Styles for navigation bar. - */ -@media screen { - .flex-box { - position:fixed; - display:flex; - flex-direction:column; - height: 100%; - width: 100%; - } - .flex-header { - flex: 0 0 auto; - } - .flex-content { - flex: 1 1 auto; - overflow-y: auto; - } -} -.top-nav { - background-color:#4D7A97; - color:#FFFFFF; - float:left; - padding:0; - width:100%; - clear:right; - min-height:2.8em; - padding-top:10px; - overflow:hidden; - font-size:12px; -} -.sub-nav { - background-color:#dee3e9; - float:left; - width:100%; - overflow:hidden; - font-size:12px; -} -.sub-nav div { - clear:left; - float:left; - padding:0 0 5px 6px; - text-transform:uppercase; -} -.sub-nav .nav-list { - padding-top:5px; -} -ul.nav-list { - display:block; - margin:0 25px 0 0; - padding:0; -} -ul.sub-nav-list { - float:left; - margin:0 25px 0 0; - padding:0; -} -ul.nav-list li { - list-style:none; - float:left; - padding: 5px 6px; - text-transform:uppercase; -} -.sub-nav .nav-list-search { - float:right; - margin:0 0 0 0; - padding:5px 6px; - clear:none; -} -.nav-list-search label { - position:relative; - right:-16px; -} -ul.sub-nav-list li { - list-style:none; - float:left; - padding-top:10px; -} -.top-nav a:link, .top-nav a:active, .top-nav a:visited { - color:#FFFFFF; - text-decoration:none; - text-transform:uppercase; -} -.top-nav a:hover { - text-decoration:none; - color:#bb7a2a; - text-transform:uppercase; -} -.nav-bar-cell1-rev { - background-color:#F8981D; - color:#253441; - margin: auto 5px; -} -.skip-nav { - position:absolute; - top:auto; - left:-9999px; - overflow:hidden; -} -/* - * Hide navigation links and search box in print layout - */ -@media print { - ul.nav-list, div.sub-nav { - display:none; - } -} -/* - * Styles for page header and footer. - */ -.title { - color:#2c4557; - margin:10px 0; -} -.sub-title { - margin:5px 0 0 0; -} -.header ul { - margin:0 0 15px 0; - padding:0; -} -.header ul li, .footer ul li { - list-style:none; - font-size:13px; -} -/* - * Styles for headings. - */ -body.class-declaration-page .summary h2, -body.class-declaration-page .details h2, -body.class-use-page h2, -body.module-declaration-page .block-list h2 { - font-style: italic; - padding:0; - margin:15px 0; -} -body.class-declaration-page .summary h3, -body.class-declaration-page .details h3, -body.class-declaration-page .summary .inherited-list h2 { - background-color:#dee3e9; - border:1px solid #d0d9e0; - margin:0 0 6px -8px; - padding:7px 5px; -} -/* - * Styles for page layout containers. - */ -main { - clear:both; - padding:10px 20px; - position:relative; -} -dl.notes > dt { - font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; - font-size:12px; - font-weight:bold; - margin:10px 0 0 0; - color:#4E4E4E; -} -dl.notes > dd { - margin:5px 10px 10px 0; - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} -dl.name-value > dt { - margin-left:1px; - font-size:1.1em; - display:inline; - font-weight:bold; -} -dl.name-value > dd { - margin:0 0 0 1px; - font-size:1.1em; - display:inline; -} -/* - * Styles for lists. - */ -li.circle { - list-style:circle; -} -ul.horizontal li { - display:inline; - font-size:0.9em; -} -div.inheritance { - margin:0; - padding:0; -} -div.inheritance div.inheritance { - margin-left:2em; -} -ul.block-list, -ul.details-list, -ul.member-list, -ul.summary-list { - margin:10px 0 10px 0; - padding:0; -} -ul.block-list > li, -ul.details-list > li, -ul.member-list > li, -ul.summary-list > li { - list-style:none; - margin-bottom:15px; - line-height:1.4; -} -.summary-table dl, .summary-table dl dt, .summary-table dl dd { - margin-top:0; - margin-bottom:1px; -} -ul.see-list, ul.see-list-long { - padding-left: 0; - list-style: none; -} -ul.see-list li { - display: inline; -} -ul.see-list li:not(:last-child):after, -ul.see-list-long li:not(:last-child):after { - content: ", "; - white-space: pre-wrap; -} -/* - * Styles for tables. - */ -.summary-table, .details-table { - width:100%; - border-spacing:0; - border-left:1px solid #EEE; - border-right:1px solid #EEE; - border-bottom:1px solid #EEE; - padding:0; -} -.caption { - position:relative; - text-align:left; - background-repeat:no-repeat; - color:#253441; - font-weight:bold; - clear:none; - overflow:hidden; - padding:0; - padding-top:10px; - padding-left:1px; - margin:0; - white-space:pre; -} -.caption a:link, .caption a:visited { - color:#1f389c; -} -.caption a:hover, -.caption a:active { - color:#FFFFFF; -} -.caption span { - white-space:nowrap; - padding-top:5px; - padding-left:12px; - padding-right:12px; - padding-bottom:7px; - display:inline-block; - float:left; - background-color:#F8981D; - border: none; - height:16px; -} -div.table-tabs { - padding:10px 0 0 1px; - margin:0; -} -div.table-tabs > button { - border: none; - cursor: pointer; - padding: 5px 12px 7px 12px; - font-weight: bold; - margin-right: 3px; -} -div.table-tabs > button.active-table-tab { - background: #F8981D; - color: #253441; -} -div.table-tabs > button.table-tab { - background: #4D7A97; - color: #FFFFFF; -} -.two-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(15%, auto); -} -.three-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, auto); -} -.four-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(10%, max-content) minmax(10%, max-content) minmax(10%, auto); -} -@media screen and (max-width: 600px) { - .two-column-summary { - display: grid; - grid-template-columns: 1fr; - } -} -@media screen and (max-width: 800px) { - .three-column-summary { - display: grid; - grid-template-columns: minmax(10%, max-content) minmax(25%, auto); - } - .three-column-summary .col-last { - grid-column-end: span 2; - } -} -@media screen and (max-width: 1000px) { - .four-column-summary { - display: grid; - grid-template-columns: minmax(15%, max-content) minmax(15%, auto); - } -} -.summary-table > div, .details-table > div { - text-align:left; - padding: 8px 3px 3px 7px; -} -.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { - vertical-align:top; - padding-right:0; - padding-top:8px; - padding-bottom:3px; -} -.table-header { - background:#dee3e9; - font-weight: bold; -} -.col-first, .col-first { - font-size:13px; -} -.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { - font-size:13px; -} -.col-first, .col-second, .col-constructor-name { - vertical-align:top; - overflow: auto; -} -.col-last { - white-space:normal; -} -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-first a:link, .col-first a:visited, -.col-second a:link, .col-second a:visited, -.col-constructor-name a:link, .col-constructor-name a:visited, -.col-summary-item-name a:link, .col-summary-item-name a:visited, -.constant-values-container a:link, .constant-values-container a:visited, -.all-classes-container a:link, .all-classes-container a:visited, -.all-packages-container a:link, .all-packages-container a:visited { - font-weight:bold; -} -.table-sub-heading-color { - background-color:#EEEEFF; -} -.even-row-color, .even-row-color .table-header { - background-color:#FFFFFF; -} -.odd-row-color, .odd-row-color .table-header { - background-color:#EEEEEF; -} -/* - * Styles for contents. - */ -.deprecated-content { - margin:0; - padding:10px 0; -} -div.block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; -} -.col-last div { - padding-top:0; -} -.col-last a { - padding-bottom:3px; -} -.module-signature, -.package-signature, -.type-signature, -.member-signature { - font-family:'DejaVu Sans Mono', monospace; - font-size:14px; - margin:14px 0; - white-space: pre-wrap; -} -.module-signature, -.package-signature, -.type-signature { - margin-top: 0; -} -.member-signature .type-parameters-long, -.member-signature .parameters, -.member-signature .exceptions { - display: inline-block; - vertical-align: top; - white-space: pre; -} -.member-signature .type-parameters { - white-space: normal; -} -/* - * Styles for formatting effect. - */ -.source-line-no { - color:green; - padding:0 30px 0 0; -} -h1.hidden { - visibility:hidden; - overflow:hidden; - font-size:10px; -} -.block { - display:block; - margin:0 10px 5px 0; - color:#474747; -} -.deprecated-label, .descfrm-type-label, .implementation-label, .member-name-label, .member-name-link, -.module-label-in-package, .module-label-in-type, .override-specify-label, .package-label-in-type, -.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { - font-weight:bold; -} -.deprecation-comment, .help-footnote, .preview-comment { - font-style:italic; -} -.deprecation-block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -.preview-block { - font-size:14px; - font-family:'DejaVu Serif', Georgia, "Times New Roman", Times, serif; - border-style:solid; - border-width:thin; - border-radius:10px; - padding:10px; - margin-bottom:10px; - margin-right:10px; - display:inline-block; -} -div.block div.deprecation-comment { - font-style:normal; -} -/* - * Styles specific to HTML5 elements. - */ -main, nav, header, footer, section { - display:block; -} -/* - * Styles for javadoc search. - */ -.ui-autocomplete-category { - font-weight:bold; - font-size:15px; - padding:7px 0 7px 3px; - background-color:#4D7A97; - color:#FFFFFF; -} -.result-item { - font-size:13px; -} -.ui-autocomplete { - max-height:85%; - max-width:65%; - overflow-y:scroll; - overflow-x:scroll; - white-space:nowrap; - box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); -} -ul.ui-autocomplete { - position:fixed; - z-index:999999; -} -ul.ui-autocomplete li { - float:left; - clear:both; - width:100%; -} -.result-highlight { - font-weight:bold; -} -#search-input { - background-image:url('resources/glass.png'); - background-size:13px; - background-repeat:no-repeat; - background-position:2px 3px; - padding-left:20px; - position:relative; - right:-18px; - width:400px; -} -#reset-button { - background-color: rgb(255,255,255); - background-image:url('resources/x.png'); - background-position:center; - background-repeat:no-repeat; - background-size:12px; - border:0 none; - width:16px; - height:16px; - position:relative; - left:-4px; - top:-4px; - font-size:0px; -} -.watermark { - color:#545454; -} -.search-tag-desc-result { - font-style:italic; - font-size:11px; -} -.search-tag-holder-result { - font-style:italic; - font-size:12px; -} -.search-tag-result:target { - background-color:yellow; -} -.module-graph span { - display:none; - position:absolute; -} -.module-graph:hover span { - display:block; - margin: -100px 0 0 100px; - z-index: 1; -} -.inherited-list { - margin: 10px 0 10px 0; -} -section.class-description { - line-height: 1.4; -} -.summary section[class$="-summary"], .details section[class$="-details"], -.class-uses .detail, .serialized-class-details { - padding: 0px 20px 5px 10px; - border: 1px solid #ededed; - background-color: #f8f8f8; -} -.inherited-list, section[class$="-details"] .detail { - padding:0 0 5px 8px; - background-color:#ffffff; - border:none; -} -.vertical-separator { - padding: 0 5px; -} -ul.help-section-list { - margin: 0; -} -ul.help-subtoc > li { - display: inline-block; - padding-right: 5px; - font-size: smaller; -} -ul.help-subtoc > li::before { - content: "\2022" ; - padding-right:2px; -} -span.help-note { - font-style: italic; -} -/* - * Indicator icon for external links. - */ -main a[href*="://"]::after { - content:""; - display:inline-block; - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); - background-size:100% 100%; - width:7px; - height:7px; - margin-left:2px; - margin-bottom:4px; -} -main a[href*="://"]:hover::after, -main a[href*="://"]:focus::after { - background-image:url('data:image/svg+xml; utf8, \ - \ - \ - '); -} - -/* - * Styles for user-provided tables. - * - * borderless: - * No borders, vertical margins, styled caption. - * This style is provided for use with existing doc comments. - * In general, borderless tables should not be used for layout purposes. - * - * plain: - * Plain borders around table and cells, vertical margins, styled caption. - * Best for small tables or for complex tables for tables with cells that span - * rows and columns, when the "striped" style does not work well. - * - * striped: - * Borders around the table and vertical borders between cells, striped rows, - * vertical margins, styled caption. - * Best for tables that have a header row, and a body containing a series of simple rows. - */ - -table.borderless, -table.plain, -table.striped { - margin-top: 10px; - margin-bottom: 10px; -} -table.borderless > caption, -table.plain > caption, -table.striped > caption { - font-weight: bold; - font-size: smaller; -} -table.borderless th, table.borderless td, -table.plain th, table.plain td, -table.striped th, table.striped td { - padding: 2px 5px; -} -table.borderless, -table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, -table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { - border: none; -} -table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { - background-color: transparent; -} -table.plain { - border-collapse: collapse; - border: 1px solid black; -} -table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { - background-color: transparent; -} -table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, -table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { - border: 1px solid black; -} -table.striped { - border-collapse: collapse; - border: 1px solid black; -} -table.striped > thead { - background-color: #E3E3E3; -} -table.striped > thead > tr > th, table.striped > thead > tr > td { - border: 1px solid black; -} -table.striped > tbody > tr:nth-child(even) { - background-color: #EEE -} -table.striped > tbody > tr:nth-child(odd) { - background-color: #FFF -} -table.striped > tbody > tr > th, table.striped > tbody > tr > td { - border-left: 1px solid black; - border-right: 1px solid black; -} -table.striped > tbody > tr > th { - font-weight: normal; -} -/** - * Tweak font sizes and paddings for small screens. - */ -@media screen and (max-width: 1050px) { - #search-input { - width: 300px; - } -} -@media screen and (max-width: 800px) { - #search-input { - width: 200px; - } - .top-nav, - .bottom-nav { - font-size: 11px; - padding-top: 6px; - } - .sub-nav { - font-size: 11px; - } - .about-language { - padding-right: 16px; - } - ul.nav-list li, - .sub-nav .nav-list-search { - padding: 6px; - } - ul.sub-nav-list li { - padding-top: 5px; - } - main { - padding: 10px; - } - .summary section[class$="-summary"], .details section[class$="-details"], - .class-uses .detail, .serialized-class-details { - padding: 0 8px 5px 8px; - } - body { - -webkit-text-size-adjust: none; - } -} -@media screen and (max-width: 500px) { - #search-input { - width: 150px; - } - .top-nav, - .bottom-nav { - font-size: 10px; - } - .sub-nav { - font-size: 10px; - } - .about-language { - font-size: 10px; - padding-right: 12px; - } -} diff --git a/docs/tag-search-index.js b/docs/tag-search-index.js deleted file mode 100644 index f38b3cb..0000000 --- a/docs/tag-search-index.js +++ /dev/null @@ -1 +0,0 @@ -tagSearchIndex = [{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/type-search-index.js b/docs/type-search-index.js deleted file mode 100644 index 3146686..0000000 --- a/docs/type-search-index.js +++ /dev/null @@ -1 +0,0 @@ -typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"AlertProviderConfiguration"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheOperationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"CacheResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"DigitalTwinTimerMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"InitSimulationContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageFactory"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"MessageProcessorBase"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ModelSchema"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProvider"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"PersistenceProviderType"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SharedData"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.core","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file From 4cd62a77f8f7ad0ae907191039649c7155cc42cc Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 14 May 2026 11:08:40 -0700 Subject: [PATCH 31/35] Docs update --- .../java/com/scaleoutsoftware/digitaltwin/development/Util.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java index de5cda4..582c09a 100644 --- a/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java +++ b/Development/src/main/java/com/scaleoutsoftware/digitaltwin/development/Util.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; -public class Util { +class Util { public static List copyOf(Collection source) { if (source == null) { throw new NullPointerException("source"); From f266e1abc96cf7bb124c75ffa700539511e8eb68 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 14 May 2026 11:09:04 -0700 Subject: [PATCH 32/35] Update gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 51172dc..d62ce0a 100644 --- a/.gitignore +++ b/.gitignore @@ -82,3 +82,4 @@ Core/gradle/wrapper/gradle-wrapper.jar Core/gradle/wrapper/gradle-wrapper.jar /Development/target /Abstractions/target +/docs/digitaltwin-core-docs/target From 70638df8d5854f74dd0b50fe8eae679c16890418 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 14 May 2026 11:13:24 -0700 Subject: [PATCH 33/35] Updating local build scripts + readme's for proper mvn central links --- Abstractions/README.md | 4 ++-- Abstractions/build.bat | 4 ++-- Abstractions/build.sh | 7 +++++++ Development/README.md | 2 +- Development/build.bat | 4 ++-- Development/build.sh | 7 +++++++ README.md | 4 ++-- docs/digitaltwin-core-docs/README.md | 4 ++-- docs/digitaltwin-core-docs/build.bat | 8 ++++++++ docs/digitaltwin-core-docs/build.sh | 7 +++++++ 10 files changed, 40 insertions(+), 11 deletions(-) create mode 100644 Abstractions/build.sh create mode 100644 Development/build.sh create mode 100644 docs/digitaltwin-core-docs/build.bat create mode 100644 docs/digitaltwin-core-docs/build.sh diff --git a/Abstractions/README.md b/Abstractions/README.md index 2038d2e..ced7955 100644 --- a/Abstractions/README.md +++ b/Abstractions/README.md @@ -1,8 +1,8 @@ # ScaleOut Digital Twins™ Abstractions Libraries for Java -The open source (Apache 2.0 licensed) project for the Abstractions API: +The open source (Apache 2.0 licensed) project for the digitaltwin-abstractions API: -- [com.scaleoutsoftware.digitaltwin.abstractions](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/core/3.2.2): Abstractions required for building Digital Twin models. +- [com.scaleoutsoftware.digitaltwin:digitaltwin-abstractions](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/digitaltwin-abstractions/3.0.0): Abstract datatypes required for building Digital Twin models. ## Documentation diff --git a/Abstractions/build.bat b/Abstractions/build.bat index 54626e9..a40786e 100644 --- a/Abstractions/build.bat +++ b/Abstractions/build.bat @@ -3,6 +3,6 @@ rem * Requirements * rem ******************** rem * Java JDK 8 rem * MVN 3.x -SET JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.452.9-hotspot -SET MVN_HOME=C:\JavaBuildTools\apache-maven-3.9.8 +SET JAVA_HOME=C:\path\to\java8 +SET MVN_HOME=C:\path\to\maven call mvn clean package install javadoc:jar source:jar \ No newline at end of file diff --git a/Abstractions/build.sh b/Abstractions/build.sh new file mode 100644 index 0000000..83def59 --- /dev/null +++ b/Abstractions/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh +export JAVA_HOME="/path/to/java8" +export MVN_HOME="/path/to/maven" + +export PATH="$JAVA_HOME/bin:$MVN_HOME/bin:$PATH" + +mvn clean package install javadoc:jar source:jar \ No newline at end of file diff --git a/Development/README.md b/Development/README.md index a48dbe3..93648f8 100644 --- a/Development/README.md +++ b/Development/README.md @@ -2,7 +2,7 @@ The open source (Apache 2.0 licensed) project for the Workbench API: -- [com.scaleout.digitaltwin.development](https://repo.scaleoutsoftware.com/#artifact/com.scaleoutsoftware.digitaltwin/development): A lightweight [development/testing framework](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/software_toolkit/dt_builder/java_api/workbench.html) for running Digital Twin models. +- [com.scaleoutsoftware.digitaltwin:digitaltwin-development](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/digitaltwin-development/3.0.0): A lightweight [development/testing framework](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/software_toolkit/dt_builder/java_api/workbench.html) for running Digital Twin models. ## Documentation - [Class reference](https://scaleoutsoftware.github.io/JavaDigitalTwinCore/) diff --git a/Development/build.bat b/Development/build.bat index 54626e9..a40786e 100644 --- a/Development/build.bat +++ b/Development/build.bat @@ -3,6 +3,6 @@ rem * Requirements * rem ******************** rem * Java JDK 8 rem * MVN 3.x -SET JAVA_HOME=C:\Program Files\Eclipse Adoptium\jdk-8.0.452.9-hotspot -SET MVN_HOME=C:\JavaBuildTools\apache-maven-3.9.8 +SET JAVA_HOME=C:\path\to\java8 +SET MVN_HOME=C:\path\to\maven call mvn clean package install javadoc:jar source:jar \ No newline at end of file diff --git a/Development/build.sh b/Development/build.sh new file mode 100644 index 0000000..83def59 --- /dev/null +++ b/Development/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh +export JAVA_HOME="/path/to/java8" +export MVN_HOME="/path/to/maven" + +export PATH="$JAVA_HOME/bin:$MVN_HOME/bin:$PATH" + +mvn clean package install javadoc:jar source:jar \ No newline at end of file diff --git a/README.md b/README.md index d64df82..778cce5 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ This repository contains the open source (Apache 2.0 licensed) projects for the following artifacts: -- [com.scaleout.digitaltwin.core](https://repo.scaleoutsoftware.com/#artifact/com.scaleoutsoftware.digitaltwin/core): Core datatypes required for building Digital Twin models. -- [com.scaleout.digitaltwin.development](https://repo.scaleoutsoftware.com/#artifact/com.scaleoutsoftware.digitaltwin/development): A lightweight [development/testing framework](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/software_toolkit/dt_builder/java_api/workbench.html) for running Digital Twin models. +- [com.scaleoutsoftware.digitaltwin:digitaltwin-abstractions](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/digitaltwin-abstractions/3.0.0): Abstract datatypes required for building Digital Twin models. +- [com.scaleoutsoftware.digitaltwin:digitaltwin-development](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/digitaltwin-development/3.0.0): A lightweight [development/testing framework](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/software_toolkit/dt_builder/java_api/workbench.html) for running Digital Twin models. ## Documentation - [Class reference](https://scaleoutsoftware.github.io/JavaDigitalTwinCore/) diff --git a/docs/digitaltwin-core-docs/README.md b/docs/digitaltwin-core-docs/README.md index 01cc8e3..4a10121 100644 --- a/docs/digitaltwin-core-docs/README.md +++ b/docs/digitaltwin-core-docs/README.md @@ -2,8 +2,8 @@ This open source (Apache 2.0 licensed) project combines the following artifacts source to create a unified JavaDoc: -- [com.scaleout.digitaltwin.core](https://repo.scaleoutsoftware.com/#artifact/com.scaleoutsoftware.digitaltwin/core): Core datatypes required for building Digital Twin models. -- [com.scaleout.digitaltwin.development](https://repo.scaleoutsoftware.com/#artifact/com.scaleoutsoftware.digitaltwin/development): A lightweight [development/testing framework](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/software_toolkit/dt_builder/java_api/workbench.html) for running Digital Twin models. +- [com.scaleoutsoftware.digitaltwin:digitaltwin-abstractions](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/digitaltwin-abstractions/3.0.0): Abstract datatypes required for building Digital Twin models. +- [com.scaleoutsoftware.digitaltwin:digitaltwin-development](https://mvnrepository.com/artifact/com.scaleoutsoftware.digitaltwin/digitaltwin-development/3.0.0): A lightweight [development/testing framework](https://static.scaleoutsoftware.com/docs/digital_twin_user_guide/software_toolkit/dt_builder/java_api/workbench.html) for running Digital Twin models. ## Documentation - [Class reference](https://scaleoutsoftware.github.io/JavaDigitalTwinCore/) diff --git a/docs/digitaltwin-core-docs/build.bat b/docs/digitaltwin-core-docs/build.bat new file mode 100644 index 0000000..80cb8fb --- /dev/null +++ b/docs/digitaltwin-core-docs/build.bat @@ -0,0 +1,8 @@ +rem ******************** +rem * Requirements * +rem ******************** +rem * Java JDK 8 +rem * MVN 3.x +SET JAVA_HOME=C:\path\to\java8 +SET MVN_HOME=C:\path\to\maven +call mvn javadoc:aggregate \ No newline at end of file diff --git a/docs/digitaltwin-core-docs/build.sh b/docs/digitaltwin-core-docs/build.sh new file mode 100644 index 0000000..453923e --- /dev/null +++ b/docs/digitaltwin-core-docs/build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env sh +export JAVA_HOME="/path/to/java8" +export MVN_HOME="/path/to/maven" + +export PATH="$JAVA_HOME/bin:$MVN_HOME/bin:$PATH" + +mvn javadoc:aggregate \ No newline at end of file From 329d35d926a52202c5d148e33bbab4fe953c8339 Mon Sep 17 00:00:00 2001 From: Brandon Date: Thu, 14 May 2026 11:18:59 -0700 Subject: [PATCH 34/35] Rebuild javadocs and publish --- docs/allclasses-index.html | 178 +++ docs/allpackages-index.html | 75 + .../abstractions/AlertMessage.html | 283 ++++ .../AzureDigitalTwinsProvider.html | 376 +++++ .../abstractions/CacheOperationStatus.html | 276 ++++ .../digitaltwin/abstractions/CacheResult.html | 183 +++ .../abstractions/CreateResult.html | 243 ++++ .../abstractions/DeleteResult.html | 243 ++++ .../abstractions/DigitalTwinBase.html | 364 +++++ .../digitaltwin/abstractions/InitContext.html | 268 ++++ .../abstractions/InitSimulationContext.html | 168 +++ .../abstractions/MessageProcessor.html | 203 +++ .../abstractions/ProcessingContext.html | 480 +++++++ .../abstractions/ProcessingResult.html | 255 ++++ .../abstractions/SendingResult.html | 255 ++++ .../digitaltwin/abstractions/SharedData.html | 208 +++ .../abstractions/SimulationController.html | 361 +++++ .../abstractions/SimulationProcessor.html | 239 ++++ .../abstractions/SimulationStatus.html | 298 ++++ .../abstractions/TimerActionResult.html | 299 ++++ .../abstractions/TimerHandler.html | 164 +++ .../abstractions/TimerMetadata.html | 246 ++++ .../digitaltwin/abstractions/TimerType.html | 243 ++++ .../abstractions/class-use/AlertMessage.html | 113 ++ .../class-use/AzureDigitalTwinsProvider.html | 91 ++ .../class-use/CacheOperationStatus.html | 102 ++ .../abstractions/class-use/CacheResult.html | 107 ++ .../abstractions/class-use/CreateResult.html | 110 ++ .../abstractions/class-use/DeleteResult.html | 120 ++ .../class-use/DigitalTwinBase.html | 183 +++ .../abstractions/class-use/InitContext.html | 91 ++ .../class-use/InitSimulationContext.html | 94 ++ .../class-use/MessageProcessor.html | 101 ++ .../class-use/ProcessingContext.html | 107 ++ .../class-use/ProcessingResult.html | 126 ++ .../abstractions/class-use/SendingResult.html | 147 ++ .../abstractions/class-use/SharedData.html | 141 ++ .../class-use/SimulationController.html | 91 ++ .../class-use/SimulationProcessor.html | 94 ++ .../class-use/SimulationStatus.html | 122 ++ .../class-use/TimerActionResult.html | 125 ++ .../abstractions/class-use/TimerHandler.html | 151 ++ .../abstractions/class-use/TimerMetadata.html | 62 + .../abstractions/class-use/TimerType.html | 140 ++ .../abstractions/package-summary.html | 186 +++ .../abstractions/package-tree.html | 114 ++ .../digitaltwin/abstractions/package-use.html | 200 +++ .../digitaltwin/development/LogMessage.html | 190 +++ .../development/SimulationEventResult.html | 151 ++ .../development/SimulationStep.html | 174 +++ .../digitaltwin/development/Util.html | 186 +++ .../digitaltwin/development/Workbench.html | 833 +++++++++++ .../development/WorkbenchException.html | 241 ++++ .../development/class-use/LogMessage.html | 92 ++ .../class-use/SimulationEventResult.html | 62 + .../development/class-use/SimulationStep.html | 107 ++ .../development/class-use/Util.html | 62 + .../development/class-use/Workbench.html | 62 + .../class-use/WorkbenchException.html | 165 +++ .../development/package-summary.html | 119 ++ .../digitaltwin/development/package-tree.html | 88 ++ .../digitaltwin/development/package-use.html | 96 ++ docs/copy.svg | 33 + docs/element-list | 2 + docs/help-doc.html | 198 +++ docs/index-all.html | 872 +++++++++++ docs/index.html | 77 + docs/legal/ADDITIONAL_LICENSE_INFO | 1 + docs/legal/ASSEMBLY_EXCEPTION | 1 + docs/legal/LICENSE | 1 + docs/legal/jquery.md | 26 + docs/legal/jqueryUI.md | 49 + docs/link.svg | 31 + docs/member-search-index.js | 1 + docs/module-search-index.js | 1 + docs/overview-summary.html | 26 + docs/overview-tree.html | 128 ++ docs/package-search-index.js | 1 + docs/resources/glass.png | Bin 0 -> 499 bytes docs/resources/x.png | Bin 0 -> 394 bytes docs/script-dir/jquery-3.7.1.min.js | 2 + docs/script-dir/jquery-ui.min.css | 6 + docs/script-dir/jquery-ui.min.js | 6 + docs/script.js | 253 ++++ docs/search-page.js | 284 ++++ docs/search.html | 77 + docs/search.js | 458 ++++++ docs/serialized-form.html | 117 ++ docs/stylesheet.css | 1272 +++++++++++++++++ docs/tag-search-index.js | 1 + docs/type-search-index.js | 1 + 91 files changed, 15379 insertions(+) create mode 100644 docs/allclasses-index.html create mode 100644 docs/allpackages-index.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AlertMessage.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AzureDigitalTwinsProvider.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheOperationStatus.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CreateResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DeleteResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DigitalTwinBase.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitSimulationContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/MessageProcessor.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingContext.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SendingResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SharedData.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationController.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationProcessor.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationStatus.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerActionResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerHandler.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerMetadata.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerType.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/package-summary.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/package-tree.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/abstractions/package-use.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/Util.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/class-use/LogMessage.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationEventResult.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationStep.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/class-use/Util.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/class-use/Workbench.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/class-use/WorkbenchException.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html create mode 100644 docs/com/scaleoutsoftware/digitaltwin/development/package-use.html create mode 100644 docs/copy.svg create mode 100644 docs/element-list create mode 100644 docs/help-doc.html create mode 100644 docs/index-all.html create mode 100644 docs/index.html create mode 100644 docs/legal/ADDITIONAL_LICENSE_INFO create mode 100644 docs/legal/ASSEMBLY_EXCEPTION create mode 100644 docs/legal/LICENSE create mode 100644 docs/legal/jquery.md create mode 100644 docs/legal/jqueryUI.md create mode 100644 docs/link.svg create mode 100644 docs/member-search-index.js create mode 100644 docs/module-search-index.js create mode 100644 docs/overview-summary.html create mode 100644 docs/overview-tree.html create mode 100644 docs/package-search-index.js create mode 100644 docs/resources/glass.png create mode 100644 docs/resources/x.png create mode 100644 docs/script-dir/jquery-3.7.1.min.js create mode 100644 docs/script-dir/jquery-ui.min.css create mode 100644 docs/script-dir/jquery-ui.min.js create mode 100644 docs/script.js create mode 100644 docs/search-page.js create mode 100644 docs/search.html create mode 100644 docs/search.js create mode 100644 docs/serialized-form.html create mode 100644 docs/stylesheet.css create mode 100644 docs/tag-search-index.js create mode 100644 docs/type-search-index.js diff --git a/docs/allclasses-index.html b/docs/allclasses-index.html new file mode 100644 index 0000000..86c7271 --- /dev/null +++ b/docs/allclasses-index.html @@ -0,0 +1,178 @@ + + + + +All Classes and Interfaces (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    All Classes and Interfaces

                    +
                    +
                    +
                    +
                    +
                    +
                    Class
                    +
                    Description
                    + +
                    +
                    A message that should be sent to a configured alert provider.
                    +
                    + +
                    +
                    An interface that can be used for persisting/retrieving the state of real-time digital twins.
                    +
                    + +
                    +
                    Status of a cache operation.
                    +
                    + +
                    +
                    Represents a response from a SharedData operation.
                    +
                    + +
                    +
                    Enum indicating the status of a delete operation.
                    +
                    + +
                    +
                    Enum indicating the status of a delete operation.
                    +
                    + +
                    +
                    A real-time digital twin of a data source.
                    +
                    + +
                    +
                    The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing + digital twin.
                    +
                    + +
                    +
                    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
                    +
                    + +
                    +
                    A messaged that was logged by a digital twin.
                    +
                    + +
                    +
                    Processes messages for a real-time digital twin.
                    +
                    + +
                    +
                    Context object that allows the user to send a message to a DataSource.
                    +
                    + +
                    +
                    The result from a message processor which indicates to update the twin instance, not update the twin instance, or + remove the twin instance.
                    +
                    + +
                    +
                    Marks a message as Handled, Enqueued, or Not Handled
                    +
                    + +
                    +
                    SharedData is used to access a model's, or globally, shared cache.
                    +
                    + +
                    +
                    The SimulationController interface is used to interact with the running DigitalTwin simulation.
                    +
                    + +
                    +
                    A simulation event result.
                    +
                    + +
                    +
                    Processes simulation events for a digital twin.
                    +
                    + +
                    +
                    The status of a simulation.
                    +
                    + +
                    +
                    The simulation step class encases the metadata for a completed interval of a simulation.
                    +
                    + +
                    +
                    The result of a timer action.
                    +
                    + +
                    +
                    Callback to a handle a timer message for a DigitalTwinBase.
                    +
                    + +
                    +
                    Metadata class for a timer.
                    +
                    + +
                    +
                    Enum representation of the available timer types
                    +
                    + +
                    +
                    The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
                    +
                    + +
                    +
                    A Workbench exception indicates that a real-time or simulated twin caused an exception.
                    +
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/allpackages-index.html b/docs/allpackages-index.html new file mode 100644 index 0000000..bbbbda0 --- /dev/null +++ b/docs/allpackages-index.html @@ -0,0 +1,75 @@ + + + + +All Packages (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    All Packages

                    +
                    +
                    Package Summary
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.html new file mode 100644 index 0000000..8964c9c --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/AlertMessage.html @@ -0,0 +1,283 @@ + + + + +AlertMessage (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class AlertMessage

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    +
                    +
                    public class AlertMessage +extends Object
                    +
                    A message that should be sent to a configured alert provider.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        AlertMessage

                        +
                        public AlertMessage(String title, + String severity, + String message)
                        +
                        Construct an alert message with a title, severity, and custom message.
                        +
                        +
                        Parameters:
                        +
                        title - the title for the alert message.
                        +
                        severity - the severity for this alert.
                        +
                        message - the custom message for this alert.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        AlertMessage

                        +
                        public AlertMessage(String title, + String severity, + String message, + HashMap<String,String> optProps)
                        +
                        Construct an alert message with a title, severity, and custom message.
                        +
                        +
                        Parameters:
                        +
                        title - the title for the alert message.
                        +
                        severity - the severity for this alert.
                        +
                        message - the custom message for this alert.
                        +
                        optProps - the optional properties that should be sent to the alerting provider.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getTitle

                        +
                        public String getTitle()
                        +
                        Retrieve the title for this alert message.
                        +
                        +
                        Returns:
                        +
                        the title of this alert message.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSeverity

                        +
                        public String getSeverity()
                        +
                        Retrieve the severity for this alert message.
                        +
                        +
                        Returns:
                        +
                        the severity for this alert message.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getMessage

                        +
                        public String getMessage()
                        +
                        Retrieve the message for this alert message.
                        +
                        +
                        Returns:
                        +
                        the message for this alert message.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getOptionalTwinInstanceProperties

                        +
                        public HashMap<String,String> getOptionalTwinInstanceProperties()
                        +
                        Retrieve the optional twin instance properties for this alert message.
                        +
                        +
                        Returns:
                        +
                        the optional twin instance properties for this alert message.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        toString

                        +
                        public String toString()
                        +
                        +
                        Overrides:
                        +
                        toString in class Object
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.html new file mode 100644 index 0000000..bd9bc63 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/AzureDigitalTwinsProvider.html @@ -0,0 +1,376 @@ + + + + +AzureDigitalTwinsProvider (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Interface AzureDigitalTwinsProvider

                    +
                    +
                    +
                    +
                    public interface AzureDigitalTwinsProvider
                    +
                    An interface that can be used for persisting/retrieving the state of real-time digital twins.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        isActive

                        +
                        boolean isActive()
                        +
                        Returns true if this PersistenceProvider is active, false otherwise.
                        +
                        +
                        Returns:
                        +
                        true if this PersistenceProvider is active, false otherwise.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getInstanceIdsAsync

                        +
                        CompletableFuture<List<String>> getInstanceIdsAsync(String containerName)
                        +
                        Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        Returns:
                        +
                        a future that will return a list of instances.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getInstanceIds

                        +
                        List<String> getInstanceIds(String containerName)
                        +
                        Retrieves the instance IDs stored in a container, or an empty list if no instances exist.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        Returns:
                        +
                        a list of instances.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getInstanceAsync

                        +
                        CompletableFuture<String> getInstanceAsync(String containerName, + String instanceId)
                        +
                        Retrieves a future that when complete will return an instance or null if it doesn't exist.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        instanceId - the instance identifier.
                        +
                        Returns:
                        +
                        a future that will return an instance or null.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getInstance

                        +
                        String getInstance(String containerName, + String instanceId)
                        +
                        Retrieves an instance or null if it doesn't exist.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name
                        +
                        instanceId - the instance identifier
                        +
                        Returns:
                        +
                        the instance or null.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getPropertyMapAsync

                        +
                        CompletableFuture<Map<String,String>> getPropertyMapAsync(String containerName)
                        +
                        Retrieves a future that will return a map of property names to property, or an empty map.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        Returns:
                        +
                        a future that will return a map of property names to property types.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getPropertyMap

                        +
                        Map<String,String> getPropertyMap(String containerName)
                        +
                        Retrieves a map of property names to property types, or an empty map.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        Returns:
                        +
                        a map of property names to property types.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        updatePropertyAsync

                        +
                        CompletableFuture<Void> updatePropertyAsync(String containerName, + String instanceId, + String propertyName, + Object propertyValue)
                        +
                        Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated. + Updates a property for the provided instance id in the provided container specified by the property name and property value.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        instanceId - the instance id.
                        +
                        propertyName - the property name.
                        +
                        propertyValue - the property value.
                        +
                        Returns:
                        +
                        a future that will complete exceptionally or return void.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        updateProperty

                        +
                        void updateProperty(String containerName, + String instanceId, + String propertyName, + Object propertyValue)
                        +
                        Updates a property for the provided instance id in the provided container specified by the property name and property value.
                        +
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        instanceId - the instance id.
                        +
                        propertyName - the property name.
                        +
                        propertyValue - the property value.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getPropertyAsync

                        +
                        <T> CompletableFuture<T> getPropertyAsync(String containerName, + String instanceId, + String propertyName, + Class<T> clazz)
                        +
                        Retrieves a future that will return a property or null if the property does not exist.
                        +
                        +
                        Type Parameters:
                        +
                        T - the type of the property to return
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        instanceId - the instance id.
                        +
                        propertyName - the property name.
                        +
                        clazz - the class representing the property.
                        +
                        Returns:
                        +
                        the property or null if the property does not exist.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getProperty

                        +
                        <T> T getProperty(String containerName, + String instanceId, + String propertyName, + Class<T> clazz)
                        +
                        Retrieves a property or null if the property does not exist.
                        +
                        +
                        Type Parameters:
                        +
                        T - the type of the property to return.
                        +
                        Parameters:
                        +
                        containerName - the container name.
                        +
                        instanceId - the instance id.
                        +
                        propertyName - the property name
                        +
                        clazz - the class representing the property.
                        +
                        Returns:
                        +
                        the property or null if the property does not exist.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.html new file mode 100644 index 0000000..7edc126 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheOperationStatus.html @@ -0,0 +1,276 @@ + + + + +CacheOperationStatus (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class CacheOperationStatus

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<CacheOperationStatus> +
                    com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<CacheOperationStatus>, Constable
                    +
                    +
                    +
                    public enum CacheOperationStatus +extends Enum<CacheOperationStatus>
                    +
                    Status of a cache operation.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        ObjectRetrieved

                        +
                        public static final CacheOperationStatus ObjectRetrieved
                        +
                        The object was successfully retrieved.
                        +
                        +
                      • +
                      • +
                        +

                        ObjectPut

                        +
                        public static final CacheOperationStatus ObjectPut
                        +
                        The object was successfully added/updated.
                        +
                        +
                      • +
                      • +
                        +

                        ObjectDoesNotExist

                        +
                        public static final CacheOperationStatus ObjectDoesNotExist
                        +
                        The object could not be retrieved because it was not found.
                        +
                        +
                      • +
                      • +
                        +

                        ObjectRemoved

                        +
                        public static final CacheOperationStatus ObjectRemoved
                        +
                        The object was removed successfully.
                        +
                        +
                      • +
                      • +
                        +

                        CacheCleared

                        +
                        public static final CacheOperationStatus CacheCleared
                        +
                        The cache was cleared successfully.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static CacheOperationStatus[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static CacheOperationStatus valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.html new file mode 100644 index 0000000..80e88f3 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/CacheResult.html @@ -0,0 +1,183 @@ + + + + +CacheResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Interface CacheResult

                    +
                    +
                    +
                    +
                    public interface CacheResult
                    +
                    Represents a response from a SharedData operation.
                    +
                    +
                    +
                      + +
                    • +
                      +

                      Method Summary

                      +
                      +
                      +
                      +
                      +
                      Modifier and Type
                      +
                      Method
                      +
                      Description
                      + + +
                      +
                      Gets the key or null to the object associated with the result.
                      +
                      + + +
                      +
                      Gets the status of the cache operation.
                      +
                      +
                      byte[]
                      + +
                      +
                      Get the object returned from a Get operation.
                      +
                      +
                      +
                      +
                      +
                      +
                    • +
                    +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getKey

                        +
                        String getKey()
                        +
                        Gets the key or null to the object associated with the result.
                        +
                        +
                        Returns:
                        +
                        the key or null.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getValue

                        +
                        byte[] getValue()
                        +
                        Get the object returned from a Get operation.
                        +
                        +
                        Returns:
                        +
                        the object or null.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getStatus

                        + +
                        Gets the status of the cache operation.
                        +
                        +
                        Returns:
                        +
                        the operation status.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.html new file mode 100644 index 0000000..c491f5f --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/CreateResult.html @@ -0,0 +1,243 @@ + + + + +CreateResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class CreateResult

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<CreateResult> +
                    com.scaleoutsoftware.digitaltwin.abstractions.CreateResult
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<CreateResult>, Constable
                    +
                    +
                    +
                    public enum CreateResult +extends Enum<CreateResult>
                    +
                    Enum indicating the status of a delete operation.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        Success

                        +
                        public static final CreateResult Success
                        +
                        The twin instance was successfully created.
                        +
                        +
                      • +
                      • +
                        +

                        ObjectExists

                        +
                        public static final CreateResult ObjectExists
                        +
                        The twin instance already existed and could not be created.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static CreateResult[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static CreateResult valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.html new file mode 100644 index 0000000..1100169 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/DeleteResult.html @@ -0,0 +1,243 @@ + + + + +DeleteResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class DeleteResult

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<DeleteResult> +
                    com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<DeleteResult>, Constable
                    +
                    +
                    +
                    public enum DeleteResult +extends Enum<DeleteResult>
                    +
                    Enum indicating the status of a delete operation.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        Success

                        +
                        public static final DeleteResult Success
                        +
                        The twin instance was successfully deleted.
                        +
                        +
                      • +
                      • +
                        +

                        NotFound

                        +
                        public static final DeleteResult NotFound
                        +
                        The target twin instance was not found.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static DeleteResult[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static DeleteResult valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.html new file mode 100644 index 0000000..45c4389 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/DigitalTwinBase.html @@ -0,0 +1,364 @@ + + + + +DigitalTwinBase (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class DigitalTwinBase<T extends DigitalTwinBase<T>>

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase<T>
                    +
                    +
                    +
                    +
                    public abstract class DigitalTwinBase<T extends DigitalTwinBase<T>> +extends Object
                    +
                    A real-time digital twin of a data source. The implementation of the real-time DigitalTwin should have a parameterless constructor for + basic initialization.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Field Details

                      +
                        +
                      • +
                        +

                        Id

                        +
                        public String Id
                        +
                        The identifier for this twin instance
                        +
                        +
                      • +
                      • +
                        +

                        Model

                        +
                        public String Model
                        +
                        The model this twin instance belongs to.
                        +
                        +
                      • +
                      • +
                        +

                        SourceNamespaceAppId

                        +
                        public int SourceNamespaceAppId
                        +
                        DO NOT MODIFY. This property is managed by the service. Used to send messages to the instances data source.
                        +
                        +
                      • +
                      • +
                        +

                        NextSimulationTimeUnixMsec

                        +
                        public long NextSimulationTimeUnixMsec
                        +
                        DO NOT MODIFY. This property is managed by the service. Used to store the instances next simulation time; managed by the + service in case of load balancing or server failures.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        DigitalTwinBase

                        +
                        public DigitalTwinBase()
                        +
                        Default constructor.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getId

                        +
                        public String getId()
                        +
                        The identifier of this DigitalTwin.
                        +
                        +
                        Returns:
                        +
                        the identifier of this digital twin
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getModel

                        +
                        public String getModel()
                        +
                        The model for this DigitalTwin.
                        +
                        +
                        Returns:
                        +
                        the model for this DigitalTwin
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSourceAppIdNamespace

                        +
                        public int getSourceAppIdNamespace()
                        +
                        INTERNAL: DO NOT MODIFY. This property is managed by the service. + + Used for sending messages back to the instances data source.
                        +
                        +
                        Returns:
                        +
                        the source App ID namespace
                        +
                        +
                        +
                      • +
                      • +
                        +

                        setSourceAppIdNamespace

                        +
                        public void setSourceAppIdNamespace(int sourceAppIdNamespace)
                        +
                        INTERNAL: DO NOT MODIFY. This property is managed by the service.
                        +
                        +
                        Parameters:
                        +
                        sourceAppIdNamespace - assign this instance a new source app ID namespace.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getNextSimulationTimeUnixMsec

                        +
                        public long getNextSimulationTimeUnixMsec()
                        +
                        INTERNAL: DO NOT MODIFY. This property is managed by the service. + + Retrieve the next simulation time for this instance.
                        +
                        +
                        Returns:
                        +
                        the next simulation time for this instance.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        setNextSimulationTimeUnixMsec

                        +
                        public void setNextSimulationTimeUnixMsec(long nextSimulationTimeUnixMsec)
                        +
                        INTERNAL: DO NOT MODIFY. This property is managed by the service. + + Assign this instance the next simulation time when the instance will be run.
                        +
                        +
                        Parameters:
                        +
                        nextSimulationTimeUnixMsec - the next simulation time when the instance will be run.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        init

                        +
                        public void init(InitContext<T> context) + throws IllegalStateException
                        +
                        Initialization method to set the identifier and model for a DigitalTwin instance. Optionally use the + InitContext to start a timer.
                        +
                        +
                        Parameters:
                        +
                        context - the initialization context.
                        +
                        Throws:
                        +
                        IllegalStateException - if init is called after initialization.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.html new file mode 100644 index 0000000..1a6c85c --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/InitContext.html @@ -0,0 +1,268 @@ + + + + +InitContext (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class InitContext<T extends DigitalTwinBase<T>>

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.InitContext<T>
                    +
                    +
                    +
                    +
                    public abstract class InitContext<T extends DigitalTwinBase<T>> +extends Object
                    +
                    The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing + digital twin.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        InitContext

                        +
                        public InitContext()
                        +
                        Default constructor.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        startTimer

                        +
                        public abstract TimerActionResult startTimer(String timerName, + Duration interval, + TimerType timerType, + TimerHandler<T> timerHandler, + Class<? extends TimerHandler<T>> timerHandlerClass)
                        +
                        Starts a new timer for the digital twin
                        +
                        +
                        Parameters:
                        +
                        timerName - the timer name
                        +
                        interval - the timer interval
                        +
                        timerType - the timer type
                        +
                        timerHandler - the time handler callback
                        +
                        timerHandlerClass - the timer handler callback class
                        +
                        Returns:
                        +
                        returns TimerActionResult.Success if the timer was started, TimerActionResult.FailedTooManyTimers + if too many timers exist, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedModelData

                        +
                        public abstract SharedData getSharedModelData()
                        +
                        Retrieve a SharedData accessor for this model's shared data.
                        +
                        +
                        Returns:
                        +
                        a SharedData instance.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedGlobalData

                        +
                        public abstract SharedData getSharedGlobalData()
                        +
                        Retrieve a SharedData accessor for globally shared data.
                        +
                        +
                        Returns:
                        +
                        a SharedData instance.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getId

                        +
                        public abstract String getId()
                        +
                        Get the model-unique Id identifier of the initializing digital twin instance.
                        +
                        +
                        Returns:
                        +
                        the id identifier.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getModel

                        +
                        public abstract String getModel()
                        +
                        Get the Model identifier of the initializing digital twin instance.
                        +
                        +
                        Returns:
                        +
                        the model identifier.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.html new file mode 100644 index 0000000..2f176c0 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/InitSimulationContext.html @@ -0,0 +1,168 @@ + + + + +InitSimulationContext (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Interface InitSimulationContext

                    +
                    +
                    +
                    +
                    public interface InitSimulationContext
                    +
                    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getSharedModelData

                        +
                        SharedData getSharedModelData()
                        +
                        Retrieve a SharedData accessor for this model's shared data.
                        +
                        +
                        Returns:
                        +
                        a SharedData instance.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedGlobalData

                        +
                        SharedData getSharedGlobalData()
                        +
                        Retrieve a SharedData accessor for globally shared data.
                        +
                        +
                        Returns:
                        +
                        a SharedData instance.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.html new file mode 100644 index 0000000..0dfb688 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/MessageProcessor.html @@ -0,0 +1,203 @@ + + + + +MessageProcessor (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class MessageProcessor<T extends DigitalTwinBase<T>>

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor<T>
                    +
                    +
                    +
                    +
                    Type Parameters:
                    +
                    T - the real type of the DigitalTwinBase
                    +
                    +
                    +
                    public abstract class MessageProcessor<T extends DigitalTwinBase<T>> +extends Object
                    +
                    Processes messages for a real-time digital twin.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        MessageProcessor

                        +
                        public MessageProcessor()
                        +
                        Default constructor.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        processMessage

                        +
                        public abstract ProcessingResult processMessage(ProcessingContext<T> context, + T stateObject, + byte[] incomingMessage) + throws Exception
                        +
                        Processes a set of incoming messages and determines whether to update the real-time digital twin.
                        +
                        +
                        Parameters:
                        +
                        context - optional context for processing.
                        +
                        stateObject - the state object.
                        +
                        incomingMessage - the incoming message.
                        +
                        Returns:
                        +
                        processing results for updating the state object.
                        +
                        Throws:
                        +
                        Exception - if an exception occurs during processing
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.html new file mode 100644 index 0000000..10c0131 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingContext.html @@ -0,0 +1,480 @@ + + + + +ProcessingContext (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class ProcessingContext<T extends DigitalTwinBase<T>>

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext<T>
                    +
                    +
                    +
                    +
                    Type Parameters:
                    +
                    T - the type of the digital twin
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable
                    +
                    +
                    +
                    public abstract class ProcessingContext<T extends DigitalTwinBase<T>> +extends Object +implements Serializable
                    +
                    Context object that allows the user to send a message to a DataSource.
                    +
                    +
                    See Also:
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        ProcessingContext

                        +
                        public ProcessingContext()
                        +
                        Default constructor.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        sendToDataSource

                        +
                        public abstract CompletableFuture<SendingResult> sendToDataSource(byte[] payload)
                        +

                        + Sends a message to a data source. This will route messages through the connector back to the data source. +

                        + +

                        + if the datasource is simulation instance, then the message will be sent to the simulation model's implementation + of the MessageProcessor. +

                        +
                        +
                        Parameters:
                        +
                        payload - the message (as a serialized JSON string)
                        +
                        Returns:
                        +
                        the sending result
                        +
                        +
                        +
                      • +
                      • +
                        +

                        sendToDigitalTwin

                        +
                        public abstract CompletableFuture<SendingResult> sendToDigitalTwin(String model, + String id, + byte[] payload)
                        +

                        + This method sends a serialized JSON message to a real-time digital twin +

                        + +

                        + Note, the message contents must be serialized so that the registered message type + of the digital twin model will be sufficient to deserialize the message. +

                        +
                        +
                        Parameters:
                        +
                        model - the model of the digital twin
                        +
                        id - the id of the digital twin
                        +
                        payload - the serialized JSON message
                        +
                        Returns:
                        +
                        the sending result
                        +
                        +
                        +
                      • +
                      • +
                        +

                        sendAlert

                        +
                        public abstract CompletableFuture<Void> sendAlert(AlertMessage alert)
                        +

                        + This method sends an alert message to configured systems. +

                        + +

                        + If the message cannot be sent then the returned CompletableFuture will complete exceptionally. +

                        +
                        +
                        Parameters:
                        +
                        alert - the alert message.
                        +
                        Returns:
                        +
                        the sending result.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getAzureDigitalTwinsProvider

                        +
                        public abstract AzureDigitalTwinsProvider getAzureDigitalTwinsProvider()
                        +
                        Returns an AzureDigitalTwinsProvider or null if no AzureDigitalTwinsProvider configuration can be found.
                        +
                        +
                        Returns:
                        +
                        a AzureDigitalTwinsProvider or null.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getDataSourceId

                        +
                        public abstract String getDataSourceId()
                        +
                        Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID)
                        +
                        +
                        Returns:
                        +
                        the digital twin id
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getDigitalTwinModel

                        +
                        public abstract String getDigitalTwinModel()
                        +
                        Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin)
                        +
                        +
                        Returns:
                        +
                        the digital twin model
                        +
                        +
                        +
                      • +
                      • +
                        +

                        logMessage

                        +
                        public abstract CompletableFuture<Void> logMessage(Level severity, + String message)
                        +
                        Log a message to the real-time digital twin UI. + + Note: the only supported severity levels are: INFO, WARN, and SEVERE
                        +
                        +
                        Parameters:
                        +
                        severity - the severity of the log message
                        +
                        message - the message to log
                        +
                        Returns:
                        +
                        A future that will complete successfully with no result or exceptionally.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        removeRealTimeTwin

                        +
                        public abstract CompletableFuture<DeleteResult> removeRealTimeTwin(String targetTwinModel, + String targetTwinId)
                        +
                        Delete the target real-time twin instance.
                        +
                        +
                        Parameters:
                        +
                        targetTwinModel - the model of the real-time twin instance
                        +
                        targetTwinId - the id of the real-time twin instance
                        +
                        Returns:
                        +
                        a completable future that will complete with a DeleteResult indicating the status of the operation, or + exceptionally indicating that an error occurred.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        startTimer

                        +
                        public abstract TimerActionResult startTimer(String timerName, + Duration interval, + TimerType timerType, + TimerHandler<T> timerHandler, + Class<? extends TimerHandler<T>> timerHandlerClass)
                        +
                        Starts a new timer for the digital twin
                        +
                        +
                        Parameters:
                        +
                        timerName - the timer name
                        +
                        interval - the timer interval
                        +
                        timerType - the timer type
                        +
                        timerHandler - the time handler callback
                        +
                        timerHandlerClass - the timer handler callback class
                        +
                        Returns:
                        +
                        returns TimerActionResult.Success if the timer was started, TimerActionResult.FailedTooManyTimers + if too many timers exist, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        stopTimer

                        +
                        public abstract TimerActionResult stopTimer(String timerName)
                        +
                        Stops the specified timer.
                        +
                        +
                        Parameters:
                        +
                        timerName - the timer name.
                        +
                        Returns:
                        +
                        returns TimerActionResult.Success if the timer was stopped, TimerActionResult.FailedNoSuchTimer + if no timer exists with that name, or TimerActionResult.FailedInternalError if an unexpected error occurs.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getCurrentTime

                        +
                        public abstract Date getCurrentTime()
                        +
                        Retrieves the current time. If the model (simulation or real-time) is running inside of a simulation then the + simulation time will be returned.
                        +
                        +
                        Returns:
                        +
                        The current time (real time, or simulation if running under simulation).
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSimulationController

                        +
                        public abstract SimulationController getSimulationController()
                        +
                        Retrieve the running SimulationController or null if no simulation is running.
                        +
                        +
                        Returns:
                        +
                        the SimulationController or null if no simulation is running.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedModelData

                        +
                        public abstract SharedData getSharedModelData()
                        +
                        Retrieve a SharedData accessor for this model's shared data.
                        +
                        +
                        Returns:
                        +
                        a SharedData instance.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedGlobalData

                        +
                        public abstract SharedData getSharedGlobalData()
                        +
                        Retrieve a SharedData accessor for globally shared data.
                        +
                        +
                        Returns:
                        +
                        a SharedData instance.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.html new file mode 100644 index 0000000..71bb83c --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/ProcessingResult.html @@ -0,0 +1,255 @@ + + + + +ProcessingResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class ProcessingResult

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<ProcessingResult> +
                    com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<ProcessingResult>, Constable
                    +
                    +
                    +
                    public enum ProcessingResult +extends Enum<ProcessingResult>
                    +
                    The result from a message processor which indicates to update the twin instance, not update the twin instance, or + remove the twin instance.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        UpdateDigitalTwin

                        +
                        public static final ProcessingResult UpdateDigitalTwin
                        +
                        Update the digital twin.
                        +
                        +
                      • +
                      • +
                        +

                        NoUpdate

                        +
                        public static final ProcessingResult NoUpdate
                        +
                        Do not update the digital twin.
                        +
                        +
                      • +
                      • +
                        +

                        Remove

                        +
                        public static final ProcessingResult Remove
                        +
                        The twin instance should be removed after processing.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static ProcessingResult[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static ProcessingResult valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.html new file mode 100644 index 0000000..2afa0ee --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SendingResult.html @@ -0,0 +1,255 @@ + + + + +SendingResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class SendingResult

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<SendingResult> +
                    com.scaleoutsoftware.digitaltwin.abstractions.SendingResult
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<SendingResult>, Constable
                    +
                    +
                    +
                    public enum SendingResult +extends Enum<SendingResult>
                    +
                    Marks a message as Handled, Enqueued, or Not Handled
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        Handled

                        +
                        public static final SendingResult Handled
                        +
                        Handled indicates that a message was successfully sent and processed
                        +
                        +
                      • +
                      • +
                        +

                        Enqueued

                        +
                        public static final SendingResult Enqueued
                        +
                        Enqueued indicates that a message was successfully formed and then sent to an internal messaging service
                        +
                        +
                      • +
                      • +
                        +

                        NotHandled

                        +
                        public static final SendingResult NotHandled
                        +
                        NotHandled indicates that the message was not handled. This can occur if an exception occurs + in the message processor or if internal messaging service reached capacity.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static SendingResult[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static SendingResult valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.html new file mode 100644 index 0000000..be43f2d --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SharedData.html @@ -0,0 +1,208 @@ + + + + +SharedData (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Interface SharedData

                    +
                    +
                    +
                    +
                    public interface SharedData
                    +
                    SharedData is used to access a model's, or globally, shared cache.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        get

                        + +
                        Retrieves an existing object from the cache.
                        +
                        +
                        Parameters:
                        +
                        key - the key mapping to a value.
                        +
                        Returns:
                        +
                        A cache result.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        put

                        +
                        CompletableFuture<CacheResult> put(String key, + byte[] value)
                        +
                        Put a new key/value mapping into the cache.
                        +
                        +
                        Parameters:
                        +
                        key - the key mapping to a value.
                        +
                        value - the value.
                        +
                        Returns:
                        +
                        a cache result.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        remove

                        + +
                        Remove a key/value mapping from the cache.
                        +
                        +
                        Parameters:
                        +
                        key - the key mapping to a value.
                        +
                        Returns:
                        +
                        a cache result.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        clear

                        + +
                        Clear the shared data cache.
                        +
                        +
                        Returns:
                        +
                        a cache result.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.html new file mode 100644 index 0000000..6eae11f --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationController.html @@ -0,0 +1,361 @@ + + + + +SimulationController (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Interface SimulationController

                    +
                    +
                    +
                    +
                    public interface SimulationController
                    +
                    The SimulationController interface is used to interact with the running DigitalTwin simulation.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getSimulationTimeIncrement

                        +
                        Duration getSimulationTimeIncrement()
                        +

                        + Retrieves the current simulation time increment. +

                        +
                        +
                        Returns:
                        +
                        the simulation time increment.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSimulationStartTime

                        +
                        Date getSimulationStartTime()
                        +

                        + Retrieves the simulation start time. +

                        +
                        +
                        Returns:
                        +
                        the simulation start time.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        delay

                        +
                        void delay(Duration duration)
                        +

                        + Delay simulation processing for this DigitalTwin instance for a duration of time. +

                        + +

                        + Simulation processing will be delayed for the duration specified relative to the current simulation time. +

                        + +

                        + Examples: +

                        + +

                        + at a current simulation time of 10, an interval of 20, and a delay of 40 -- the instance would + skip one cycle of processing and be processed at simulation time 50. +

                        + +

                        + at a current simulation time of 10, an interval of 20, and a delay of 30 -- the instance would + skip one cycle of processing and be processed at simulation time 50. +

                        + +

                        + at a current simulation time of 10, an interval of 20, and a delay of 50 -- the instance would + skip two cycles of processing and be processed at simulation time 70. +

                        +
                        +
                        Parameters:
                        +
                        duration - the duration to delay. + if the delay was not processed.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        delayIndefinitely

                        +
                        void delayIndefinitely()
                        +

                        + Delay simulation processing for this DigitalTwin instance, indefinitely. +

                        + +

                        + Simulation processing will be delayed until this instance is run with runThisInstance(). +

                        + + if the delay was not processed.
                        +
                        +
                      • +
                      • +
                        +

                        emitTelemetry

                        +
                        CompletableFuture<SendingResult> emitTelemetry(String modelName, + byte[] telemetryMessage)
                        +

                        + Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin + models MessageProcessor.processMessage(ProcessingContext, DigitalTwinBase, byte[]) method. +

                        +
                        +
                        Parameters:
                        +
                        modelName - the model to send the messages too.
                        +
                        telemetryMessage - a blob representing a JSON serialized messages.
                        +
                        Returns:
                        +
                        SendingResult.Handled if the messages were processed, SendingResult.Enqueued if + the messages are in process of being handled, or SendingResult.NotHandled if the delay was not processed.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        createInstance

                        +
                        <T extends DigitalTwinBase<T>> +CompletableFuture<CreateResult> createInstance(String modelName, + String instanceId, + T base)
                        +
                        Create a new digital twin instance for simulation processing.
                        +
                        +
                        Type Parameters:
                        +
                        T - the type of the digital twin to create.
                        +
                        Parameters:
                        +
                        modelName - the model name.
                        +
                        instanceId - the instance id.
                        +
                        base - the instance to create.
                        +
                        Returns:
                        +
                        SendingResult.Handled if the instance was created, SendingResult.Enqueued if the instance + is in process of being created, or SendingResult.NotHandled if the instance could not be created.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        deleteInstance

                        +
                        CompletableFuture<DeleteResult> deleteInstance(String modelName, + String instanceId)
                        +
                        Delete and remove a digital twin instance from simulation processing.
                        +
                        +
                        Parameters:
                        +
                        modelName - the model name.
                        +
                        instanceId - the instance id.
                        +
                        Returns:
                        +
                        SendingResult.Handled if the instance was deleted, SendingResult.Enqueued if the instance + is in process of being deleted, or SendingResult.NotHandled if the instance could not be deleted.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        deleteThisInstance

                        +
                        CompletableFuture<DeleteResult> deleteThisInstance()
                        +
                        Delete and remove this digital twin instance from simulation processing.
                        +
                        +
                        Returns:
                        +
                        this local request will always return SendingResult.Handled.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        runThisInstance

                        +
                        void runThisInstance()
                        +
                        Run this instance during this simulation step. The instance will be run using the models SimulationProcessor.processModel(ProcessingContext, DigitalTwinBase, Date) + implementation. + + This will cause the simulation sub-system to run this instance during the current simulation step.
                        +
                        +
                      • +
                      • +
                        +

                        stopSimulation

                        +
                        SimulationStatus stopSimulation()
                        +
                        Stop the simulation.
                        +
                        +
                        Returns:
                        +
                        a SimulationStatus.InstanceRequestedStop.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.html new file mode 100644 index 0000000..223d873 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationProcessor.html @@ -0,0 +1,239 @@ + + + + +SimulationProcessor (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class SimulationProcessor<T extends DigitalTwinBase<T>>

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor<T>
                    +
                    +
                    +
                    +
                    Type Parameters:
                    +
                    T - the type of the digital twin.
                    +
                    +
                    +
                    public abstract class SimulationProcessor<T extends DigitalTwinBase<T>> +extends Object
                    +
                    Processes simulation events for a digital twin.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        SimulationProcessor

                        +
                        public SimulationProcessor()
                        +
                        Default constructor.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        processModel

                        +
                        public abstract ProcessingResult processModel(ProcessingContext<T> context, + T instance, + Date epoch)
                        +
                        Processes simulation events for a real-time digital twin.
                        +
                        +
                        Parameters:
                        +
                        context - the processing context.
                        +
                        instance - the digital twin instance.
                        +
                        epoch - the current time of the simulation.
                        +
                        Returns:
                        +
                        ProcessingResult.UpdateDigitalTwin to update the digital twin, or + ProcessingResult.NoUpdate to ignore the changes.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        onInitSimulation

                        +
                        public ProcessingResult onInitSimulation(InitSimulationContext context, + T instance, + Date epoch)
                        +

                        + Optional method that is called per-instance when a simulation is started. Default behavior is a no-op. +

                        + +

                        + onInitSimulation can be used when internal digital twin starting state is set outside the context of a digital twins init method and may be changed + between simulation runs. +

                        +
                          +
                        • Set variables in global or shared data.
                        • +
                        • Run a simulation.
                        • +
                        • onInitSimulation is called (per-instance) and digital twin instances set internal state based on the values in shared data.
                        • +
                        • Complete simulation and evaluate the result.
                        • +
                        +
                        +
                        Parameters:
                        +
                        context - The simulation init context.
                        +
                        instance - The digital twin instance.
                        +
                        epoch - the simulation start time.
                        +
                        Returns:
                        +
                        ProcessingResult.UpdateDigitalTwin or ProcessingResult.NoUpdate. Default behavior: ProcessingResult.NoUpdate.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.html new file mode 100644 index 0000000..3eaf2f1 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/SimulationStatus.html @@ -0,0 +1,298 @@ + + + + +SimulationStatus (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class SimulationStatus

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<SimulationStatus> +
                    com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<SimulationStatus>, Constable
                    +
                    +
                    +
                    public enum SimulationStatus +extends Enum<SimulationStatus>
                    +
                    The status of a simulation.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        Running

                        +
                        public static final SimulationStatus Running
                        +
                        The simulation is running.
                        +
                        +
                      • +
                      • +
                        +

                        NotSet

                        +
                        public static final SimulationStatus NotSet
                        +
                        The simulation status is not set.
                        +
                        +
                      • +
                      • +
                        +

                        UserRequested

                        +
                        public static final SimulationStatus UserRequested
                        +
                        The user requested a stop.
                        +
                        +
                      • +
                      • +
                        +

                        EndTimeReached

                        +
                        public static final SimulationStatus EndTimeReached
                        +
                        The simulation end time has been reached.
                        +
                        +
                      • +
                      • +
                        +

                        NoRemainingWork

                        +
                        public static final SimulationStatus NoRemainingWork
                        +
                        There is no remaining work for the simulation.
                        +
                        +
                      • +
                      • +
                        +

                        InstanceRequestedStop

                        +
                        public static final SimulationStatus InstanceRequestedStop
                        +
                        A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
                        +
                        +
                      • +
                      • +
                        +

                        UnexpectedChangeInConfiguration

                        +
                        public static final SimulationStatus UnexpectedChangeInConfiguration
                        +
                        There was a runtime-change of simulation configuration.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static SimulationStatus[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static SimulationStatus valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.html new file mode 100644 index 0000000..1710ab8 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerActionResult.html @@ -0,0 +1,299 @@ + + + + +TimerActionResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class TimerActionResult

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<TimerActionResult> +
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<TimerActionResult>, Constable
                    +
                    +
                    +
                    public enum TimerActionResult +extends Enum<TimerActionResult>
                    +
                    The result of a timer action.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        Success

                        +
                        public static final TimerActionResult Success
                        +
                        The operation completed successfully.
                        +
                        +
                      • +
                      • +
                        +

                        FailedTooManyTimers

                        +
                        public static final TimerActionResult FailedTooManyTimers
                        +
                        Failed to start a new timer due to reaching the limit for a number of active timers.
                        +
                        +
                      • +
                      • +
                        +

                        FailedNoSuchTimer

                        +
                        public static final TimerActionResult FailedNoSuchTimer
                        +
                        Failed to stop the existing timer, the timer is no longer active.
                        +
                        +
                      • +
                      • +
                        +

                        FailedTimerAlreadyExists

                        +
                        public static final TimerActionResult FailedTimerAlreadyExists
                        +
                        Failed to start the timer, the timer with the specified name already exists.
                        +
                        +
                      • +
                      • +
                        +

                        FailedInternalError

                        +
                        public static final TimerActionResult FailedInternalError
                        +
                        Failed to start/stop timer due to an internal error.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static TimerActionResult[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static TimerActionResult valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      • +
                        +

                        fromOrdinal

                        +
                        public static TimerActionResult fromOrdinal(int val)
                        + +
                        +
                        Parameters:
                        +
                        val - the ordinal value.
                        +
                        Returns:
                        +
                        the associated TimerActionResult or throws an IllegalArgumentException for an unexpected + ordinal value.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.html new file mode 100644 index 0000000..007f384 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerHandler.html @@ -0,0 +1,164 @@ + + + + +TimerHandler (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Interface TimerHandler<T extends DigitalTwinBase<T>>

                    +
                    +
                    +
                    +
                    Type Parameters:
                    +
                    T - the type of the DigitalTwinBase.
                    +
                    +
                    +
                    public interface TimerHandler<T extends DigitalTwinBase<T>>
                    +
                    Callback to a handle a timer message for a DigitalTwinBase.
                    +
                    +
                    + +
                    +
                    + +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.html new file mode 100644 index 0000000..35bf70f --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerMetadata.html @@ -0,0 +1,246 @@ + + + + +TimerMetadata (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class TimerMetadata<T extends DigitalTwinBase<T>>

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata<T>
                    +
                    +
                    +
                    +
                    Type Parameters:
                    +
                    T - the type of the DigitalTwinBase implementation.
                    +
                    +
                    +
                    public class TimerMetadata<T extends DigitalTwinBase<T>> +extends Object
                    +
                    Metadata class for a timer.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        TimerMetadata

                        +
                        public TimerMetadata(TimerHandler<T> handlerClass, + TimerType timerType, + long timerIntervalMs, + int timerSlot)
                        +
                        Constructs a timer metadata.
                        +
                        +
                        Parameters:
                        +
                        handlerClass - the timer handler.
                        +
                        timerType - the timer type.
                        +
                        timerIntervalMs - the timer interval.
                        +
                        timerSlot - the timer index.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getTimerType

                        +
                        public TimerType getTimerType()
                        +
                        Retrieves the timer type.
                        +
                        +
                        Returns:
                        +
                        the timer type.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getTimerIntervalMs

                        +
                        public long getTimerIntervalMs()
                        +
                        Retrieves the timer interval.
                        +
                        +
                        Returns:
                        +
                        the timer interval.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getTimerSlot

                        +
                        public int getTimerSlot()
                        +
                        Retrieves the timer ID.
                        +
                        +
                        Returns:
                        +
                        the timer ID.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getHandler

                        +
                        public TimerHandler<T> getHandler()
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.html new file mode 100644 index 0000000..02fdc4d --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/TimerType.html @@ -0,0 +1,243 @@ + + + + +TimerType (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Enum Class TimerType

                    +
                    +
                    java.lang.Object +
                    java.lang.Enum<TimerType> +
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerType
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable, Comparable<TimerType>, Constable
                    +
                    +
                    +
                    public enum TimerType +extends Enum<TimerType>
                    +
                    Enum representation of the available timer types
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Enum Constant Details

                      +
                        +
                      • +
                        +

                        Recurring

                        +
                        public static final TimerType Recurring
                        +
                        This timer should reoccur on a schedule.
                        +
                        +
                      • +
                      • +
                        +

                        OneTime

                        +
                        public static final TimerType OneTime
                        +
                        This timer should trigger one time.
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        values

                        +
                        public static TimerType[] values()
                        +
                        Returns an array containing the constants of this enum class, in +the order they are declared.
                        +
                        +
                        Returns:
                        +
                        an array containing the constants of this enum class, in the order they are declared
                        +
                        +
                        +
                      • +
                      • +
                        +

                        valueOf

                        +
                        public static TimerType valueOf(String name)
                        +
                        Returns the enum constant of this class with the specified name. +The string must match exactly an identifier used to declare an +enum constant in this class. (Extraneous whitespace characters are +not permitted.)
                        +
                        +
                        Parameters:
                        +
                        name - the name of the enum constant to be returned.
                        +
                        Returns:
                        +
                        the enum constant with the specified name
                        +
                        Throws:
                        +
                        IllegalArgumentException - if this enum class has no constant with the specified name
                        +
                        NullPointerException - if the argument is null
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AlertMessage.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AlertMessage.html new file mode 100644 index 0000000..965c9a3 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AlertMessage.html @@ -0,0 +1,113 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage

                    +
                    +
                    Packages that use AlertMessage
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AzureDigitalTwinsProvider.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AzureDigitalTwinsProvider.html new file mode 100644 index 0000000..23c2959 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/AzureDigitalTwinsProvider.html @@ -0,0 +1,91 @@ + + + + +Uses of Interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Interface
                    com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider

                    +
                    +
                    Packages that use AzureDigitalTwinsProvider
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheOperationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheOperationStatus.html new file mode 100644 index 0000000..85b4cbd --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheOperationStatus.html @@ -0,0 +1,102 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus

                    +
                    +
                    Packages that use CacheOperationStatus
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheResult.html new file mode 100644 index 0000000..d5325e1 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CacheResult.html @@ -0,0 +1,107 @@ + + + + +Uses of Interface com.scaleoutsoftware.digitaltwin.abstractions.CacheResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Interface
                    com.scaleoutsoftware.digitaltwin.abstractions.CacheResult

                    +
                    +
                    Packages that use CacheResult
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CreateResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CreateResult.html new file mode 100644 index 0000000..a2d1532 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/CreateResult.html @@ -0,0 +1,110 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.CreateResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.CreateResult

                    +
                    +
                    Packages that use CreateResult
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DeleteResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DeleteResult.html new file mode 100644 index 0000000..fb9ef1f --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DeleteResult.html @@ -0,0 +1,120 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult

                    +
                    +
                    Packages that use DeleteResult
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DigitalTwinBase.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DigitalTwinBase.html new file mode 100644 index 0000000..681967c --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/DigitalTwinBase.html @@ -0,0 +1,183 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase

                    +
                    +
                    Packages that use DigitalTwinBase
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitContext.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitContext.html new file mode 100644 index 0000000..825a571 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitContext.html @@ -0,0 +1,91 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.InitContext (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.InitContext

                    +
                    +
                    Packages that use InitContext
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitSimulationContext.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitSimulationContext.html new file mode 100644 index 0000000..1c2dc3d --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/InitSimulationContext.html @@ -0,0 +1,94 @@ + + + + +Uses of Interface com.scaleoutsoftware.digitaltwin.abstractions.InitSimulationContext (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Interface
                    com.scaleoutsoftware.digitaltwin.abstractions.InitSimulationContext

                    +
                    +
                    Packages that use InitSimulationContext
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/MessageProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/MessageProcessor.html new file mode 100644 index 0000000..0468bae --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/MessageProcessor.html @@ -0,0 +1,101 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor

                    +
                    +
                    Packages that use MessageProcessor
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingContext.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingContext.html new file mode 100644 index 0000000..c332058 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingContext.html @@ -0,0 +1,107 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext

                    +
                    +
                    Packages that use ProcessingContext
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingResult.html new file mode 100644 index 0000000..863359a --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/ProcessingResult.html @@ -0,0 +1,126 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult

                    +
                    +
                    Packages that use ProcessingResult
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SendingResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SendingResult.html new file mode 100644 index 0000000..1546deb --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SendingResult.html @@ -0,0 +1,147 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.SendingResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.SendingResult

                    +
                    +
                    Packages that use SendingResult
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SharedData.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SharedData.html new file mode 100644 index 0000000..f070305 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SharedData.html @@ -0,0 +1,141 @@ + + + + +Uses of Interface com.scaleoutsoftware.digitaltwin.abstractions.SharedData (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Interface
                    com.scaleoutsoftware.digitaltwin.abstractions.SharedData

                    +
                    +
                    Packages that use SharedData
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationController.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationController.html new file mode 100644 index 0000000..fdf39ee --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationController.html @@ -0,0 +1,91 @@ + + + + +Uses of Interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Interface
                    com.scaleoutsoftware.digitaltwin.abstractions.SimulationController

                    +
                    +
                    Packages that use SimulationController
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationProcessor.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationProcessor.html new file mode 100644 index 0000000..fc311fc --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationProcessor.html @@ -0,0 +1,94 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor

                    +
                    +
                    Packages that use SimulationProcessor
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationStatus.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationStatus.html new file mode 100644 index 0000000..dad20e2 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/SimulationStatus.html @@ -0,0 +1,122 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus

                    +
                    +
                    Packages that use SimulationStatus
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerActionResult.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerActionResult.html new file mode 100644 index 0000000..21db8de --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerActionResult.html @@ -0,0 +1,125 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult

                    +
                    +
                    Packages that use TimerActionResult
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerHandler.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerHandler.html new file mode 100644 index 0000000..0295ae9 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerHandler.html @@ -0,0 +1,151 @@ + + + + +Uses of Interface com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Interface
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler

                    +
                    +
                    Packages that use TimerHandler
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerMetadata.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerMetadata.html new file mode 100644 index 0000000..6220747 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerMetadata.html @@ -0,0 +1,62 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata

                    +
                    +No usage of com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerType.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerType.html new file mode 100644 index 0000000..7bb7f44 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/class-use/TimerType.html @@ -0,0 +1,140 @@ + + + + +Uses of Enum Class com.scaleoutsoftware.digitaltwin.abstractions.TimerType (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Enum Class
                    com.scaleoutsoftware.digitaltwin.abstractions.TimerType

                    +
                    +
                    Packages that use TimerType
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-summary.html new file mode 100644 index 0000000..1e0f852 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-summary.html @@ -0,0 +1,186 @@ + + + + +com.scaleoutsoftware.digitaltwin.abstractions (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Package com.scaleoutsoftware.digitaltwin.abstractions

                    +
                    +
                    +
                    package com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-tree.html new file mode 100644 index 0000000..bd1a724 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-tree.html @@ -0,0 +1,114 @@ + + + + +com.scaleoutsoftware.digitaltwin.abstractions Class Hierarchy (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Hierarchy For Package com.scaleoutsoftware.digitaltwin.abstractions

                    +
                    +Package Hierarchies: + +
                    +

                    Class Hierarchy

                    + +
                    +
                    +

                    Interface Hierarchy

                    + +
                    +
                    +

                    Enum Class Hierarchy

                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-use.html b/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-use.html new file mode 100644 index 0000000..25aa5cb --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/abstractions/package-use.html @@ -0,0 +1,200 @@ + + + + +Uses of Package com.scaleoutsoftware.digitaltwin.abstractions (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Package
                    com.scaleoutsoftware.digitaltwin.abstractions

                    +
                    + +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html b/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html new file mode 100644 index 0000000..a2273d8 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/LogMessage.html @@ -0,0 +1,190 @@ + + + + +LogMessage (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class LogMessage

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.development.LogMessage
                    +
                    +
                    +
                    +
                    public class LogMessage +extends Object
                    +
                    A messaged that was logged by a digital twin.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getMessage

                        +
                        public String getMessage()
                        +
                        Retrieve the string message associated with this log message.
                        +
                        +
                        Returns:
                        +
                        the message.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSeverity

                        +
                        public Level getSeverity()
                        +
                        Retrieve the severity of this log message.
                        +
                        +
                        Returns:
                        +
                        the severity.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getTimestamp

                        +
                        public long getTimestamp()
                        +
                        Retrieve the timestamp from when this message was generated.
                        +
                        +
                        Returns:
                        +
                        the timestamp.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html new file mode 100644 index 0000000..13c6e78 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationEventResult.html @@ -0,0 +1,151 @@ + + + + +SimulationEventResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class SimulationEventResult

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
                    +
                    +
                    +
                    +
                    public abstract class SimulationEventResult +extends Object
                    +
                    A simulation event result.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        SimulationEventResult

                        +
                        public SimulationEventResult()
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html new file mode 100644 index 0000000..d078abd --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/SimulationStep.html @@ -0,0 +1,174 @@ + + + + +SimulationStep (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class SimulationStep

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.development.SimulationStep
                    +
                    +
                    +
                    +
                    public class SimulationStep +extends Object
                    +
                    The simulation step class encases the metadata for a completed interval of a simulation.
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        getStatus

                        +
                        public SimulationStatus getStatus()
                        +
                        Retrieve the SimulationStatus of the simulation interval.
                        +
                        +
                        Returns:
                        +
                        the current simulation status.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getTime

                        +
                        public long getTime()
                        +
                        Retrieve the time of the simulation interval.
                        +
                        +
                        Returns:
                        +
                        the simulation interval time.
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/Util.html b/docs/com/scaleoutsoftware/digitaltwin/development/Util.html new file mode 100644 index 0000000..974d6d9 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/Util.html @@ -0,0 +1,186 @@ + + + + +Util (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + + +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.development.Util
                    +
                    +
                    +
                    +
                    public class Util +extends Object
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        Util

                        +
                        public Util()
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      + +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html b/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html new file mode 100644 index 0000000..ec9ce90 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/Workbench.html @@ -0,0 +1,833 @@ + + + + +Workbench (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class Workbench

                    +
                    +
                    java.lang.Object +
                    com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    AutoCloseable
                    +
                    +
                    +
                    public class Workbench +extends Object +implements AutoCloseable
                    +
                    The Workbench is used to represent an environment where developers can test real-time and simulated digital twins. +

                    + Quick start: +

                    +

                    + Build a real-time digital twin model for testing real-time message processing with messages generated by a simulated + digital twin. +

                    +

                    + The real-time model will represent a car and the simulated digital twin will + represent a pump increasing the real-time car's tire pressure. The real-time car will process messages from the + simulated pump and send information back to the simulated pump when the tire is full. +

                    + +

                    The quickstart will demonstrate the following:

                    +
                      +
                    • Define a real-time car digital twin
                    • +
                    • Define a tire pressure change message
                    • +
                    • Define a real-time car message processor
                    • +
                    • Define a simulated pump digital twin
                    • +
                    • Define a simulated pump message processor
                    • +
                    • Define a simulated pump simulation processor
                    • +
                    + +

                    + Defining the real-time car model: +

                    + +

                    + Create a class that extends the DigitalTwinBase class and add an integer property for tire pressure. + When constructed by the Workbench this will be our real-time car instance. +

                    +
                    +     public class RealTimeCar extends DigitalTwinBase {
                    +         private int _tirePressure;
                    +         public RealTimeCar() { _tirePressure=0; }
                    +         public RealTimeCar(int startingTirePressure) {
                    +             _tirePressure = startingTirePressure;
                    +         }
                    +
                    +         public void incrementTirePressure(int increment) {
                    +             _tirePressure += increment;
                    +         }
                    +
                    +         public int getTirePressure() {
                    +             return _tirePressure;
                    +         }
                    +     }
                    + 
                    +

                    + Defining the tire pressure change message: +

                    +

                    + Implement a message to send from the simulated pump, to the real-time model. The message will tell the real-time + car to increase the tire pressure by some value. +

                    + +
                    +     public class TirePressureMessage {
                    +         final int _pressureChange;
                    +         public TirePressureMessage(int pressureChange) {
                    +             _pressureChange = pressureChange;
                    +         }
                    +
                    +         public int getPressureChange() {
                    +             return _pressureChange;
                    +         }
                    +     }
                    + 
                    + +

                    + Defining the real-time car message processor: +

                    + +

                    + Create the real-time car MessageProcessor. The message processor will apply the tire pressure change from the tire + pressure message to the real-time car digital twin instance. When the tire is full, the message processor will + send a message back to the simulated pump. +

                    +
                    +     public class RealTimeCarMessageProcessor extends MessageProcessor<RealTimeCar, TirePressureMessage> implements Serializable {
                    +         final int TIRE_PRESSURE_FULL = 100;
                    +         public ProcessingResult processMessages(ProcessingContext processingContext, RealTimeCar car, Iterable<TirePressureMessage> messages) throws Exception {
                    +             // apply the updates from the messages
                    +             for(TirePressureMessage message : messages) {
                    +                 car.incrementTirePressure(message.getPressureChange());
                    +             }
                    +             if(car.getTirePressure() > TIRE_PRESSURE_FULL) {
                    +                 processingContext.sendToDataSource(new TirePressureMessage(car.getTirePressure()));
                    +             }
                    +             return ProcessingResult.UpdateDigitalTwin;
                    +         }
                    +     }
                    + 
                    + +

                    + Defining the simulated pump model: +

                    + +

                    + Create a class that extends the DigitalTwinBase class and add a double property for tire pressure change. + When constructed by the Workbench this will be our simulated pump instance. +

                    +
                    +     public class SimulatedPump extends DigitalTwinBase {
                    +     private double _tirePressureChange;
                    +     private boolean _tirePressureReached = false;
                    +     public SimulatedPump() {}
                    +     public SimulatedPump(double pressureChange) {
                    +         _tirePressureChange = pressureChange;
                    +     }
                    +
                    +     public double getTirePressureChange() {
                    +         return _tirePressureChange;
                    +     }
                    +
                    +     public void setTirePressureReached() {
                    +         _tirePressureReached = true;
                    +     }
                    +
                    +     public boolean isTireFull() {
                    +         return _tirePressureReached;
                    +     }
                    + }
                    + 
                    + +

                    + Defining the simulated pump message processor: +

                    + +

                    + The simulated pump should stop when the simulated pump message processor receives a message. The simulated pump message + processor will update the state of the simulated pump indicating that the tire is full. +

                    +
                    +     public class PumpMessageProcessor extends MessageProcessor<SimulatedPump, TirePressureMessage> implements Serializable {
                    +         public ProcessingResult processMessages(ProcessingContext processingContext, SimulatedPump pump, Iterable<TirePressureMessage> messages) throws Exception {
                    +             // apply the updates from the messages
                    +             pump.setTirePressureReached();
                    +             return ProcessingResult.UpdateDigitalTwin;
                    +         }
                    +     }
                    + 
                    + +

                    + Defining the pump simulation processor: +

                    + +

                    + Define the simulated pump SimulationProcessor. This piece of code will be called at each simulation interval so + long as the simulation has instances to run. This pump simulation processor will send a message to the + real-time car with a tire pressure change derived from the state of the simulated pump. While the simulated pump has not been + told to stop, it will continue sending tire pressure changes to the real-time car. +

                    +
                    +     public class PumpSimulationProcessor extends SimulationProcessor<SimulatedPump> implements Serializable {
                    +         public ProcessingResult processModel(ProcessingContext processingContext, SimulatedPump simPump, Date date) {
                    +             SimulationController controller = processingContext.getSimulationController();
                    +             if(simPump.isTireFull()) {
                    +                 controller.deleteThisInstance();
                    +             } else {
                    +                 int change = (int) (100 * simPump.getTirePressureChange());
                    +                 controller.emitTelemetry("RealTimeCar", new TirePressureMessage(change));
                    +             }
                    +             return ProcessingResult.UpdateDigitalTwin;
                    +         }
                    +     }
                    + 
                    + +

                    + Using the workbench: +

                    + +

                    + The real-time and simulation models are complete. The workbench can now load up the models and then run a simulation. + When beginning testing, the "step loop" is used to track the state of the twins and the simulation. Instantiate the + workbench and add the models. +

                    + +
                    +     Workbench workbench = new Workbench();
                    +     workbench.addRealTimeModel("RealTimeCar", new RealTimeCarMessageProcessor(), RealTimeCar.class, TirePressureMessage.class);
                    +     workbench.addSimulationModel("SimPump", new SimulatedPumpMessageProcessor(), new PumpSimulationProcessor(), SimulationPump.class, TirePressureMessage.class);
                    + 
                    + +

                    + The workbench is loaded up with the models. Add a single simulated pump instance. + Note that no real-time car digital twin is created and added to the workbench. The first message from the + simulated pump digital twin will cause the workbench to create a new real-time instance. +

                    +
                    +     workbench.addInstance("SimPump", "23", new SimulationPump(0.29d));
                    + 
                    + +

                    Initialize the simulation and then step through the simulation intervals. Start the simulation now and end the + simulation in 60 seconds.

                    + +
                    +     SimulationStep step = workbench.initializeSimulation(System.currentTimeMillis(), System.currentTimeMillis()+60000, 1000);
                    + 
                    + +

                    + At each interval, view the state of the real-time car to ensure the tire pressure is changing as expected. +

                    + +
                    +     while(step.getStatus() == SimulationStatus.Running) {
                    +         step = workbench.step();
                    +         HashMap<String, DigitalTwinBase> realTimeCars = workbench.getInstances("RealTimeCar");
                    +         RealTimeCar rtCar = (RealTimeCar) realTimeCars.get("23");
                    +         System.out.println("rtCar: " + rtCar.getTirePressure());
                    +     }
                    + 
                    + +

                    + Summary: +

                    +

                    + The simulated pump at each simulation step emits telemetry to the real-time car digital twin. With each tire pressure + change message, the real-time car twin accrues state about the pressure of the tire. When the real-time car twins tire + is full, it sends a message back to the simulated pump. When the simulated pump receives a message from the real-time car, + it updates some internal state indicating to stop pumping. During the next simulation interval, the simulated pump + deletes itself to stop pumping. This completes the simulation as there are no more remaining simulated pumps. +

                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        Workbench

                        +
                        public Workbench()
                        +
                        Instantiate the workbench.
                        +
                        +
                      • +
                      • +
                        +

                        Workbench

                        +
                        public Workbench(int numSimulationWorkers)
                        +
                        Instantiate the workbench.
                        +
                        +
                        Parameters:
                        +
                        numSimulationWorkers - the number of simulation workers to use. Default is Runtime.availableProcessors().
                        +
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      +
                        +
                      • +
                        +

                        addRealTimeModel

                        +
                        public <T extends DigitalTwinBase<T>> void addRealTimeModel(String modelName, + MessageProcessor<T> digitalTwinMessageProcessor, + Class<T> dtType) + throws WorkbenchException
                        +
                        Adds a real-time digital twin model to the workbench.
                        +
                        +
                        Type Parameters:
                        +
                        T - the type of the digital twin.
                        +
                        Parameters:
                        +
                        modelName - the name of the model.
                        +
                        digitalTwinMessageProcessor - the model's MessageProcessor implementation. Must be marked as Serializable.
                        +
                        dtType - the model's DigitalTwinBase implementation.
                        +
                        Throws:
                        +
                        WorkbenchException - if any of the parameters are null or the model does not pass validation (the message + processor must be serializable, and the digital twin implementation must have a parameterless constructor).
                        +
                        +
                        +
                      • +
                      • +
                        +

                        addSimulationModel

                        +
                        public <T extends DigitalTwinBase<T>> void addSimulationModel(String modelName, + MessageProcessor<T> digitalTwinMessageProcessor, + SimulationProcessor<T> simulationProcessor, + Class<T> dtType) + throws WorkbenchException
                        +
                        Adds a simulation digital twin model to the workbench.
                        +
                        +
                        Type Parameters:
                        +
                        T - the type of the digital twin.
                        +
                        Parameters:
                        +
                        modelName - the name of the model.
                        +
                        digitalTwinMessageProcessor - the model's MessageProcessor implementation. Must be marked as Serializable.
                        +
                        simulationProcessor - the model's SimulationProcessor implementation. Must be marked as Serializable.
                        +
                        dtType - the model's DigitalTwinBase implementation.
                        +
                        Throws:
                        +
                        WorkbenchException - if any of the parameters are null or the model does not pass validation (the message + processor must be serializable, and the digital twin implementation must have a parameterless constructor).
                        +
                        +
                        +
                      • +
                      • +
                        +

                        addInstance

                        +
                        public <V extends DigitalTwinBase<V>> void addInstance(String modelName, + String id, + V instance) + throws WorkbenchException
                        +
                        Adds a digital twin instance to the workbench. + Instances cannot be added to the workbench after runSimulation(long, long, double, long) or + initializeSimulation(long, long, long) has been called.
                        +
                        +
                        Type Parameters:
                        +
                        V - the type of the Digital Twin
                        +
                        Parameters:
                        +
                        modelName - the instances model.
                        +
                        id - the instance identifier.
                        +
                        instance - the real-time or simulation instance.
                        +
                        Throws:
                        +
                        WorkbenchException - If the model does not exist or if a simulation is already running.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        addAlertProvider

                        +
                        public void addAlertProvider(String modelName, + String alertProviderName) + throws WorkbenchException
                        +
                        Adds an alert provider configuration to the specified model on this workbench. + Alert provider configurations cannot be added to the workbench after runSimulation(long, long, double, long) or + initializeSimulation(long, long, long) has been called.
                        +
                        +
                        Parameters:
                        +
                        modelName - the instances model.
                        +
                        alertProviderName - the alert provider configuration.
                        +
                        Throws:
                        +
                        WorkbenchException - If the model does not exist or if a simulation is already running.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        runSimulation

                        +
                        public SimulationStep runSimulation(long startTime, + long endTime, + double speedup, + long interval) + throws WorkbenchException
                        +
                        Runs a simulation from the given startTime until the given endTime OR there is no more work to do. + A simulation has reached the end time when the time to run the next interval is greater than the end time or + there are no more simulated twins to run.
                        +
                        +
                        Parameters:
                        +
                        startTime - the start time of the simulation.
                        +
                        endTime - the end time of the simulation.
                        +
                        speedup - the speedup of the interval (in real-time).
                        +
                        interval - the interval between simulation steps.
                        +
                        Returns:
                        +
                        a SimulationStep that details the final runtime and the SimulationStatus.
                        +
                        Throws:
                        +
                        WorkbenchException - if an exception is thrown by the simulated model or real-time model.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        initializeSimulation

                        +
                        public SimulationStep initializeSimulation(long startTime, + long endTime, + long interval)
                        +
                        Initializes the simulation so that each interval can be run separately by calling the step() + function.
                        +
                        +
                        Parameters:
                        +
                        startTime - the start time of the simulation.
                        +
                        endTime - the end time of the simulation.
                        +
                        interval - the interval between simulation steps.
                        +
                        Returns:
                        +
                        a SimulationStep that details the startTime and the SimulationStatus -- which will always be SimulationStatus.Running.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        step

                        +
                        public SimulationStep step() + throws WorkbenchException
                        +
                        Run the next simulation interval.
                        +
                        +
                        Returns:
                        +
                        a SimulationStep that shows the time interval that was run and the corresponding SimulationStatus
                        +
                        Throws:
                        +
                        WorkbenchException - if an exception is thrown by the simulated model or real-time model.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getTime

                        +
                        public Date getTime() + throws WorkbenchException
                        +
                        Retrieves the current time interval of the simulation.
                        +
                        +
                        Returns:
                        +
                        a Date representation for the current interval time for the simulation.
                        +
                        Throws:
                        +
                        WorkbenchException - if the simulation is not started or initialized.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        peek

                        +
                        public Date peek() + throws WorkbenchException
                        +
                        Retrieves the next interval time of the simulation.
                        +
                        +
                        Returns:
                        +
                        a Date representation for the next interval time for the simulation.
                        +
                        Throws:
                        +
                        WorkbenchException - if the simulation is not started or initialized.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getInstances

                        +
                        public HashMap<String,DigitalTwinBase<?>> getInstances(String modelName) + throws WorkbenchException
                        +
                        Retrieves DigitalTwin instances for a given model.
                        +
                        +
                        Parameters:
                        +
                        modelName - the digital twin model name
                        +
                        Returns:
                        +
                        the instances associated with the parameter model
                        +
                        Throws:
                        +
                        WorkbenchException - if an exception occurs while retrieving digital twin instances for the parameter modelName
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getLoggedMessages

                        +
                        public List<LogMessage> getLoggedMessages(String model, + long timestamp)
                        +
                        Retrieves messages logged by digital twin instances for a specified mdoel. If the provided timestamp is 0, all messages will be returned. + Timestamps greater than 0 will return a sublist of logged messages where the first message in the returned list + will be greater than the provided timestamp. If no messages exist after the timestamp, the returned list will be + empty.
                        +
                        +
                        Parameters:
                        +
                        model - the model name for the logged messages.
                        +
                        timestamp - the timestamp used to filter the retrieved list.
                        +
                        Returns:
                        +
                        the list of messages defined by the timestamp
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getAlertMessages

                        +
                        public List<AlertMessage> getAlertMessages(String model, + String alertProvider) + throws WorkbenchException
                        +
                        Retrieves alert messages from digital twin instances.
                        +
                        +
                        Parameters:
                        +
                        model - the model to retrieve alert messages from.
                        +
                        alertProvider - the alert provider that generated the alerts.
                        +
                        Returns:
                        +
                        the list of alert messages generated by digital twin instances.
                        +
                        Throws:
                        +
                        WorkbenchException - if an exception occurs while retrieving logged messages.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedModelData

                        +
                        public SharedData getSharedModelData(String model) + throws WorkbenchException
                        +
                        Retrieve the SharedData for a model.
                        +
                        +
                        Parameters:
                        +
                        model - the model name.
                        +
                        Returns:
                        +
                        the SharedData for a model.
                        +
                        Throws:
                        +
                        WorkbenchException - if an exception occurs while creating the working shared data.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        getSharedGlobalData

                        +
                        public SharedData getSharedGlobalData() + throws WorkbenchException
                        +
                        Retrieve the global SharedData.
                        +
                        +
                        Returns:
                        +
                        the global SharedData of this workbench.
                        +
                        Throws:
                        +
                        WorkbenchException - if an exception occurs while creating the working shared data.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        send

                        +
                        public SendingResult send(String modelName, + String id, + byte[] message) + throws WorkbenchException
                        +
                        Send a list of messages to a real-time or simulation model.
                        +
                        +
                        Parameters:
                        +
                        modelName - The model name.
                        +
                        id - the instance id.
                        +
                        message - the message to send.
                        +
                        Returns:
                        +
                        SendingResult.Handled unless an exception is thrown.
                        +
                        Throws:
                        +
                        WorkbenchException - if model name, id, or messages are null. Also thrown if the model's MessageProcessor.processMessage(ProcessingContext, DigitalTwinBase, byte[]) + throws an exception.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        addSharedModelData

                        +
                        public void addSharedModelData(String modelName, + String key, + byte[] value)
                        +
                        Add a key/value pair to SharedData for a model.
                        +
                        +
                        Parameters:
                        +
                        modelName - the model name.
                        +
                        key - the key.
                        +
                        value - the value.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        addGlobalModelData

                        +
                        public void addGlobalModelData(String key, + byte[] value)
                        +
                        Add a key/value pair to the global SharedData.
                        +
                        +
                        Parameters:
                        +
                        key - the key.
                        +
                        value - the value.
                        +
                        +
                        +
                      • +
                      • +
                        +

                        close

                        +
                        public void close()
                        +
                        +
                        Specified by:
                        +
                        close in interface AutoCloseable
                        +
                        +
                        +
                      • +
                      +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html new file mode 100644 index 0000000..4da4762 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/WorkbenchException.html @@ -0,0 +1,241 @@ + + + + +WorkbenchException (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    + +
                    + +

                    Class WorkbenchException

                    +
                    +
                    java.lang.Object +
                    java.lang.Throwable +
                    java.lang.Exception +
                    com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                    +
                    +
                    +
                    +
                    +
                    +
                    All Implemented Interfaces:
                    +
                    Serializable
                    +
                    +
                    +
                    public class WorkbenchException +extends Exception
                    +
                    A Workbench exception indicates that a real-time or simulated twin caused an exception.
                    +
                    +
                    See Also:
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                      + +
                    • +
                      +

                      Constructor Details

                      +
                        +
                      • +
                        +

                        WorkbenchException

                        +
                        public WorkbenchException(String message, + Exception e)
                        +
                        Instantiates a WorkbenchException with the parameter message and inner exception
                        +
                        +
                        Parameters:
                        +
                        message - the message of this exception
                        +
                        e - the inner exception
                        +
                        +
                        +
                      • +
                      • +
                        +

                        WorkbenchException

                        +
                        public WorkbenchException(Exception e)
                        +
                        Instantiates a WorkbenchException with the parameter inner exception
                        +
                        +
                        Parameters:
                        +
                        e - the inner exception
                        +
                        +
                        +
                      • +
                      • +
                        +

                        WorkbenchException

                        +
                        public WorkbenchException(String message)
                        +
                        Instantiates a WorkbenchException with the parameter message
                        +
                        +
                        Parameters:
                        +
                        message - the message of this exception
                        +
                        +
                        +
                      • +
                      +
                      +
                    • + +
                    • +
                      +

                      Method Details

                      + +
                      +
                    • +
                    +
                    + +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/class-use/LogMessage.html b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/LogMessage.html new file mode 100644 index 0000000..72a4fbd --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/LogMessage.html @@ -0,0 +1,92 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.development.LogMessage (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.development.LogMessage

                    +
                    +
                    Packages that use LogMessage
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationEventResult.html b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationEventResult.html new file mode 100644 index 0000000..6047ec9 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationEventResult.html @@ -0,0 +1,62 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.development.SimulationEventResult (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.development.SimulationEventResult

                    +
                    +No usage of com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationStep.html b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationStep.html new file mode 100644 index 0000000..12441b4 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/SimulationStep.html @@ -0,0 +1,107 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.development.SimulationStep (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.development.SimulationStep

                    +
                    +
                    Packages that use SimulationStep
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/class-use/Util.html b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/Util.html new file mode 100644 index 0000000..0a814be --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/Util.html @@ -0,0 +1,62 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.development.Util (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.development.Util

                    +
                    +No usage of com.scaleoutsoftware.digitaltwin.development.Util
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/class-use/Workbench.html b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/Workbench.html new file mode 100644 index 0000000..699d5ae --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/Workbench.html @@ -0,0 +1,62 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.development.Workbench (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.development.Workbench

                    +
                    +No usage of com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/class-use/WorkbenchException.html b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/WorkbenchException.html new file mode 100644 index 0000000..0682aa2 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/class-use/WorkbenchException.html @@ -0,0 +1,165 @@ + + + + +Uses of Class com.scaleoutsoftware.digitaltwin.development.WorkbenchException (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Class
                    com.scaleoutsoftware.digitaltwin.development.WorkbenchException

                    +
                    +
                    Packages that use WorkbenchException
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html new file mode 100644 index 0000000..7f12f95 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-summary.html @@ -0,0 +1,119 @@ + + + + +com.scaleoutsoftware.digitaltwin.development (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Package com.scaleoutsoftware.digitaltwin.development

                    +
                    +
                    +
                    package com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                      +
                    • +
                      +
                      +
                      +
                      +
                      Class
                      +
                      Description
                      + +
                      +
                      A messaged that was logged by a digital twin.
                      +
                      + +
                      +
                      A simulation event result.
                      +
                      + +
                      +
                      The simulation step class encases the metadata for a completed interval of a simulation.
                      +
                      + +
                      +
                      The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
                      +
                      + +
                      +
                      A Workbench exception indicates that a real-time or simulated twin caused an exception.
                      +
                      +
                      +
                      +
                      +
                    • +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html new file mode 100644 index 0000000..1e661e5 --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-tree.html @@ -0,0 +1,88 @@ + + + + +com.scaleoutsoftware.digitaltwin.development Class Hierarchy (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Hierarchy For Package com.scaleoutsoftware.digitaltwin.development

                    +
                    +Package Hierarchies: + +
                    +

                    Class Hierarchy

                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/com/scaleoutsoftware/digitaltwin/development/package-use.html b/docs/com/scaleoutsoftware/digitaltwin/development/package-use.html new file mode 100644 index 0000000..58c901c --- /dev/null +++ b/docs/com/scaleoutsoftware/digitaltwin/development/package-use.html @@ -0,0 +1,96 @@ + + + + +Uses of Package com.scaleoutsoftware.digitaltwin.development (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Uses of Package
                    com.scaleoutsoftware.digitaltwin.development

                    +
                    + +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/copy.svg b/docs/copy.svg new file mode 100644 index 0000000..7c46ab1 --- /dev/null +++ b/docs/copy.svg @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/docs/element-list b/docs/element-list new file mode 100644 index 0000000..5c1d502 --- /dev/null +++ b/docs/element-list @@ -0,0 +1,2 @@ +com.scaleoutsoftware.digitaltwin.abstractions +com.scaleoutsoftware.digitaltwin.development diff --git a/docs/help-doc.html b/docs/help-doc.html new file mode 100644 index 0000000..2be4796 --- /dev/null +++ b/docs/help-doc.html @@ -0,0 +1,198 @@ + + + + +API Help (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +

                    JavaDoc Help

                    + +
                    +
                    +

                    Navigation

                    +Starting from the Overview page, you can browse the documentation using the links in each page, and in the navigation bar at the top of each page. The Index and Search box allow you to navigate to specific declarations and summary pages, including: All Packages, All Classes and Interfaces + +
                    +
                    +
                    +

                    Kinds of Pages

                    +The following sections describe the different kinds of pages in this collection. +
                    +

                    Overview

                    +

                    The Overview page is the front page of this API document and provides a list of all packages with a summary for each. This page can also contain an overall description of the set of packages.

                    +
                    +
                    +

                    Package

                    +

                    Each package has a page that contains a list of its classes and interfaces, with a summary for each. These pages may contain the following categories:

                    +
                      +
                    • Interfaces
                    • +
                    • Classes
                    • +
                    • Enum Classes
                    • +
                    • Exception Classes
                    • +
                    • Annotation Interfaces
                    • +
                    +
                    +
                    +

                    Class or Interface

                    +

                    Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a declaration and description, member summary tables, and detailed member descriptions. Entries in each of these sections are omitted if they are empty or not applicable.

                    +
                      +
                    • Class Inheritance Diagram
                    • +
                    • Direct Subclasses
                    • +
                    • All Known Subinterfaces
                    • +
                    • All Known Implementing Classes
                    • +
                    • Class or Interface Declaration
                    • +
                    • Class or Interface Description
                    • +
                    +
                    +
                      +
                    • Nested Class Summary
                    • +
                    • Enum Constant Summary
                    • +
                    • Field Summary
                    • +
                    • Property Summary
                    • +
                    • Constructor Summary
                    • +
                    • Method Summary
                    • +
                    • Required Element Summary
                    • +
                    • Optional Element Summary
                    • +
                    +
                    +
                      +
                    • Enum Constant Details
                    • +
                    • Field Details
                    • +
                    • Property Details
                    • +
                    • Constructor Details
                    • +
                    • Method Details
                    • +
                    • Element Details
                    • +
                    +

                    Note: Annotation interfaces have required and optional elements, but not methods. Only enum classes have enum constants. The components of a record class are displayed as part of the declaration of the record class. Properties are a feature of JavaFX.

                    +

                    The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.

                    +
                    +
                    +

                    Other Files

                    +

                    Packages and modules may contain pages with additional information related to the declarations nearby.

                    +
                    +
                    +

                    Use

                    +

                    Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the USE link in the navigation bar.

                    +
                    +
                    +

                    Tree (Class Hierarchy)

                    +

                    There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. Classes are organized by inheritance structure starting with java.lang.Object. Interfaces do not inherit from java.lang.Object.

                    +
                      +
                    • When viewing the Overview page, clicking on TREE displays the hierarchy for all packages.
                    • +
                    • When viewing a particular package, class or interface page, clicking on TREE displays the hierarchy for only that package.
                    • +
                    +
                    +
                    +

                    Serialized Form

                    +

                    Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to those who implement rather than use the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See Also" section of the class description.

                    +
                    +
                    +

                    All Packages

                    +

                    The All Packages page contains an alphabetic index of all packages contained in the documentation.

                    +
                    +
                    +

                    All Classes and Interfaces

                    +

                    The All Classes and Interfaces page contains an alphabetic index of all classes and interfaces contained in the documentation, including annotation interfaces, enum classes, and record classes.

                    +
                    +
                    +

                    Index

                    +

                    The Index contains an alphabetic index of all classes, interfaces, constructors, methods, and fields in the documentation, as well as summary pages such as All Packages, All Classes and Interfaces.

                    +
                    +
                    +
                    +This help file applies to API documentation generated by the standard doclet.
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/index-all.html b/docs/index-all.html new file mode 100644 index 0000000..fff5823 --- /dev/null +++ b/docs/index-all.html @@ -0,0 +1,872 @@ + + + + +Index (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Index

                    +
                    +A C D E F G H I L M N O P R S T U V W 
                    All Classes and Interfaces|All Packages|Serialized Form +

                    A

                    +
                    +
                    addAlertProvider(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Adds an alert provider configuration to the specified model on this workbench.
                    +
                    +
                    addGlobalModelData(String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Add a key/value pair to the global SharedData.
                    +
                    +
                    addInstance(String, String, V) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Adds a digital twin instance to the workbench.
                    +
                    +
                    addRealTimeModel(String, MessageProcessor<T>, Class<T>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Adds a real-time digital twin model to the workbench.
                    +
                    +
                    addSharedModelData(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Add a key/value pair to SharedData for a model.
                    +
                    +
                    addSimulationModel(String, MessageProcessor<T>, SimulationProcessor<T>, Class<T>) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Adds a simulation digital twin model to the workbench.
                    +
                    +
                    AlertMessage - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    A message that should be sent to a configured alert provider.
                    +
                    +
                    AlertMessage(String, String, String) - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    Construct an alert message with a title, severity, and custom message.
                    +
                    +
                    AlertMessage(String, String, String, HashMap<String, String>) - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    Construct an alert message with a title, severity, and custom message.
                    +
                    +
                    AzureDigitalTwinsProvider - Interface in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    An interface that can be used for persisting/retrieving the state of real-time digital twins.
                    +
                    +
                    +

                    C

                    +
                    +
                    CacheCleared - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    The cache was cleared successfully.
                    +
                    +
                    CacheOperationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Status of a cache operation.
                    +
                    +
                    CacheResult - Interface in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Represents a response from a SharedData operation.
                    +
                    +
                    clear() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SharedData
                    +
                    +
                    Clear the shared data cache.
                    +
                    +
                    close() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                     
                    +
                    com.scaleoutsoftware.digitaltwin.abstractions - package com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    +
                    com.scaleoutsoftware.digitaltwin.development - package com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    createInstance(String, String, T) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    Create a new digital twin instance for simulation processing.
                    +
                    +
                    CreateResult - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Enum indicating the status of a delete operation.
                    +
                    +
                    +

                    D

                    +
                    +
                    delay(Duration) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    + Delay simulation processing for this DigitalTwin instance for a duration of time.
                    +
                    +
                    delayIndefinitely() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    + Delay simulation processing for this DigitalTwin instance, indefinitely.
                    +
                    +
                    deleteInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    Delete and remove a digital twin instance from simulation processing.
                    +
                    +
                    DeleteResult - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Enum indicating the status of a delete operation.
                    +
                    +
                    deleteThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    Delete and remove this digital twin instance from simulation processing.
                    +
                    +
                    DigitalTwinBase<T> - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    A real-time digital twin of a data source.
                    +
                    +
                    DigitalTwinBase() - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    Default constructor.
                    +
                    +
                    +

                    E

                    +
                    +
                    emitTelemetry(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    + Asynchronously send a JSON serialized message to a DigitalTwin instance that will be processed by the DigitalTwin + models MessageProcessor.processMessage(ProcessingContext, DigitalTwinBase, byte[]) method.
                    +
                    +
                    EndTimeReached - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    The simulation end time has been reached.
                    +
                    +
                    Enqueued - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SendingResult
                    +
                    +
                    Enqueued indicates that a message was successfully formed and then sent to an internal messaging service
                    +
                    +
                    +

                    F

                    +
                    +
                    FailedInternalError - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Failed to start/stop timer due to an internal error.
                    +
                    +
                    FailedNoSuchTimer - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Failed to stop the existing timer, the timer is no longer active.
                    +
                    +
                    FailedTimerAlreadyExists - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Failed to start the timer, the timer with the specified name already exists.
                    +
                    +
                    FailedTooManyTimers - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Failed to start a new timer due to reaching the limit for a number of active timers.
                    +
                    +
                    fromOrdinal(int) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Convert an ordinal into a TimerActionResult.
                    +
                    +
                    +

                    G

                    +
                    +
                    get(String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SharedData
                    +
                    +
                    Retrieves an existing object from the cache.
                    +
                    +
                    getAlertMessages(String, String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieves alert messages from digital twin instances.
                    +
                    +
                    getAzureDigitalTwinsProvider() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Returns an AzureDigitalTwinsProvider or null if no AzureDigitalTwinsProvider configuration can be found.
                    +
                    +
                    getCurrentTime() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Retrieves the current time.
                    +
                    +
                    getDataSourceId() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Retrieve the unique Identifier for a DataSource (matches the Device/Datasource/Real-time twin ID)
                    +
                    +
                    getDigitalTwinModel() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Retrieve the model for a DigitalTwin (matches the model of a Device/Datasource/real-time twin)
                    +
                    +
                    getHandler() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata
                    +
                     
                    +
                    getId() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    The identifier of this DigitalTwin.
                    +
                    +
                    getId() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.InitContext
                    +
                    +
                    Get the model-unique Id identifier of the initializing digital twin instance.
                    +
                    +
                    getInstance(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves an instance or null if it doesn't exist.
                    +
                    +
                    getInstanceAsync(String, String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a future that when complete will return an instance or null if it doesn't exist.
                    +
                    +
                    getInstanceIds(String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves the instance IDs stored in a container, or an empty list if no instances exist.
                    +
                    +
                    getInstanceIdsAsync(String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a future that when complete will return the instance IDs stored in a container, or an empty list if no instances exist.
                    +
                    +
                    getInstances(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieves DigitalTwin instances for a given model.
                    +
                    +
                    getKey() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.CacheResult
                    +
                    +
                    Gets the key or null to the object associated with the result.
                    +
                    +
                    getLoggedMessages(String, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieves messages logged by digital twin instances for a specified mdoel.
                    +
                    +
                    getMessage() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    Retrieve the message for this alert message.
                    +
                    +
                    getMessage() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
                    +
                    +
                    Retrieve the string message associated with this log message.
                    +
                    +
                    getMessage() - Method in exception class com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                    +
                     
                    +
                    getModel() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    The model for this DigitalTwin.
                    +
                    +
                    getModel() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.InitContext
                    +
                    +
                    Get the Model identifier of the initializing digital twin instance.
                    +
                    +
                    getNextSimulationTimeUnixMsec() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    INTERNAL: DO NOT MODIFY.
                    +
                    +
                    getOptionalTwinInstanceProperties() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    Retrieve the optional twin instance properties for this alert message.
                    +
                    +
                    getProperty(String, String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a property or null if the property does not exist.
                    +
                    +
                    getPropertyAsync(String, String, String, Class<T>) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a future that will return a property or null if the property does not exist.
                    +
                    +
                    getPropertyMap(String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a map of property names to property types, or an empty map.
                    +
                    +
                    getPropertyMapAsync(String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a future that will return a map of property names to property, or an empty map.
                    +
                    +
                    getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    Retrieve the severity for this alert message.
                    +
                    +
                    getSeverity() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
                    +
                    +
                    Retrieve the severity of this log message.
                    +
                    +
                    getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.InitContext
                    +
                    +
                    Retrieve a SharedData accessor for globally shared data.
                    +
                    +
                    getSharedGlobalData() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.InitSimulationContext
                    +
                    +
                    Retrieve a SharedData accessor for globally shared data.
                    +
                    +
                    getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Retrieve a SharedData accessor for globally shared data.
                    +
                    +
                    getSharedGlobalData() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieve the global SharedData.
                    +
                    +
                    getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.InitContext
                    +
                    +
                    Retrieve a SharedData accessor for this model's shared data.
                    +
                    +
                    getSharedModelData() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.InitSimulationContext
                    +
                    +
                    Retrieve a SharedData accessor for this model's shared data.
                    +
                    +
                    getSharedModelData() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Retrieve a SharedData accessor for this model's shared data.
                    +
                    +
                    getSharedModelData(String) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieve the SharedData for a model.
                    +
                    +
                    getSimulationController() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Retrieve the running SimulationController or null if no simulation is running.
                    +
                    +
                    getSimulationStartTime() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    + Retrieves the simulation start time.
                    +
                    +
                    getSimulationTimeIncrement() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    + Retrieves the current simulation time increment.
                    +
                    +
                    getSourceAppIdNamespace() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    INTERNAL: DO NOT MODIFY.
                    +
                    +
                    getStatus() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.CacheResult
                    +
                    +
                    Gets the status of the cache operation.
                    +
                    +
                    getStatus() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
                    +
                    +
                    Retrieve the SimulationStatus of the simulation interval.
                    +
                    +
                    getTime() - Method in class com.scaleoutsoftware.digitaltwin.development.SimulationStep
                    +
                    +
                    Retrieve the time of the simulation interval.
                    +
                    +
                    getTime() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieves the current time interval of the simulation.
                    +
                    +
                    getTimerIntervalMs() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata
                    +
                    +
                    Retrieves the timer interval.
                    +
                    +
                    getTimerSlot() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata
                    +
                    +
                    Retrieves the timer ID.
                    +
                    +
                    getTimerType() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata
                    +
                    +
                    Retrieves the timer type.
                    +
                    +
                    getTimestamp() - Method in class com.scaleoutsoftware.digitaltwin.development.LogMessage
                    +
                    +
                    Retrieve the timestamp from when this message was generated.
                    +
                    +
                    getTitle() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                    +
                    Retrieve the title for this alert message.
                    +
                    +
                    getValue() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.CacheResult
                    +
                    +
                    Get the object returned from a Get operation.
                    +
                    +
                    +

                    H

                    +
                    +
                    Handled - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SendingResult
                    +
                    +
                    Handled indicates that a message was successfully sent and processed
                    +
                    +
                    +

                    I

                    +
                    +
                    Id - Variable in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    The identifier for this twin instance
                    +
                    +
                    init(InitContext<T>) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    Initialization method to set the identifier and model for a DigitalTwin instance.
                    +
                    +
                    InitContext<T> - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    The InitContext is passed as a parameter to the DigitalTwinBase.init(InitContext) method of an initializing + digital twin.
                    +
                    +
                    InitContext() - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.InitContext
                    +
                    +
                    Default constructor.
                    +
                    +
                    initializeSimulation(long, long, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Initializes the simulation so that each interval can be run separately by calling the Workbench.step() + function.
                    +
                    +
                    InitSimulationContext - Interface in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    The InitSimulationContext is passed as a parameter to the SimulationProcessor.onInitSimulation(InitSimulationContext, DigitalTwinBase, Date) method of + digital twin instance when a simulation is initializing.
                    +
                    +
                    InstanceRequestedStop - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    A digital twin instance has requested the simulation to stop by calling SimulationController.stopSimulation()
                    +
                    +
                    isActive() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Returns true if this PersistenceProvider is active, false otherwise.
                    +
                    +
                    +

                    L

                    +
                    +
                    logMessage(Level, String) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Log a message to the real-time digital twin UI.
                    +
                    +
                    LogMessage - Class in com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    A messaged that was logged by a digital twin.
                    +
                    +
                    +

                    M

                    +
                    +
                    MessageProcessor<T> - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Processes messages for a real-time digital twin.
                    +
                    +
                    MessageProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor
                    +
                    +
                    Default constructor.
                    +
                    +
                    Model - Variable in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    The model this twin instance belongs to.
                    +
                    +
                    +

                    N

                    +
                    +
                    NextSimulationTimeUnixMsec - Variable in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    DO NOT MODIFY.
                    +
                    +
                    NoRemainingWork - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    There is no remaining work for the simulation.
                    +
                    +
                    NotFound - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult
                    +
                    +
                    The target twin instance was not found.
                    +
                    +
                    NotHandled - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SendingResult
                    +
                    +
                    NotHandled indicates that the message was not handled.
                    +
                    +
                    NotSet - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    The simulation status is not set.
                    +
                    +
                    NoUpdate - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult
                    +
                    +
                    Do not update the digital twin.
                    +
                    +
                    +

                    O

                    +
                    +
                    ObjectDoesNotExist - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    The object could not be retrieved because it was not found.
                    +
                    +
                    ObjectExists - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CreateResult
                    +
                    +
                    The twin instance already existed and could not be created.
                    +
                    +
                    ObjectPut - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    The object was successfully added/updated.
                    +
                    +
                    ObjectRemoved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    The object was removed successfully.
                    +
                    +
                    ObjectRetrieved - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    The object was successfully retrieved.
                    +
                    +
                    OneTime - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerType
                    +
                    +
                    This timer should trigger one time.
                    +
                    +
                    onInitSimulation(InitSimulationContext, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor
                    +
                    +
                    + Optional method that is called per-instance when a simulation is started.
                    +
                    +
                    onTimedMessage(String, T, ProcessingContext<T>) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler
                    +
                    +
                    Callback to handle a timer message.
                    +
                    +
                    +

                    P

                    +
                    +
                    peek() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Retrieves the next interval time of the simulation.
                    +
                    +
                    ProcessingContext<T> - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Context object that allows the user to send a message to a DataSource.
                    +
                    +
                    ProcessingContext() - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Default constructor.
                    +
                    +
                    ProcessingResult - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    The result from a message processor which indicates to update the twin instance, not update the twin instance, or + remove the twin instance.
                    +
                    +
                    processMessage(ProcessingContext<T>, T, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor
                    +
                    +
                    Processes a set of incoming messages and determines whether to update the real-time digital twin.
                    +
                    +
                    processModel(ProcessingContext<T>, T, Date) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor
                    +
                    +
                    Processes simulation events for a real-time digital twin.
                    +
                    +
                    put(String, byte[]) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SharedData
                    +
                    +
                    Put a new key/value mapping into the cache.
                    +
                    +
                    +

                    R

                    +
                    +
                    Recurring - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerType
                    +
                    +
                    This timer should reoccur on a schedule.
                    +
                    +
                    remove(String) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SharedData
                    +
                    +
                    Remove a key/value mapping from the cache.
                    +
                    +
                    Remove - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult
                    +
                    +
                    The twin instance should be removed after processing.
                    +
                    +
                    removeRealTimeTwin(String, String) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Delete the target real-time twin instance.
                    +
                    +
                    Running - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    The simulation is running.
                    +
                    +
                    runSimulation(long, long, double, long) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Runs a simulation from the given startTime until the given endTime OR there is no more work to do.
                    +
                    +
                    runThisInstance() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    Run this instance during this simulation step.
                    +
                    +
                    +

                    S

                    +
                    +
                    send(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Send a list of messages to a real-time or simulation model.
                    +
                    +
                    sendAlert(AlertMessage) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    + This method sends an alert message to configured systems.
                    +
                    +
                    SendingResult - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Marks a message as Handled, Enqueued, or Not Handled
                    +
                    +
                    sendToDataSource(byte[]) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    + Sends a message to a data source.
                    +
                    +
                    sendToDigitalTwin(String, String, byte[]) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    + This method sends a serialized JSON message to a real-time digital twin
                    +
                    +
                    setNextSimulationTimeUnixMsec(long) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    INTERNAL: DO NOT MODIFY.
                    +
                    +
                    setSourceAppIdNamespace(int) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    INTERNAL: DO NOT MODIFY.
                    +
                    +
                    SharedData - Interface in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    SharedData is used to access a model's, or globally, shared cache.
                    +
                    +
                    SimulationController - Interface in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    The SimulationController interface is used to interact with the running DigitalTwin simulation.
                    +
                    +
                    SimulationEventResult - Class in com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    A simulation event result.
                    +
                    +
                    SimulationEventResult() - Constructor for class com.scaleoutsoftware.digitaltwin.development.SimulationEventResult
                    +
                     
                    +
                    SimulationProcessor<T> - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Processes simulation events for a digital twin.
                    +
                    +
                    SimulationProcessor() - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor
                    +
                    +
                    Default constructor.
                    +
                    +
                    SimulationStatus - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    The status of a simulation.
                    +
                    +
                    SimulationStep - Class in com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    The simulation step class encases the metadata for a completed interval of a simulation.
                    +
                    +
                    SourceNamespaceAppId - Variable in class com.scaleoutsoftware.digitaltwin.abstractions.DigitalTwinBase
                    +
                    +
                    DO NOT MODIFY.
                    +
                    +
                    startTimer(String, Duration, TimerType, TimerHandler<T>, Class<? extends TimerHandler<T>>) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.InitContext
                    +
                    +
                    Starts a new timer for the digital twin
                    +
                    +
                    startTimer(String, Duration, TimerType, TimerHandler<T>, Class<? extends TimerHandler<T>>) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Starts a new timer for the digital twin
                    +
                    +
                    step() - Method in class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Run the next simulation interval.
                    +
                    +
                    stopSimulation() - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.SimulationController
                    +
                    +
                    Stop the simulation.
                    +
                    +
                    stopTimer(String) - Method in class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext
                    +
                    +
                    Stops the specified timer.
                    +
                    +
                    Success - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.CreateResult
                    +
                    +
                    The twin instance was successfully created.
                    +
                    +
                    Success - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult
                    +
                    +
                    The twin instance was successfully deleted.
                    +
                    +
                    Success - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    The operation completed successfully.
                    +
                    +
                    +

                    T

                    +
                    +
                    TimerActionResult - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    The result of a timer action.
                    +
                    +
                    TimerHandler<T> - Interface in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Callback to a handle a timer message for a DigitalTwinBase.
                    +
                    +
                    TimerMetadata<T> - Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Metadata class for a timer.
                    +
                    +
                    TimerMetadata(TimerHandler<T>, TimerType, long, int) - Constructor for class com.scaleoutsoftware.digitaltwin.abstractions.TimerMetadata
                    +
                    +
                    Constructs a timer metadata.
                    +
                    +
                    TimerType - Enum Class in com.scaleoutsoftware.digitaltwin.abstractions
                    +
                    +
                    Enum representation of the available timer types
                    +
                    +
                    toString() - Method in class com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage
                    +
                     
                    +
                    +

                    U

                    +
                    +
                    UnexpectedChangeInConfiguration - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    There was a runtime-change of simulation configuration.
                    +
                    +
                    UpdateDigitalTwin - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult
                    +
                    +
                    Update the digital twin.
                    +
                    +
                    updateProperty(String, String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Updates a property for the provided instance id in the provided container specified by the property name and property value.
                    +
                    +
                    updatePropertyAsync(String, String, String, Object) - Method in interface com.scaleoutsoftware.digitaltwin.abstractions.AzureDigitalTwinsProvider
                    +
                    +
                    Retrieves a future that will complete exceptionally or return void if the instance's property was successfully updated.
                    +
                    +
                    UserRequested - Enum constant in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    The user requested a stop.
                    +
                    +
                    +

                    V

                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.CreateResult
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.SendingResult
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    valueOf(String) - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerType
                    +
                    +
                    Returns the enum constant of this class with the specified name.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.CacheOperationStatus
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.CreateResult
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.DeleteResult
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.ProcessingResult
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.SendingResult
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.SimulationStatus
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerActionResult
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    values() - Static method in enum class com.scaleoutsoftware.digitaltwin.abstractions.TimerType
                    +
                    +
                    Returns an array containing the constants of this enum class, in +the order they are declared.
                    +
                    +
                    +

                    W

                    +
                    +
                    Workbench - Class in com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    The Workbench is used to represent an environment where developers can test real-time and simulated digital twins.
                    +
                    +
                    Workbench() - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Instantiate the workbench.
                    +
                    +
                    Workbench(int) - Constructor for class com.scaleoutsoftware.digitaltwin.development.Workbench
                    +
                    +
                    Instantiate the workbench.
                    +
                    +
                    WorkbenchException - Exception Class in com.scaleoutsoftware.digitaltwin.development
                    +
                    +
                    A Workbench exception indicates that a real-time or simulated twin caused an exception.
                    +
                    +
                    WorkbenchException(Exception) - Constructor for exception class com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                    +
                    +
                    Instantiates a WorkbenchException with the parameter inner exception
                    +
                    +
                    WorkbenchException(String) - Constructor for exception class com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                    +
                    +
                    Instantiates a WorkbenchException with the parameter message
                    +
                    +
                    WorkbenchException(String, Exception) - Constructor for exception class com.scaleoutsoftware.digitaltwin.development.WorkbenchException
                    +
                    +
                    Instantiates a WorkbenchException with the parameter message and inner exception
                    +
                    +
                    +A C D E F G H I L M N O P R S T U V W 
                    All Classes and Interfaces|All Packages|Serialized Form
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..1be1f10 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,77 @@ + + + + +Overview (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    DigitalTwinAPI 3.0.0 API

                    +
                    +
                    +
                    Packages
                    +
                    +
                    Package
                    +
                    Description
                    + +
                    +
                    Digital twin model API - Create a digital twin model.
                    +
                    + +
                    +
                    Digital twin development API - Develop and test simulation/real-time digital twins.
                    +
                    +
                    +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/legal/ADDITIONAL_LICENSE_INFO b/docs/legal/ADDITIONAL_LICENSE_INFO new file mode 100644 index 0000000..b62cc3e --- /dev/null +++ b/docs/legal/ADDITIONAL_LICENSE_INFO @@ -0,0 +1 @@ +Please see ..\java.base\ADDITIONAL_LICENSE_INFO diff --git a/docs/legal/ASSEMBLY_EXCEPTION b/docs/legal/ASSEMBLY_EXCEPTION new file mode 100644 index 0000000..0d4cfb4 --- /dev/null +++ b/docs/legal/ASSEMBLY_EXCEPTION @@ -0,0 +1 @@ +Please see ..\java.base\ASSEMBLY_EXCEPTION diff --git a/docs/legal/LICENSE b/docs/legal/LICENSE new file mode 100644 index 0000000..4ad9fe4 --- /dev/null +++ b/docs/legal/LICENSE @@ -0,0 +1 @@ +Please see ..\java.base\LICENSE diff --git a/docs/legal/jquery.md b/docs/legal/jquery.md new file mode 100644 index 0000000..a763ec6 --- /dev/null +++ b/docs/legal/jquery.md @@ -0,0 +1,26 @@ +## jQuery v3.7.1 + +### jQuery License +``` +jQuery v 3.7.1 +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +``` diff --git a/docs/legal/jqueryUI.md b/docs/legal/jqueryUI.md new file mode 100644 index 0000000..8bda9d7 --- /dev/null +++ b/docs/legal/jqueryUI.md @@ -0,0 +1,49 @@ +## jQuery UI v1.13.2 + +### jQuery UI License +``` +Copyright jQuery Foundation and other contributors, https://jquery.org/ + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/jquery/jquery-ui + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code contained within the demos directory. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +All files located in the node_modules and external directories are +externally maintained libraries used by this software which have their +own licenses; we recommend you read them, as their terms may differ from +the terms above. + +``` diff --git a/docs/link.svg b/docs/link.svg new file mode 100644 index 0000000..7ccc5ed --- /dev/null +++ b/docs/link.svg @@ -0,0 +1,31 @@ + + + + + + + + diff --git a/docs/member-search-index.js b/docs/member-search-index.js new file mode 100644 index 0000000..c762bcf --- /dev/null +++ b/docs/member-search-index.js @@ -0,0 +1 @@ +memberSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addAlertProvider(String, String)","u":"addAlertProvider(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addGlobalModelData(String, byte[])","u":"addGlobalModelData(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addInstance(String, String, V)","u":"addInstance(java.lang.String,java.lang.String,V)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addRealTimeModel(String, MessageProcessor, Class)","u":"addRealTimeModel(java.lang.String,com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSharedModelData(String, String, byte[])","u":"addSharedModelData(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"addSimulationModel(String, MessageProcessor, SimulationProcessor, Class)","u":"addSimulationModel(java.lang.String,com.scaleoutsoftware.digitaltwin.abstractions.MessageProcessor,com.scaleoutsoftware.digitaltwin.abstractions.SimulationProcessor,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"AlertMessage(String, String, String)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"AlertMessage(String, String, String, HashMap)","u":"%3Cinit%3E(java.lang.String,java.lang.String,java.lang.String,java.util.HashMap)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"CacheCleared"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SharedData","l":"clear()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"close()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"createInstance(String, String, T)","u":"createInstance(java.lang.String,java.lang.String,T)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"delay(Duration)","u":"delay(java.time.Duration)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"delayIndefinitely()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"deleteInstance(String, String)","u":"deleteInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"deleteThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"DigitalTwinBase()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"emitTelemetry(String, byte[])","u":"emitTelemetry(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"EndTimeReached"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SendingResult","l":"Enqueued"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"FailedInternalError"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"FailedNoSuchTimer"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"FailedTimerAlreadyExists"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"FailedTooManyTimers"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"fromOrdinal(int)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SharedData","l":"get(String)","u":"get(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getAlertMessages(String, String)","u":"getAlertMessages(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getAzureDigitalTwinsProvider()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getCurrentTime()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getDataSourceId()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getDigitalTwinModel()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerMetadata","l":"getHandler()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitContext","l":"getId()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getInstance(String, String)","u":"getInstance(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getInstanceAsync(String, String)","u":"getInstanceAsync(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getInstanceIds(String)","u":"getInstanceIds(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getInstanceIdsAsync(String)","u":"getInstanceIdsAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getInstances(String)","u":"getInstances(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheResult","l":"getKey()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getLoggedMessages(String, long)","u":"getLoggedMessages(java.lang.String,long)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"getMessage()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitContext","l":"getModel()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"getNextSimulationTimeUnixMsec()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"getOptionalTwinInstanceProperties()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getProperty(String, String, String, Class)","u":"getProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getPropertyAsync(String, String, String, Class)","u":"getPropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getPropertyMap(String)","u":"getPropertyMap(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"getPropertyMapAsync(String)","u":"getPropertyMapAsync(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getSeverity()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitSimulationContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedGlobalData()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitSimulationContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getSharedModelData()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getSharedModelData(String)","u":"getSharedModelData(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"getSimulationController()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"getSimulationStartTime()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"getSimulationTimeIncrement()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"getSourceAppIdNamespace()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheResult","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getStatus()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationStep","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"getTime()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerMetadata","l":"getTimerIntervalMs()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerMetadata","l":"getTimerSlot()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerMetadata","l":"getTimerType()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"LogMessage","l":"getTimestamp()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"getTitle()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheResult","l":"getValue()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SendingResult","l":"Handled"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"Id"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"init(InitContext)","u":"init(com.scaleoutsoftware.digitaltwin.abstractions.InitContext)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitContext","l":"InitContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"initializeSimulation(long, long, long)","u":"initializeSimulation(long,long,long)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"InstanceRequestedStop"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"isActive()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"logMessage(Level, String)","u":"logMessage(java.util.logging.Level,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"MessageProcessor","l":"MessageProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"Model"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"NextSimulationTimeUnixMsec"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"NoRemainingWork"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DeleteResult","l":"NotFound"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SendingResult","l":"NotHandled"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"NotSet"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingResult","l":"NoUpdate"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"ObjectDoesNotExist"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CreateResult","l":"ObjectExists"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"ObjectPut"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"ObjectRemoved"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"ObjectRetrieved"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerType","l":"OneTime"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationProcessor","l":"onInitSimulation(InitSimulationContext, T, Date)","u":"onInitSimulation(com.scaleoutsoftware.digitaltwin.abstractions.InitSimulationContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerHandler","l":"onTimedMessage(String, T, ProcessingContext)","u":"onTimedMessage(java.lang.String,T,com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"peek()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"ProcessingContext()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"MessageProcessor","l":"processMessage(ProcessingContext, T, byte[])","u":"processMessage(com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext,T,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationProcessor","l":"processModel(ProcessingContext, T, Date)","u":"processModel(com.scaleoutsoftware.digitaltwin.abstractions.ProcessingContext,T,java.util.Date)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SharedData","l":"put(String, byte[])","u":"put(java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerType","l":"Recurring"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingResult","l":"Remove"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SharedData","l":"remove(String)","u":"remove(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"removeRealTimeTwin(String, String)","u":"removeRealTimeTwin(java.lang.String,java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"Running"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"runSimulation(long, long, double, long)","u":"runSimulation(long,long,double,long)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"runThisInstance()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"send(String, String, byte[])","u":"send(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"sendAlert(AlertMessage)","u":"sendAlert(com.scaleoutsoftware.digitaltwin.abstractions.AlertMessage)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"sendToDataSource(byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"sendToDigitalTwin(String, String, byte[])","u":"sendToDigitalTwin(java.lang.String,java.lang.String,byte[])"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"setNextSimulationTimeUnixMsec(long)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"setSourceAppIdNamespace(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"SimulationEventResult","l":"SimulationEventResult()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationProcessor","l":"SimulationProcessor()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DigitalTwinBase","l":"SourceNamespaceAppId"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"InitContext","l":"startTimer(String, Duration, TimerType, TimerHandler, Class>)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.abstractions.TimerType,com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"startTimer(String, Duration, TimerType, TimerHandler, Class>)","u":"startTimer(java.lang.String,java.time.Duration,com.scaleoutsoftware.digitaltwin.abstractions.TimerType,com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler,java.lang.Class)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"step()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationController","l":"stopSimulation()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingContext","l":"stopTimer(String)","u":"stopTimer(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CreateResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DeleteResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"Success"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerMetadata","l":"TimerMetadata(TimerHandler, TimerType, long, int)","u":"%3Cinit%3E(com.scaleoutsoftware.digitaltwin.abstractions.TimerHandler,com.scaleoutsoftware.digitaltwin.abstractions.TimerType,long,int)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AlertMessage","l":"toString()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"UnexpectedChangeInConfiguration"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingResult","l":"UpdateDigitalTwin"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"updateProperty(String, String, String, Object)","u":"updateProperty(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"AzureDigitalTwinsProvider","l":"updatePropertyAsync(String, String, String, Object)","u":"updatePropertyAsync(java.lang.String,java.lang.String,java.lang.String,java.lang.Object)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"UserRequested"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CreateResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DeleteResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SendingResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerType","l":"valueOf(String)","u":"valueOf(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CacheOperationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"CreateResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"DeleteResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"ProcessingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SendingResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"SimulationStatus","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerActionResult","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","c":"TimerType","l":"values()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench()","u":"%3Cinit%3E()"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"Workbench","l":"Workbench(int)","u":"%3Cinit%3E(int)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(Exception)","u":"%3Cinit%3E(java.lang.Exception)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String)","u":"%3Cinit%3E(java.lang.String)"},{"p":"com.scaleoutsoftware.digitaltwin.development","c":"WorkbenchException","l":"WorkbenchException(String, Exception)","u":"%3Cinit%3E(java.lang.String,java.lang.Exception)"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/module-search-index.js b/docs/module-search-index.js new file mode 100644 index 0000000..0d59754 --- /dev/null +++ b/docs/module-search-index.js @@ -0,0 +1 @@ +moduleSearchIndex = [];updateSearchResults(); \ No newline at end of file diff --git a/docs/overview-summary.html b/docs/overview-summary.html new file mode 100644 index 0000000..72b5147 --- /dev/null +++ b/docs/overview-summary.html @@ -0,0 +1,26 @@ + + + + +DigitalTwinAPI 3.0.0 API + + + + + + + + + + + +
                    + +

                    index.html

                    +
                    + + diff --git a/docs/overview-tree.html b/docs/overview-tree.html new file mode 100644 index 0000000..554637a --- /dev/null +++ b/docs/overview-tree.html @@ -0,0 +1,128 @@ + + + + +Class Hierarchy (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                    + +
                    +
                    +
                    +

                    Hierarchy For All Packages

                    +
                    +Package Hierarchies: + +
                    +

                    Class Hierarchy

                    + +
                    +
                    +

                    Interface Hierarchy

                    + +
                    +
                    +

                    Enum Class Hierarchy

                    + +
                    +
                    +
                    +
                    + +
                    +
                    +
                    + + diff --git a/docs/package-search-index.js b/docs/package-search-index.js new file mode 100644 index 0000000..6851f8b --- /dev/null +++ b/docs/package-search-index.js @@ -0,0 +1 @@ +packageSearchIndex = [{"l":"All Packages","u":"allpackages-index.html"},{"l":"com.scaleoutsoftware.digitaltwin.abstractions"},{"l":"com.scaleoutsoftware.digitaltwin.development"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/resources/glass.png b/docs/resources/glass.png new file mode 100644 index 0000000000000000000000000000000000000000..a7f591f467a1c0c949bbc510156a0c1afb860a6e GIT binary patch literal 499 zcmVJoRsvExf%rEN>jUL}qZ_~k#FbE+Q;{`;0FZwVNX2n-^JoI; zP;4#$8DIy*Yk-P>VN(DUKmPse7mx+ExD4O|;?E5D0Z5($mjO3`*anwQU^s{ZDK#Lz zj>~{qyaIx5K!t%=G&2IJNzg!ChRpyLkO7}Ry!QaotAHAMpbB3AF(}|_f!G-oI|uK6 z`id_dumai5K%C3Y$;tKS_iqMPHg<*|-@e`liWLAggVM!zAP#@l;=c>S03;{#04Z~5 zN_+ss=Yg6*hTr59mzMwZ@+l~q!+?ft!fF66AXT#wWavHt30bZWFCK%!BNk}LN?0Hg z1VF_nfs`Lm^DjYZ1(1uD0u4CSIr)XAaqW6IT{!St5~1{i=i}zAy76p%_|w8rh@@c0Axr!ns=D-X+|*sY6!@wacG9%)Qn*O zl0sa739kT-&_?#oVxXF6tOnqTD)cZ}2vi$`ZU8RLAlo8=_z#*P3xI~i!lEh+Pdu-L zx{d*wgjtXbnGX_Yf@Tc7Q3YhLhPvc8noGJs2DA~1DySiA&6V{5JzFt ojAY1KXm~va;tU{v7C?Xj0BHw!K;2aXV*mgE07*qoM6N<$f;4TDA^-pY literal 0 HcmV?d00001 diff --git a/docs/script-dir/jquery-3.7.1.min.js b/docs/script-dir/jquery-3.7.1.min.js new file mode 100644 index 0000000..7f37b5d --- /dev/null +++ b/docs/script-dir/jquery-3.7.1.min.js @@ -0,0 +1,2 @@ +/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */ +!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
                    "],col:[2,"","
                    "],tr:[2,"","
                    "],td:[3,"","
                    "],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
                    ",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0",options:{classes:{},disabled:!1,create:null},_createWidget:function(t,e){e=x(e||this.defaultElement||this)[0],this.element=x(e),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=x(),this.hoverable=x(),this.focusable=x(),this.classesElementLookup={},e!==this&&(x.data(e,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===e&&this.destroy()}}),this.document=x(e.style?e.ownerDocument:e.document||e),this.window=x(this.document[0].defaultView||this.document[0].parentWindow)),this.options=x.widget.extend({},this.options,this._getCreateOptions(),t),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:x.noop,_create:x.noop,_init:x.noop,destroy:function(){var i=this;this._destroy(),x.each(this.classesElementLookup,function(t,e){i._removeClass(e,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:x.noop,widget:function(){return this.element},option:function(t,e){var i,s,n,o=t;if(0===arguments.length)return x.widget.extend({},this.options);if("string"==typeof t)if(o={},t=(i=t.split(".")).shift(),i.length){for(s=o[t]=x.widget.extend({},this.options[t]),n=0;n
                    "),i=e.children()[0];return x("body").append(e),t=i.offsetWidth,e.css("overflow","scroll"),t===(i=i.offsetWidth)&&(i=e[0].clientWidth),e.remove(),s=t-i},getScrollInfo:function(t){var e=t.isWindow||t.isDocument?"":t.element.css("overflow-x"),i=t.isWindow||t.isDocument?"":t.element.css("overflow-y"),e="scroll"===e||"auto"===e&&t.widthC(E(s),E(n))?o.important="horizontal":o.important="vertical",c.using.call(this,t,o)}),l.offset(x.extend(u,{using:t}))})},x.ui.position={fit:{left:function(t,e){var i=e.within,s=i.isWindow?i.scrollLeft:i.offset.left,n=i.width,o=t.left-e.collisionPosition.marginLeft,l=s-o,a=o+e.collisionWidth-n-s;e.collisionWidth>n?0n?0",delay:300,options:{icons:{submenu:"ui-icon-caret-1-e"},items:"> *",menus:"ul",position:{my:"left top",at:"right top"},role:"menu",blur:null,focus:null,select:null},_create:function(){this.activeMenu=this.element,this.mouseHandled=!1,this.lastMousePosition={x:null,y:null},this.element.uniqueId().attr({role:this.options.role,tabIndex:0}),this._addClass("ui-menu","ui-widget ui-widget-content"),this._on({"mousedown .ui-menu-item":function(t){t.preventDefault(),this._activateItem(t)},"click .ui-menu-item":function(t){var e=x(t.target),i=x(x.ui.safeActiveElement(this.document[0]));!this.mouseHandled&&e.not(".ui-state-disabled").length&&(this.select(t),t.isPropagationStopped()||(this.mouseHandled=!0),e.has(".ui-menu").length?this.expand(t):!this.element.is(":focus")&&i.closest(".ui-menu").length&&(this.element.trigger("focus",[!0]),this.active&&1===this.active.parents(".ui-menu").length&&clearTimeout(this.timer)))},"mouseenter .ui-menu-item":"_activateItem","mousemove .ui-menu-item":"_activateItem",mouseleave:"collapseAll","mouseleave .ui-menu":"collapseAll",focus:function(t,e){var i=this.active||this._menuItems().first();e||this.focus(t,i)},blur:function(t){this._delay(function(){x.contains(this.element[0],x.ui.safeActiveElement(this.document[0]))||this.collapseAll(t)})},keydown:"_keydown"}),this.refresh(),this._on(this.document,{click:function(t){this._closeOnDocumentClick(t)&&this.collapseAll(t,!0),this.mouseHandled=!1}})},_activateItem:function(t){var e,i;this.previousFilter||t.clientX===this.lastMousePosition.x&&t.clientY===this.lastMousePosition.y||(this.lastMousePosition={x:t.clientX,y:t.clientY},e=x(t.target).closest(".ui-menu-item"),i=x(t.currentTarget),e[0]===i[0]&&(i.is(".ui-state-active")||(this._removeClass(i.siblings().children(".ui-state-active"),null,"ui-state-active"),this.focus(t,i))))},_destroy:function(){var t=this.element.find(".ui-menu-item").removeAttr("role aria-disabled").children(".ui-menu-item-wrapper").removeUniqueId().removeAttr("tabIndex role aria-haspopup");this.element.removeAttr("aria-activedescendant").find(".ui-menu").addBack().removeAttr("role aria-labelledby aria-expanded aria-hidden aria-disabled tabIndex").removeUniqueId().show(),t.children().each(function(){var t=x(this);t.data("ui-menu-submenu-caret")&&t.remove()})},_keydown:function(t){var e,i,s,n=!0;switch(t.keyCode){case x.ui.keyCode.PAGE_UP:this.previousPage(t);break;case x.ui.keyCode.PAGE_DOWN:this.nextPage(t);break;case x.ui.keyCode.HOME:this._move("first","first",t);break;case x.ui.keyCode.END:this._move("last","last",t);break;case x.ui.keyCode.UP:this.previous(t);break;case x.ui.keyCode.DOWN:this.next(t);break;case x.ui.keyCode.LEFT:this.collapse(t);break;case x.ui.keyCode.RIGHT:this.active&&!this.active.is(".ui-state-disabled")&&this.expand(t);break;case x.ui.keyCode.ENTER:case x.ui.keyCode.SPACE:this._activate(t);break;case x.ui.keyCode.ESCAPE:this.collapse(t);break;default:e=this.previousFilter||"",s=n=!1,i=96<=t.keyCode&&t.keyCode<=105?(t.keyCode-96).toString():String.fromCharCode(t.keyCode),clearTimeout(this.filterTimer),i===e?s=!0:i=e+i,e=this._filterMenuItems(i),(e=s&&-1!==e.index(this.active.next())?this.active.nextAll(".ui-menu-item"):e).length||(i=String.fromCharCode(t.keyCode),e=this._filterMenuItems(i)),e.length?(this.focus(t,e),this.previousFilter=i,this.filterTimer=this._delay(function(){delete this.previousFilter},1e3)):delete this.previousFilter}n&&t.preventDefault()},_activate:function(t){this.active&&!this.active.is(".ui-state-disabled")&&(this.active.children("[aria-haspopup='true']").length?this.expand(t):this.select(t))},refresh:function(){var t,e,s=this,n=this.options.icons.submenu,i=this.element.find(this.options.menus);this._toggleClass("ui-menu-icons",null,!!this.element.find(".ui-icon").length),e=i.filter(":not(.ui-menu)").hide().attr({role:this.options.role,"aria-hidden":"true","aria-expanded":"false"}).each(function(){var t=x(this),e=t.prev(),i=x("").data("ui-menu-submenu-caret",!0);s._addClass(i,"ui-menu-icon","ui-icon "+n),e.attr("aria-haspopup","true").prepend(i),t.attr("aria-labelledby",e.attr("id"))}),this._addClass(e,"ui-menu","ui-widget ui-widget-content ui-front"),(t=i.add(this.element).find(this.options.items)).not(".ui-menu-item").each(function(){var t=x(this);s._isDivider(t)&&s._addClass(t,"ui-menu-divider","ui-widget-content")}),i=(e=t.not(".ui-menu-item, .ui-menu-divider")).children().not(".ui-menu").uniqueId().attr({tabIndex:-1,role:this._itemRole()}),this._addClass(e,"ui-menu-item")._addClass(i,"ui-menu-item-wrapper"),t.filter(".ui-state-disabled").attr("aria-disabled","true"),this.active&&!x.contains(this.element[0],this.active[0])&&this.blur()},_itemRole:function(){return{menu:"menuitem",listbox:"option"}[this.options.role]},_setOption:function(t,e){var i;"icons"===t&&(i=this.element.find(".ui-menu-icon"),this._removeClass(i,null,this.options.icons.submenu)._addClass(i,null,e.submenu)),this._super(t,e)},_setOptionDisabled:function(t){this._super(t),this.element.attr("aria-disabled",String(t)),this._toggleClass(null,"ui-state-disabled",!!t)},focus:function(t,e){var i;this.blur(t,t&&"focus"===t.type),this._scrollIntoView(e),this.active=e.first(),i=this.active.children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),this.options.role&&this.element.attr("aria-activedescendant",i.attr("id")),i=this.active.parent().closest(".ui-menu-item").children(".ui-menu-item-wrapper"),this._addClass(i,null,"ui-state-active"),t&&"keydown"===t.type?this._close():this.timer=this._delay(function(){this._close()},this.delay),(i=e.children(".ui-menu")).length&&t&&/^mouse/.test(t.type)&&this._startOpening(i),this.activeMenu=e.parent(),this._trigger("focus",t,{item:e})},_scrollIntoView:function(t){var e,i,s;this._hasScroll()&&(i=parseFloat(x.css(this.activeMenu[0],"borderTopWidth"))||0,s=parseFloat(x.css(this.activeMenu[0],"paddingTop"))||0,e=t.offset().top-this.activeMenu.offset().top-i-s,i=this.activeMenu.scrollTop(),s=this.activeMenu.height(),t=t.outerHeight(),e<0?this.activeMenu.scrollTop(i+e):s",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,t=this.element[0].nodeName.toLowerCase(),e="textarea"===t,t="input"===t;this.isMultiLine=e||!t&&this._isContentEditable(this.element),this.valueMethod=this.element[e||t?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(t){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:i=!0,this._move("previousPage",t);break;case e.PAGE_DOWN:i=!0,this._move("nextPage",t);break;case e.UP:i=!0,this._keyEvent("previous",t);break;case e.DOWN:i=!0,this._keyEvent("next",t);break;case e.ENTER:this.menu.active&&(i=!0,t.preventDefault(),this.menu.select(t));break;case e.TAB:this.menu.active&&this.menu.select(t);break;case e.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(t),t.preventDefault());break;default:s=!0,this._searchTimeout(t)}}},keypress:function(t){if(i)return i=!1,void(this.isMultiLine&&!this.menu.element.is(":visible")||t.preventDefault());if(!s){var e=x.ui.keyCode;switch(t.keyCode){case e.PAGE_UP:this._move("previousPage",t);break;case e.PAGE_DOWN:this._move("nextPage",t);break;case e.UP:this._keyEvent("previous",t);break;case e.DOWN:this._keyEvent("next",t)}}},input:function(t){if(n)return n=!1,void t.preventDefault();this._searchTimeout(t)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(t){clearTimeout(this.searching),this.close(t),this._change(t)}}),this._initSource(),this.menu=x("
                      ").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(t){t.preventDefault()},menufocus:function(t,e){var i,s;if(this.isNewMenu&&(this.isNewMenu=!1,t.originalEvent&&/^mouse/.test(t.originalEvent.type)))return this.menu.blur(),void this.document.one("mousemove",function(){x(t.target).trigger(t.originalEvent)});s=e.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",t,{item:s})&&t.originalEvent&&/^key/.test(t.originalEvent.type)&&this._value(s.value),(i=e.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(x("
                      ").text(i))},100))},menuselect:function(t,e){var i=e.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==x.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",t,{item:i})&&this._value(i.value),this.term=this._value(),this.close(t),this.selectedItem=i}}),this.liveRegion=x("
                      ",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(t,e){this._super(t,e),"source"===t&&this._initSource(),"appendTo"===t&&this.menu.element.appendTo(this._appendTo()),"disabled"===t&&e&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(t){var e=this.menu.element[0];return t.target===this.element[0]||t.target===e||x.contains(e,t.target)},_closeOnClickOutside:function(t){this._isEventTargetInWidget(t)||this.close()},_appendTo:function(){var t=this.options.appendTo;return t=!(t=!(t=t&&(t.jquery||t.nodeType?x(t):this.document.find(t).eq(0)))||!t[0]?this.element.closest(".ui-front, dialog"):t).length?this.document[0].body:t},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(t,e){e(x.ui.autocomplete.filter(i,t.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(t,e){n.xhr&&n.xhr.abort(),n.xhr=x.ajax({url:s,data:t,dataType:"json",success:function(t){e(t)},error:function(){e([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var t=this.term===this._value(),e=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;t&&(e||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(t,e){return t=null!=t?t:this._value(),this.term=this._value(),t.length").append(x("
                      ").text(e.label)).appendTo(t)},_move:function(t,e){if(this.menu.element.is(":visible"))return this.menu.isFirstItem()&&/^previous/.test(t)||this.menu.isLastItem()&&/^next/.test(t)?(this.isMultiLine||this._value(this.term),void this.menu.blur()):void this.menu[t](e);this.search(null,e)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(t,e){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(t,e),e.preventDefault())},_isContentEditable:function(t){if(!t.length)return!1;var e=t.prop("contentEditable");return"inherit"===e?this._isContentEditable(t.parent()):"true"===e}}),x.extend(x.ui.autocomplete,{escapeRegex:function(t){return t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(t,e){var i=new RegExp(x.ui.autocomplete.escapeRegex(e),"i");return x.grep(t,function(t){return i.test(t.label||t.value||t)})}}),x.widget("ui.autocomplete",x.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(t){return t+(1").text(e))},100))}});x.ui.autocomplete}); \ No newline at end of file diff --git a/docs/script.js b/docs/script.js new file mode 100644 index 0000000..bb9c8a2 --- /dev/null +++ b/docs/script.js @@ -0,0 +1,253 @@ +/* + * Copyright (c) 2013, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +var moduleSearchIndex; +var packageSearchIndex; +var typeSearchIndex; +var memberSearchIndex; +var tagSearchIndex; + +var oddRowColor = "odd-row-color"; +var evenRowColor = "even-row-color"; +var sortAsc = "sort-asc"; +var sortDesc = "sort-desc"; +var tableTab = "table-tab"; +var activeTableTab = "active-table-tab"; + +function loadScripts(doc, tag) { + createElem(doc, tag, 'search.js'); + + createElem(doc, tag, 'module-search-index.js'); + createElem(doc, tag, 'package-search-index.js'); + createElem(doc, tag, 'type-search-index.js'); + createElem(doc, tag, 'member-search-index.js'); + createElem(doc, tag, 'tag-search-index.js'); +} + +function createElem(doc, tag, path) { + var script = doc.createElement(tag); + var scriptElement = doc.getElementsByTagName(tag)[0]; + script.src = pathtoroot + path; + scriptElement.parentNode.insertBefore(script, scriptElement); +} + +// Helper for making content containing release names comparable lexicographically +function makeComparable(s) { + return s.toLowerCase().replace(/(\d+)/g, + function(n, m) { + return ("000" + m).slice(-4); + }); +} + +// Switches between two styles depending on a condition +function toggleStyle(classList, condition, trueStyle, falseStyle) { + if (condition) { + classList.remove(falseStyle); + classList.add(trueStyle); + } else { + classList.remove(trueStyle); + classList.add(falseStyle); + } +} + +// Sorts the rows in a table lexicographically by the content of a specific column +function sortTable(header, columnIndex, columns) { + var container = header.parentElement; + var descending = header.classList.contains(sortAsc); + container.querySelectorAll("div.table-header").forEach( + function(header) { + header.classList.remove(sortAsc); + header.classList.remove(sortDesc); + } + ) + var cells = container.children; + var rows = []; + for (var i = columns; i < cells.length; i += columns) { + rows.push(Array.prototype.slice.call(cells, i, i + columns)); + } + var comparator = function(a, b) { + var ka = makeComparable(a[columnIndex].textContent); + var kb = makeComparable(b[columnIndex].textContent); + if (ka < kb) + return descending ? 1 : -1; + if (ka > kb) + return descending ? -1 : 1; + return 0; + }; + var sorted = rows.sort(comparator); + var visible = 0; + sorted.forEach(function(row) { + if (row[0].style.display !== 'none') { + var isEvenRow = visible++ % 2 === 0; + } + row.forEach(function(cell) { + toggleStyle(cell.classList, isEvenRow, evenRowColor, oddRowColor); + container.appendChild(cell); + }) + }); + toggleStyle(header.classList, descending, sortDesc, sortAsc); +} + +// Toggles the visibility of a table category in all tables in a page +function toggleGlobal(checkbox, selected, columns) { + var display = checkbox.checked ? '' : 'none'; + document.querySelectorAll("div.table-tabs").forEach(function(t) { + var id = t.parentElement.getAttribute("id"); + var selectedClass = id + "-tab" + selected; + // if selected is empty string it selects all uncategorized entries + var selectUncategorized = !Boolean(selected); + var visible = 0; + document.querySelectorAll('div.' + id) + .forEach(function(elem) { + if (selectUncategorized) { + if (elem.className.indexOf(selectedClass) === -1) { + elem.style.display = display; + } + } else if (elem.classList.contains(selectedClass)) { + elem.style.display = display; + } + if (elem.style.display === '') { + var isEvenRow = visible++ % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + } + }); + var displaySection = visible === 0 ? 'none' : ''; + t.parentElement.style.display = displaySection; + document.querySelector("li#contents-" + id).style.display = displaySection; + }) +} + +// Shows the elements of a table belonging to a specific category +function show(tableId, selected, columns) { + if (tableId !== selected) { + document.querySelectorAll('div.' + tableId + ':not(.' + selected + ')') + .forEach(function(elem) { + elem.style.display = 'none'; + }); + } + document.querySelectorAll('div.' + selected) + .forEach(function(elem, index) { + elem.style.display = ''; + var isEvenRow = index % (columns * 2) < columns; + toggleStyle(elem.classList, isEvenRow, evenRowColor, oddRowColor); + }); + updateTabs(tableId, selected); +} + +function updateTabs(tableId, selected) { + document.getElementById(tableId + '.tabpanel') + .setAttribute('aria-labelledby', selected); + document.querySelectorAll('button[id^="' + tableId + '"]') + .forEach(function(tab, index) { + if (selected === tab.id || (tableId === selected && index === 0)) { + tab.className = activeTableTab; + tab.setAttribute('aria-selected', true); + tab.setAttribute('tabindex',0); + } else { + tab.className = tableTab; + tab.setAttribute('aria-selected', false); + tab.setAttribute('tabindex',-1); + } + }); +} + +function switchTab(e) { + var selected = document.querySelector('[aria-selected=true]'); + if (selected) { + if ((e.keyCode === 37 || e.keyCode === 38) && selected.previousSibling) { + // left or up arrow key pressed: move focus to previous tab + selected.previousSibling.click(); + selected.previousSibling.focus(); + e.preventDefault(); + } else if ((e.keyCode === 39 || e.keyCode === 40) && selected.nextSibling) { + // right or down arrow key pressed: move focus to next tab + selected.nextSibling.click(); + selected.nextSibling.focus(); + e.preventDefault(); + } + } +} + +var updateSearchResults = function() {}; + +function indexFilesLoaded() { + return moduleSearchIndex + && packageSearchIndex + && typeSearchIndex + && memberSearchIndex + && tagSearchIndex; +} +// Copy the contents of the local snippet to the clipboard +function copySnippet(button) { + copyToClipboard(button.nextElementSibling.innerText); + switchCopyLabel(button, button.firstElementChild); +} +function copyToClipboard(content) { + var textarea = document.createElement("textarea"); + textarea.style.height = 0; + document.body.appendChild(textarea); + textarea.value = content; + textarea.select(); + document.execCommand("copy"); + document.body.removeChild(textarea); +} +function switchCopyLabel(button, span) { + var copied = span.getAttribute("data-copied"); + button.classList.add("visible"); + var initialLabel = span.innerHTML; + span.innerHTML = copied; + setTimeout(function() { + button.classList.remove("visible"); + setTimeout(function() { + if (initialLabel !== copied) { + span.innerHTML = initialLabel; + } + }, 100); + }, 1900); +} +// Workaround for scroll position not being included in browser history (8249133) +document.addEventListener("DOMContentLoaded", function(e) { + var contentDiv = document.querySelector("div.flex-content"); + window.addEventListener("popstate", function(e) { + if (e.state !== null) { + contentDiv.scrollTop = e.state; + } + }); + window.addEventListener("hashchange", function(e) { + history.replaceState(contentDiv.scrollTop, document.title); + }); + var timeoutId; + contentDiv.addEventListener("scroll", function(e) { + if (timeoutId) { + clearTimeout(timeoutId); + } + timeoutId = setTimeout(function() { + history.replaceState(contentDiv.scrollTop, document.title); + }, 100); + }); + if (!location.hash) { + history.replaceState(contentDiv.scrollTop, document.title); + } +}); diff --git a/docs/search-page.js b/docs/search-page.js new file mode 100644 index 0000000..540c90f --- /dev/null +++ b/docs/search-page.js @@ -0,0 +1,284 @@ +/* + * Copyright (c) 2022, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +"use strict"; +$(function() { + var copy = $("#page-search-copy"); + var expand = $("#page-search-expand"); + var searchLink = $("span#page-search-link"); + var redirect = $("input#search-redirect"); + function setSearchUrlTemplate() { + var href = document.location.href.split(/[#?]/)[0]; + href += "?q=" + "%s"; + if (redirect.is(":checked")) { + href += "&r=1"; + } + searchLink.html(href); + copy[0].onmouseenter(); + } + function copyLink(e) { + copyToClipboard(this.previousSibling.innerText); + switchCopyLabel(this, this.lastElementChild); + } + copy.click(copyLink); + copy[0].onmouseenter = function() {}; + redirect.click(setSearchUrlTemplate); + setSearchUrlTemplate(); + copy.prop("disabled", false); + redirect.prop("disabled", false); + expand.click(function (e) { + var searchInfo = $("div.page-search-info"); + if(this.parentElement.hasAttribute("open")) { + searchInfo.attr("style", "border-width: 0;"); + } else { + searchInfo.attr("style", "border-width: 1px;").height(searchInfo.prop("scrollHeight")); + } + }); +}); +$(window).on("load", function() { + var input = $("#page-search-input"); + var reset = $("#page-search-reset"); + var notify = $("#page-search-notify"); + var resultSection = $("div#result-section"); + var resultContainer = $("div#result-container"); + var searchTerm = ""; + var activeTab = ""; + var fixedTab = false; + var visibleTabs = []; + var feelingLucky = false; + function renderResults(result) { + if (!result.length) { + notify.html(messages.noResult); + } else if (result.length === 1) { + notify.html(messages.oneResult); + } else { + notify.html(messages.manyResults.replace("{0}", result.length)); + } + resultContainer.empty(); + var r = { + "types": [], + "members": [], + "packages": [], + "modules": [], + "searchTags": [] + }; + for (var i in result) { + var item = result[i]; + var arr = r[item.category]; + arr.push(item); + } + if (!activeTab || r[activeTab].length === 0 || !fixedTab) { + Object.keys(r).reduce(function(prev, curr) { + if (r[curr].length > 0 && r[curr][0].score > prev) { + activeTab = curr; + return r[curr][0].score; + } + return prev; + }, 0); + } + if (feelingLucky && activeTab) { + notify.html(messages.redirecting) + var firstItem = r[activeTab][0]; + window.location = getURL(firstItem.indexItem, firstItem.category); + return; + } + if (result.length > 20) { + if (searchTerm[searchTerm.length - 1] === ".") { + if (activeTab === "types" && r["members"].length > r["types"].length) { + activeTab = "members"; + } else if (activeTab === "packages" && r["types"].length > r["packages"].length) { + activeTab = "types"; + } + } + } + var categoryCount = Object.keys(r).reduce(function(prev, curr) { + return prev + (r[curr].length > 0 ? 1 : 0); + }, 0); + visibleTabs = []; + var tabContainer = $("
                      ").appendTo(resultContainer); + for (var key in r) { + var id = "#result-tab-" + key.replace("searchTags", "search_tags"); + if (r[key].length) { + var count = r[key].length >= 1000 ? "999+" : r[key].length; + if (result.length > 20 && categoryCount > 1) { + var button = $("").appendTo(tabContainer); + button.click(key, function(e) { + fixedTab = true; + renderResult(e.data, $(this)); + }); + visibleTabs.push(key); + } else { + $("" + categories[key] + + " (" + count + ")").appendTo(tabContainer); + renderTable(key, r[key]).appendTo(resultContainer); + tabContainer = $("
                      ").appendTo(resultContainer); + + } + } + } + if (activeTab && result.length > 20 && categoryCount > 1) { + $("button#result-tab-" + activeTab).addClass("active-table-tab"); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + } + resultSection.show(); + function renderResult(category, button) { + activeTab = category; + setSearchUrl(); + resultContainer.find("div.summary-table").remove(); + renderTable(activeTab, r[activeTab]).appendTo(resultContainer); + button.siblings().removeClass("active-table-tab"); + button.addClass("active-table-tab"); + } + } + function selectTab(category) { + $("button#result-tab-" + category).click(); + } + function renderTable(category, items) { + var table = $("
                      ") + .addClass(category === "modules" + ? "one-column-search-results" + : "two-column-search-results"); + var col1, col2; + if (category === "modules") { + col1 = "Module"; + } else if (category === "packages") { + col1 = "Module"; + col2 = "Package"; + } else if (category === "types") { + col1 = "Package"; + col2 = "Class" + } else if (category === "members") { + col1 = "Class"; + col2 = "Member"; + } else if (category === "searchTags") { + col1 = "Location"; + col2 = "Name"; + } + $("
                      " + col1 + "
                      ").appendTo(table); + if (category !== "modules") { + $("
                      " + col2 + "
                      ").appendTo(table); + } + $.each(items, function(index, item) { + var rowColor = index % 2 ? "odd-row-color" : "even-row-color"; + renderItem(item, table, rowColor); + }); + return table; + } + function renderItem(item, table, rowColor) { + var label = getHighlightedText(item.input, item.boundaries, item.prefix.length, item.input.length); + var link = $("") + .attr("href", getURL(item.indexItem, item.category)) + .attr("tabindex", "0") + .addClass("search-result-link") + .html(label); + var container = getHighlightedText(item.input, item.boundaries, 0, item.prefix.length - 1); + if (item.category === "searchTags") { + container = item.indexItem.h || ""; + } + if (item.category !== "modules") { + $("
                      ").html(container).addClass("col-plain").addClass(rowColor).appendTo(table); + } + $("
                      ").html(link).addClass("col-last").addClass(rowColor).appendTo(table); + } + var timeout; + function schedulePageSearch() { + if (timeout) { + clearTimeout(timeout); + } + timeout = setTimeout(function () { + doPageSearch() + }, 100); + } + function doPageSearch() { + setSearchUrl(); + var term = searchTerm = input.val().trim(); + if (term === "") { + notify.html(messages.enterTerm); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + resultSection.hide(); + } else { + notify.html(messages.searching); + doSearch({ term: term, maxResults: 1200 }, renderResults); + } + } + function setSearchUrl() { + var query = input.val().trim(); + var url = document.location.pathname; + if (query) { + url += "?q=" + encodeURI(query); + if (activeTab && fixedTab) { + url += "&c=" + activeTab; + } + } + history.replaceState({query: query}, "", url); + } + input.on("input", function(e) { + feelingLucky = false; + schedulePageSearch(); + }); + $(document).keydown(function(e) { + if ((e.ctrlKey || e.metaKey) && (e.key === "ArrowLeft" || e.key === "ArrowRight")) { + if (activeTab && visibleTabs.length > 1) { + var idx = visibleTabs.indexOf(activeTab); + idx += e.key === "ArrowLeft" ? visibleTabs.length - 1 : 1; + selectTab(visibleTabs[idx % visibleTabs.length]); + return false; + } + } + }); + reset.click(function() { + notify.html(messages.enterTerm); + resultSection.hide(); + activeTab = ""; + fixedTab = false; + resultContainer.empty(); + input.val('').focus(); + setSearchUrl(); + }); + input.prop("disabled", false); + reset.prop("disabled", false); + + var urlParams = new URLSearchParams(window.location.search); + if (urlParams.has("q")) { + input.val(urlParams.get("q")) + } + if (urlParams.has("c")) { + activeTab = urlParams.get("c"); + fixedTab = true; + } + if (urlParams.get("r")) { + feelingLucky = true; + } + if (input.val()) { + doPageSearch(); + } else { + notify.html(messages.enterTerm); + } + input.select().focus(); +}); diff --git a/docs/search.html b/docs/search.html new file mode 100644 index 0000000..97df2ef --- /dev/null +++ b/docs/search.html @@ -0,0 +1,77 @@ + + + + +Search (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                      + +
                      +
                      +

                      Search

                      +
                      + + +
                      +Additional resources +
                      +
                      +
                      +

                      The help page provides an introduction to the scope and syntax of JavaDoc search.

                      +

                      You can use the <ctrl> or <cmd> keys in combination with the left and right arrow keys to switch between result tabs in this page.

                      +

                      The URL template below may be used to configure this page as a search engine in browsers that support this feature. It has been tested to work in Google Chrome and Mozilla Firefox. Note that other browsers may not support this feature or require a different URL format.

                      +link +

                      + +

                      +
                      +

                      Loading search index...

                      + +
                      +
                      +
                      + +
                      +
                      +
                      + + diff --git a/docs/search.js b/docs/search.js new file mode 100644 index 0000000..d398670 --- /dev/null +++ b/docs/search.js @@ -0,0 +1,458 @@ +/* + * Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code 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 + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ +"use strict"; +const messages = { + enterTerm: "Enter a search term", + noResult: "No results found", + oneResult: "Found one result", + manyResults: "Found {0} results", + loading: "Loading search index...", + searching: "Searching...", + redirecting: "Redirecting to first result...", + linkIcon: "Link icon", + linkToSection: "Link to this section" +} +const categories = { + modules: "Modules", + packages: "Packages", + types: "Classes and Interfaces", + members: "Members", + searchTags: "Search Tags" +}; +const highlight = "$&"; +const NO_MATCH = {}; +const MAX_RESULTS = 300; +function checkUnnamed(name, separator) { + return name === "" || !name ? "" : name + separator; +} +function escapeHtml(str) { + return str.replace(//g, ">"); +} +function getHighlightedText(str, boundaries, from, to) { + var start = from; + var text = ""; + for (var i = 0; i < boundaries.length; i += 2) { + var b0 = boundaries[i]; + var b1 = boundaries[i + 1]; + if (b0 >= to || b1 <= from) { + continue; + } + text += escapeHtml(str.slice(start, Math.max(start, b0))); + text += ""; + text += escapeHtml(str.slice(Math.max(start, b0), Math.min(to, b1))); + text += ""; + start = Math.min(to, b1); + } + text += escapeHtml(str.slice(start, to)); + return text; +} +function getURLPrefix(item, category) { + var urlPrefix = ""; + var slash = "/"; + if (category === "modules") { + return item.l + slash; + } else if (category === "packages" && item.m) { + return item.m + slash; + } else if (category === "types" || category === "members") { + if (item.m) { + urlPrefix = item.m + slash; + } else { + $.each(packageSearchIndex, function(index, it) { + if (it.m && item.p === it.l) { + urlPrefix = it.m + slash; + } + }); + } + } + return urlPrefix; +} +function getURL(item, category) { + if (item.url) { + return item.url; + } + var url = getURLPrefix(item, category); + if (category === "modules") { + url += "module-summary.html"; + } else if (category === "packages") { + if (item.u) { + url = item.u; + } else { + url += item.l.replace(/\./g, '/') + "/package-summary.html"; + } + } else if (category === "types") { + if (item.u) { + url = item.u; + } else { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.l + ".html"; + } + } else if (category === "members") { + url += checkUnnamed(item.p, "/").replace(/\./g, '/') + item.c + ".html" + "#"; + if (item.u) { + url += item.u; + } else { + url += item.l; + } + } else if (category === "searchTags") { + url += item.u; + } + item.url = url; + return url; +} +function createMatcher(term, camelCase) { + if (camelCase && !isUpperCase(term)) { + return null; // no need for camel-case matcher for lower case query + } + var pattern = ""; + var upperCase = []; + term.trim().split(/\s+/).forEach(function(w, index, array) { + var tokens = w.split(/(?=[A-Z,.()<>?[\/])/); + for (var i = 0; i < tokens.length; i++) { + var s = tokens[i]; + // ',' and '?' are the only delimiters commonly followed by space in java signatures + pattern += "(" + $.ui.autocomplete.escapeRegex(s).replace(/[,?]/g, "$&\\s*?") + ")"; + upperCase.push(false); + var isWordToken = /\w$/.test(s); + if (isWordToken) { + if (i === tokens.length - 1 && index < array.length - 1) { + // space in query string matches all delimiters + pattern += "(.*?)"; + upperCase.push(isUpperCase(s[0])); + } else { + if (!camelCase && isUpperCase(s) && s.length === 1) { + pattern += "()"; + } else { + pattern += "([a-z0-9$<>?[\\]]*?)"; + } + upperCase.push(isUpperCase(s[0])); + } + } else { + pattern += "()"; + upperCase.push(false); + } + } + }); + var re = new RegExp(pattern, "gi"); + re.upperCase = upperCase; + return re; +} +function findMatch(matcher, input, startOfName, endOfName) { + var from = startOfName; + matcher.lastIndex = from; + var match = matcher.exec(input); + // Expand search area until we get a valid result or reach the beginning of the string + while (!match || match.index + match[0].length < startOfName || endOfName < match.index) { + if (from === 0) { + return NO_MATCH; + } + from = input.lastIndexOf(".", from - 2) + 1; + matcher.lastIndex = from; + match = matcher.exec(input); + } + var boundaries = []; + var matchEnd = match.index + match[0].length; + var score = 5; + var start = match.index; + var prevEnd = -1; + for (var i = 1; i < match.length; i += 2) { + var isUpper = isUpperCase(input[start]); + var isMatcherUpper = matcher.upperCase[i]; + // capturing groups come in pairs, match and non-match + boundaries.push(start, start + match[i].length); + // make sure groups are anchored on a left word boundary + var prevChar = input[start - 1] || ""; + var nextChar = input[start + 1] || ""; + if (start !== 0 && !/[\W_]/.test(prevChar) && !/[\W_]/.test(input[start])) { + if (isUpper && (isLowerCase(prevChar) || isLowerCase(nextChar))) { + score -= 0.1; + } else if (isMatcherUpper && start === prevEnd) { + score -= isUpper ? 0.1 : 1.0; + } else { + return NO_MATCH; + } + } + prevEnd = start + match[i].length; + start += match[i].length + match[i + 1].length; + + // lower score for parts of the name that are missing + if (match[i + 1] && prevEnd < endOfName) { + score -= rateNoise(match[i + 1]); + } + } + // lower score if a type name contains unmatched camel-case parts + if (input[matchEnd - 1] !== "." && endOfName > matchEnd) + score -= rateNoise(input.slice(matchEnd, endOfName)); + score -= rateNoise(input.slice(0, Math.max(startOfName, match.index))); + + if (score <= 0) { + return NO_MATCH; + } + return { + input: input, + score: score, + boundaries: boundaries + }; +} +function isUpperCase(s) { + return s !== s.toLowerCase(); +} +function isLowerCase(s) { + return s !== s.toUpperCase(); +} +function rateNoise(str) { + return (str.match(/([.(])/g) || []).length / 5 + + (str.match(/([A-Z]+)/g) || []).length / 10 + + str.length / 20; +} +function doSearch(request, response) { + var term = request.term.trim(); + var maxResults = request.maxResults || MAX_RESULTS; + if (term.length === 0) { + return this.close(); + } + var matcher = { + plainMatcher: createMatcher(term, false), + camelCaseMatcher: createMatcher(term, true) + } + var indexLoaded = indexFilesLoaded(); + + function getPrefix(item, category) { + switch (category) { + case "packages": + return checkUnnamed(item.m, "/"); + case "types": + return checkUnnamed(item.p, "."); + case "members": + return checkUnnamed(item.p, ".") + item.c + "."; + default: + return ""; + } + } + function useQualifiedName(category) { + switch (category) { + case "packages": + return /[\s/]/.test(term); + case "types": + case "members": + return /[\s.]/.test(term); + default: + return false; + } + } + function searchIndex(indexArray, category) { + var matches = []; + if (!indexArray) { + if (!indexLoaded) { + matches.push({ l: messages.loading, category: category }); + } + return matches; + } + $.each(indexArray, function (i, item) { + var prefix = getPrefix(item, category); + var simpleName = item.l; + var qualifiedName = prefix + simpleName; + var useQualified = useQualifiedName(category); + var input = useQualified ? qualifiedName : simpleName; + var startOfName = useQualified ? prefix.length : 0; + var endOfName = category === "members" && input.indexOf("(", startOfName) > -1 + ? input.indexOf("(", startOfName) : input.length; + var m = findMatch(matcher.plainMatcher, input, startOfName, endOfName); + if (m === NO_MATCH && matcher.camelCaseMatcher) { + m = findMatch(matcher.camelCaseMatcher, input, startOfName, endOfName); + } + if (m !== NO_MATCH) { + m.indexItem = item; + m.prefix = prefix; + m.category = category; + if (!useQualified) { + m.input = qualifiedName; + m.boundaries = m.boundaries.map(function(b) { + return b + prefix.length; + }); + } + matches.push(m); + } + return true; + }); + return matches.sort(function(e1, e2) { + return e2.score - e1.score; + }).slice(0, maxResults); + } + + var result = searchIndex(moduleSearchIndex, "modules") + .concat(searchIndex(packageSearchIndex, "packages")) + .concat(searchIndex(typeSearchIndex, "types")) + .concat(searchIndex(memberSearchIndex, "members")) + .concat(searchIndex(tagSearchIndex, "searchTags")); + + if (!indexLoaded) { + updateSearchResults = function() { + doSearch(request, response); + } + } else { + updateSearchResults = function() {}; + } + response(result); +} +// JQuery search menu implementation +$.widget("custom.catcomplete", $.ui.autocomplete, { + _create: function() { + this._super(); + this.widget().menu("option", "items", "> .result-item"); + // workaround for search result scrolling + this.menu._scrollIntoView = function _scrollIntoView( item ) { + var borderTop, paddingTop, offset, scroll, elementHeight, itemHeight; + if ( this._hasScroll() ) { + borderTop = parseFloat( $.css( this.activeMenu[ 0 ], "borderTopWidth" ) ) || 0; + paddingTop = parseFloat( $.css( this.activeMenu[ 0 ], "paddingTop" ) ) || 0; + offset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop; + scroll = this.activeMenu.scrollTop(); + elementHeight = this.activeMenu.height() - 26; + itemHeight = item.outerHeight(); + + if ( offset < 0 ) { + this.activeMenu.scrollTop( scroll + offset ); + } else if ( offset + itemHeight > elementHeight ) { + this.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight ); + } + } + }; + }, + _renderMenu: function(ul, items) { + var currentCategory = ""; + var widget = this; + widget.menu.bindings = $(); + $.each(items, function(index, item) { + if (item.category && item.category !== currentCategory) { + ul.append("
                    • " + categories[item.category] + "
                    • "); + currentCategory = item.category; + } + var li = widget._renderItemData(ul, item); + if (item.category) { + li.attr("aria-label", categories[item.category] + " : " + item.l); + } else { + li.attr("aria-label", item.l); + } + li.attr("class", "result-item"); + }); + ul.append(""); + }, + _renderItem: function(ul, item) { + var li = $("
                    • ").appendTo(ul); + var div = $("
                      ").appendTo(li); + var label = item.l + ? item.l + : getHighlightedText(item.input, item.boundaries, 0, item.input.length); + var idx = item.indexItem; + if (item.category === "searchTags" && idx && idx.h) { + if (idx.d) { + div.html(label + " (" + idx.h + ")
                      " + + idx.d + "
                      "); + } else { + div.html(label + " (" + idx.h + ")"); + } + } else { + div.html(label); + } + return li; + } +}); +$(function() { + var expanded = false; + var windowWidth; + function collapse() { + if (expanded) { + $("div#navbar-top").removeAttr("style"); + $("button#navbar-toggle-button") + .removeClass("expanded") + .attr("aria-expanded", "false"); + expanded = false; + } + } + $("button#navbar-toggle-button").click(function (e) { + if (expanded) { + collapse(); + } else { + var navbar = $("div#navbar-top"); + navbar.height(navbar.prop("scrollHeight")); + $("button#navbar-toggle-button") + .addClass("expanded") + .attr("aria-expanded", "true"); + expanded = true; + windowWidth = window.innerWidth; + } + }); + $("ul.sub-nav-list-small li a").click(collapse); + $("input#search-input").focus(collapse); + $("main").click(collapse); + $("section[id] > :header, :header[id], :header:has(a[id])").each(function(idx, el) { + // Create anchor links for headers with an associated id attribute + var hdr = $(el); + var id = hdr.attr("id") || hdr.parent("section").attr("id") || hdr.children("a").attr("id"); + if (id) { + hdr.append(" " + messages.linkIcon +""); + } + }); + $(window).on("orientationchange", collapse).on("resize", function(e) { + if (expanded && windowWidth !== window.innerWidth) collapse(); + }); + var search = $("#search-input"); + var reset = $("#reset-button"); + search.catcomplete({ + minLength: 1, + delay: 200, + source: doSearch, + response: function(event, ui) { + if (!ui.content.length) { + ui.content.push({ l: messages.noResult }); + } else { + $("#search-input").empty(); + } + }, + autoFocus: true, + focus: function(event, ui) { + return false; + }, + position: { + collision: "flip" + }, + select: function(event, ui) { + if (ui.item.indexItem) { + var url = getURL(ui.item.indexItem, ui.item.category); + window.location.href = pathtoroot + url; + $("#search-input").focus(); + } + } + }); + search.val(''); + search.prop("disabled", false); + reset.prop("disabled", false); + reset.click(function() { + search.val('').focus(); + }); + search.focus(); +}); diff --git a/docs/serialized-form.html b/docs/serialized-form.html new file mode 100644 index 0000000..f052970 --- /dev/null +++ b/docs/serialized-form.html @@ -0,0 +1,117 @@ + + + + +Serialized Form (DigitalTwinAPI 3.0.0 API) + + + + + + + + + + + + + + +
                      + +
                      +
                      +
                      +

                      Serialized Form

                      +
                      + +
                      +
                      +
                      + +
                      +
                      +
                      + + diff --git a/docs/stylesheet.css b/docs/stylesheet.css new file mode 100644 index 0000000..f71489f --- /dev/null +++ b/docs/stylesheet.css @@ -0,0 +1,1272 @@ +/* + * Javadoc style sheet + */ + +@import url('resources/fonts/dejavu.css'); + +/* + * These CSS custom properties (variables) define the core color and font + * properties used in this stylesheet. + */ +:root { + /* body, block and code fonts */ + --body-font-family: 'DejaVu Sans', Arial, Helvetica, sans-serif; + --block-font-family: 'DejaVu Serif', Georgia, "Times New Roman", Times, serif; + --code-font-family: 'DejaVu Sans Mono', monospace; + /* Base font sizes for body and code elements */ + --body-font-size: 14px; + --code-font-size: 14px; + /* Text colors for body and block elements */ + --body-text-color: #353833; + --block-text-color: #474747; + /* Background colors for various structural elements */ + --body-background-color: #ffffff; + --section-background-color: #f8f8f8; + --detail-background-color: #ffffff; + /* Colors for navigation bar and table captions */ + --navbar-background-color: #4D7A97; + --navbar-text-color: #ffffff; + /* Background color for subnavigation and various headers */ + --subnav-background-color: #dee3e9; + /* Background and text colors for selected tabs and navigation items */ + --selected-background-color: #f8981d; + --selected-text-color: #253441; + --selected-link-color: #1f389c; + /* Background colors for generated tables */ + --even-row-color: #ffffff; + --odd-row-color: #eeeeef; + /* Text color for page title */ + --title-color: #2c4557; + /* Text colors for links */ + --link-color: #4A6782; + --link-color-active: #bb7a2a; + /* Snippet colors */ + --snippet-background-color: #ebecee; + --snippet-text-color: var(--block-text-color); + --snippet-highlight-color: #f7c590; + /* Border colors for structural elements and user defined tables */ + --border-color: #ededed; + --table-border-color: #000000; + /* Search input colors */ + --search-input-background-color: #ffffff; + --search-input-text-color: #000000; + --search-input-placeholder-color: #909090; + /* Highlight color for active search tag target */ + --search-tag-highlight-color: #ffff00; + /* Adjustments for icon and active background colors of copy-to-clipboard buttons */ + --copy-icon-brightness: 100%; + --copy-button-background-color-active: rgba(168, 168, 176, 0.3); + /* Colors for invalid tag notifications */ + --invalid-tag-background-color: #ffe6e6; + --invalid-tag-text-color: #000000; +} +/* + * Styles for individual HTML elements. + * + * These are styles that are specific to individual HTML elements. Changing them affects the style of a particular + * HTML element throughout the page. + */ +body { + background-color:var(--body-background-color); + color:var(--body-text-color); + font-family:var(--body-font-family); + font-size:var(--body-font-size); + margin:0; + padding:0; + height:100%; + width:100%; +} +iframe { + margin:0; + padding:0; + height:100%; + width:100%; + overflow-y:scroll; + border:none; +} +a:link, a:visited { + text-decoration:none; + color:var(--link-color); +} +a[href]:hover, a[href]:focus { + text-decoration:none; + color:var(--link-color-active); +} +pre { + font-family:var(--code-font-family); + font-size:1em; +} +h1 { + font-size:1.428em; +} +h2 { + font-size:1.285em; +} +h3 { + font-size:1.14em; +} +h4 { + font-size:1.072em; +} +h5 { + font-size:1.001em; +} +h6 { + font-size:0.93em; +} +/* Disable font boosting for selected elements */ +h1, h2, h3, h4, h5, h6, div.member-signature { + max-height: 1000em; +} +ul { + list-style-type:disc; +} +code, tt { + font-family:var(--code-font-family); +} +:not(h1, h2, h3, h4, h5, h6) > code, +:not(h1, h2, h3, h4, h5, h6) > tt { + font-size:var(--code-font-size); + padding-top:4px; + margin-top:8px; + line-height:1.4em; +} +dt code { + font-family:var(--code-font-family); + font-size:1em; + padding-top:4px; +} +.summary-table dt code { + font-family:var(--code-font-family); + font-size:1em; + vertical-align:top; + padding-top:4px; +} +sup { + font-size:8px; +} +button { + font-family: var(--body-font-family); + font-size: 1em; +} +/* + * Styles for HTML generated by javadoc. + * + * These are style classes that are used by the standard doclet to generate HTML documentation. + */ + +/* + * Styles for document title and copyright. + */ +.about-language { + float:right; + padding:0 21px 8px 8px; + font-size:0.915em; + margin-top:-9px; + height:2.9em; +} +.legal-copy { + margin-left:.5em; +} +/* + * Styles for navigation bar. + */ +@media screen { + div.flex-box { + position:fixed; + display:flex; + flex-direction:column; + height: 100%; + width: 100%; + } + header.flex-header { + flex: 0 0 auto; + } + div.flex-content { + flex: 1 1 auto; + overflow-y: auto; + } +} +.top-nav { + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + float:left; + width:100%; + clear:right; + min-height:2.8em; + padding:10px 0 0 0; + overflow:hidden; + font-size:0.857em; +} +button#navbar-toggle-button { + display:none; +} +ul.sub-nav-list-small { + display: none; +} +.sub-nav { + background-color:var(--subnav-background-color); + float:left; + width:100%; + overflow:hidden; + font-size:0.857em; +} +.sub-nav div { + clear:left; + float:left; + padding:6px; + text-transform:uppercase; +} +.sub-nav .sub-nav-list { + padding-top:4px; +} +ul.nav-list { + display:block; + margin:0 25px 0 0; + padding:0; +} +ul.sub-nav-list { + float:left; + margin:0 25px 0 0; + padding:0; +} +ul.nav-list li { + list-style:none; + float:left; + padding: 5px 6px; + text-transform:uppercase; +} +.sub-nav .nav-list-search { + float:right; + margin:0; + padding:6px; + clear:none; + text-align:right; + position:relative; +} +ul.sub-nav-list li { + list-style:none; + float:left; +} +.top-nav a:link, .top-nav a:active, .top-nav a:visited { + color:var(--navbar-text-color); + text-decoration:none; + text-transform:uppercase; +} +.top-nav a:hover { + color:var(--link-color-active); +} +.nav-bar-cell1-rev { + background-color:var(--selected-background-color); + color:var(--selected-text-color); + margin: auto 5px; +} +.skip-nav { + position:absolute; + top:auto; + left:-9999px; + overflow:hidden; +} +/* + * Hide navigation links and search box in print layout + */ +@media print { + ul.nav-list, div.sub-nav { + display:none; + } +} +/* + * Styles for page header. + */ +.title { + color:var(--title-color); + margin:10px 0; +} +.sub-title { + margin:5px 0 0 0; +} +ul.contents-list { + margin: 0 0 15px 0; + padding: 0; + list-style: none; +} +ul.contents-list li { + font-size:0.93em; +} +/* + * Styles for headings. + */ +body.class-declaration-page .summary h2, +body.class-declaration-page .details h2, +body.class-use-page h2, +body.module-declaration-page .block-list h2 { + font-style: italic; + padding:0; + margin:15px 0; +} +body.class-declaration-page .summary h3, +body.class-declaration-page .details h3, +body.class-declaration-page .summary .inherited-list h2 { + background-color:var(--subnav-background-color); + border:1px solid var(--border-color); + margin:0 0 6px -8px; + padding:7px 5px; +} +/* + * Styles for page layout containers. + */ +main { + clear:both; + padding:10px 20px; + position:relative; +} +dl.notes > dt { + font-family: var(--body-font-family); + font-size:0.856em; + font-weight:bold; + margin:10px 0 0 0; + color:var(--body-text-color); +} +dl.notes > dd { + margin:5px 10px 10px 0; + font-size:1em; + font-family:var(--block-font-family) +} +dl.name-value > dt { + margin-left:1px; + font-size:1.1em; + display:inline; + font-weight:bold; +} +dl.name-value > dd { + margin:0 0 0 1px; + font-size:1.1em; + display:inline; +} +/* + * Styles for lists. + */ +li.circle { + list-style:circle; +} +ul.horizontal li { + display:inline; + font-size:0.9em; +} +div.inheritance { + margin:0; + padding:0; +} +div.inheritance div.inheritance { + margin-left:2em; +} +ul.block-list, +ul.details-list, +ul.member-list, +ul.summary-list { + margin:10px 0 10px 0; + padding:0; +} +ul.block-list > li, +ul.details-list > li, +ul.member-list > li, +ul.summary-list > li { + list-style:none; + margin-bottom:15px; + line-height:1.4; +} +ul.ref-list { + padding:0; + margin:0; +} +ul.ref-list > li { + list-style:none; +} +.summary-table dl, .summary-table dl dt, .summary-table dl dd { + margin-top:0; + margin-bottom:1px; +} +ul.tag-list, ul.tag-list-long { + padding-left: 0; + list-style: none; +} +ul.tag-list li { + display: inline; +} +ul.tag-list li:not(:last-child):after, +ul.tag-list-long li:not(:last-child):after +{ + content: ", "; + white-space: pre-wrap; +} +ul.preview-feature-list { + list-style: none; + margin:0; + padding:0.1em; + line-height: 1.6em; +} +/* + * Styles for tables. + */ +.summary-table, .details-table { + width:100%; + border-spacing:0; + border:1px solid var(--border-color); + border-top:0; + padding:0; +} +.caption { + position:relative; + text-align:left; + background-repeat:no-repeat; + color:var(--selected-text-color); + clear:none; + overflow:hidden; + padding: 10px 0 0 1px; + margin:0; +} +.caption a:link, .caption a:visited { + color:var(--selected-link-color); +} +.caption a:hover, +.caption a:active { + color:var(--navbar-text-color); +} +.caption span { + font-weight:bold; + white-space:nowrap; + padding:5px 12px 7px 12px; + display:inline-block; + float:left; + background-color:var(--selected-background-color); + border: none; + height:16px; +} +div.table-tabs { + padding:10px 0 0 1px; + margin:10px 0 0 0; +} +div.table-tabs > button { + border: none; + cursor: pointer; + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 8px; +} +div.table-tabs > .active-table-tab { + background: var(--selected-background-color); + color: var(--selected-text-color); +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.two-column-search-results { + display: grid; + grid-template-columns: minmax(400px, max-content) minmax(400px, auto); +} +div.checkboxes { + line-height: 2em; +} +div.checkboxes > span { + margin-left: 10px; +} +div.checkboxes > label { + margin-left: 8px; + white-space: nowrap; +} +div.checkboxes > label > input { + margin: 0 2px; +} +.two-column-summary { + display: grid; + grid-template-columns: minmax(25%, max-content) minmax(25%, auto); +} +.three-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(20%, max-content) minmax(20%, auto); +} +.three-column-release-summary { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(10%, max-content) minmax(40%, auto); +} +.four-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(15%, max-content) minmax(15%, max-content) minmax(15%, auto); +} +@media screen and (max-width: 1000px) { + .four-column-summary { + display: grid; + grid-template-columns: minmax(15%, max-content) minmax(15%, auto); + } +} +@media screen and (max-width: 800px) { + .two-column-search-results { + display: grid; + grid-template-columns: minmax(40%, max-content) minmax(40%, auto); + } + .three-column-summary { + display: grid; + grid-template-columns: minmax(10%, max-content) minmax(25%, auto); + } + .three-column-release-summary { + display: grid; + grid-template-columns: minmax(70%, max-content) minmax(30%, max-content) + } + .three-column-summary .col-last, + .three-column-release-summary .col-last{ + grid-column-end: span 2; + } +} +@media screen and (max-width: 600px) { + .two-column-summary { + display: grid; + grid-template-columns: 1fr; + } +} +.summary-table > div, .details-table > div { + text-align:left; + padding: 8px 3px 3px 7px; + overflow-x: auto; + scrollbar-width: thin; +} +.col-first, .col-second, .col-last, .col-constructor-name, .col-summary-item-name { + vertical-align:top; + padding-right:0; + padding-top:8px; + padding-bottom:3px; +} +.table-header { + background:var(--subnav-background-color); + font-weight: bold; +} +/* Sortable table columns */ +.table-header[onclick] { + cursor: pointer; +} +.table-header[onclick]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + '); + background-size:100% 100%; + width:9px; + height:14px; + margin-left:4px; + margin-bottom:-3px; +} +.table-header[onclick].sort-asc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + +} +.table-header[onclick].sort-desc::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +.col-first, .col-first { + font-size:0.93em; +} +.col-second, .col-second, .col-last, .col-constructor-name, .col-summary-item-name, .col-last { + font-size:0.93em; +} +.col-first, .col-second, .col-constructor-name { + vertical-align:top; + overflow: auto; +} +.col-last { + white-space:normal; +} +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-first a:link, .col-first a:visited, +.col-second a:link, .col-second a:visited, +.col-constructor-name a:link, .col-constructor-name a:visited, +.col-summary-item-name a:link, .col-summary-item-name a:visited { + font-weight:bold; +} +.even-row-color, .even-row-color .table-header { + background-color:var(--even-row-color); +} +.odd-row-color, .odd-row-color .table-header { + background-color:var(--odd-row-color); +} +/* + * Styles for contents. + */ +div.block { + font-size:var(--body-font-size); + font-family:var(--block-font-family); +} +.col-last div { + padding-top:0; +} +.col-last a { + padding-bottom:3px; +} +.module-signature, +.package-signature, +.type-signature, +.member-signature { + font-family:var(--code-font-family); + font-size:1em; + margin:14px 0; + white-space: pre-wrap; +} +.module-signature, +.package-signature, +.type-signature { + margin-top: 0; +} +.member-signature .type-parameters-long, +.member-signature .parameters, +.member-signature .exceptions { + display: inline-block; + vertical-align: top; + white-space: pre; +} +.member-signature .type-parameters { + white-space: normal; +} +/* + * Styles for formatting effect. + */ +.source-line-no { + /* Color of line numbers in source pages can be set via custom property below */ + color:var(--source-linenumber-color, green); + padding:0 30px 0 0; +} +.block { + display:block; + margin:0 10px 5px 0; + color:var(--block-text-color); +} +.deprecated-label, .description-from-type-label, .implementation-label, .member-name-link, +.module-label-in-package, .module-label-in-type, .package-label-in-type, +.package-hierarchy-label, .type-name-label, .type-name-link, .search-tag-link, .preview-label { + font-weight:bold; +} +.deprecation-comment, .help-footnote, .preview-comment { + font-style:italic; +} +.deprecation-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +.preview-block { + font-size:1em; + font-family:var(--block-font-family); + border-style:solid; + border-width:thin; + border-radius:10px; + padding:10px; + margin-bottom:10px; + margin-right:10px; + display:inline-block; +} +div.block div.deprecation-comment { + font-style:normal; +} +details.invalid-tag, span.invalid-tag { + font-size:1em; + font-family:var(--block-font-family); + color: var(--invalid-tag-text-color); + background: var(--invalid-tag-background-color); + border: thin solid var(--table-border-color); + border-radius:2px; + padding: 2px 4px; + display:inline-block; +} +details summary { + cursor: pointer; +} +/* + * Styles specific to HTML5 elements. + */ +main, nav, header, footer, section { + display:block; +} +/* + * Styles for javadoc search. + */ +.ui-state-active { + /* Overrides the color of selection used in jQuery UI */ + background: var(--selected-background-color); + border: 1px solid var(--selected-background-color); + color: var(--selected-text-color); +} +.ui-autocomplete-category { + font-weight:bold; + font-size:15px; + padding:7px 0 7px 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); +} +.ui-autocomplete { + max-height:85%; + max-width:65%; + overflow-y:auto; + overflow-x:auto; + scrollbar-width: thin; + white-space:nowrap; + box-shadow: 0 3px 6px rgba(0,0,0,0.16), 0 3px 6px rgba(0,0,0,0.23); +} +ul.ui-autocomplete { + position:fixed; + z-index:1; + background-color: var(--body-background-color); +} +ul.ui-autocomplete li { + float:left; + clear:both; + min-width:100%; +} +ul.ui-autocomplete li.ui-static-link { + position:sticky; + bottom:0; + left:0; + background: var(--subnav-background-color); + padding: 5px 0; + font-family: var(--body-font-family); + font-size: 0.93em; + font-weight: bolder; + z-index: 2; +} +li.ui-static-link a, li.ui-static-link a:visited { + text-decoration:none; + color:var(--link-color); + float:right; + margin-right:20px; +} +.ui-autocomplete .result-item { + font-size: inherit; +} +.ui-autocomplete .result-highlight { + font-weight:bold; +} +#search-input, #page-search-input { + background-image:url('resources/glass.png'); + background-size:13px; + background-repeat:no-repeat; + background-position:2px 3px; + background-color: var(--search-input-background-color); + color: var(--search-input-text-color); + border-color: var(--border-color); + padding-left:20px; + width: 250px; + margin: 0; +} +#search-input { + margin-left: 4px; +} +#reset-button { + background-color: transparent; + background-image:url('resources/x.png'); + background-repeat:no-repeat; + background-size:contain; + border:0; + border-radius:0; + width:12px; + height:12px; + position:absolute; + right:12px; + top:10px; + font-size:0; +} +::placeholder { + color:var(--search-input-placeholder-color); + opacity: 1; +} +.search-tag-desc-result { + font-style:italic; + font-size:11px; +} +.search-tag-holder-result { + font-style:italic; + font-size:12px; +} +.search-tag-result:target { + background-color:var(--search-tag-highlight-color); +} +details.page-search-details { + display: inline-block; +} +div#result-container { + font-size: 1em; +} +div#result-container a.search-result-link { + padding: 0; + margin: 4px 0; + width: 100%; +} +#result-container .result-highlight { + font-weight:bolder; +} +.page-search-info { + background-color: var(--subnav-background-color); + border-radius: 3px; + border: 0 solid var(--border-color); + padding: 0 8px; + overflow: hidden; + height: 0; + transition: all 0.2s ease; +} +div.table-tabs > button.table-tab { + background: var(--navbar-background-color); + color: var(--navbar-text-color); +} +.page-search-header { + padding: 5px 12px 7px 12px; + font-weight: bold; + margin-right: 3px; + background-color:var(--navbar-background-color); + color:var(--navbar-text-color); + display: inline-block; +} +button.page-search-header { + border: none; + cursor: pointer; +} +span#page-search-link { + text-decoration: underline; +} +.module-graph span, .sealed-graph span { + display:none; + position:absolute; +} +.module-graph:hover span, .sealed-graph:hover span { + display:block; + margin: -100px 0 0 100px; + z-index: 1; +} +.inherited-list { + margin: 10px 0 10px 0; +} +section.class-description { + line-height: 1.4; +} +.summary section[class$="-summary"], .details section[class$="-details"], +.class-uses .detail, .serialized-class-details { + padding: 0 20px 5px 10px; + border: 1px solid var(--border-color); + background-color: var(--section-background-color); +} +.inherited-list, section[class$="-details"] .detail { + padding:0 0 5px 8px; + background-color:var(--detail-background-color); + border:none; +} +.vertical-separator { + padding: 0 5px; +} +ul.help-section-list { + margin: 0; +} +ul.help-subtoc > li { + display: inline-block; + padding-right: 5px; + font-size: smaller; +} +ul.help-subtoc > li::before { + content: "\2022" ; + padding-right:2px; +} +.help-note { + font-style: italic; +} +/* + * Indicator icon for external links. + */ +main a[href*="://"]::after { + content:""; + display:inline-block; + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); + background-size:100% 100%; + width:7px; + height:7px; + margin-left:2px; + margin-bottom:4px; +} +main a[href*="://"]:hover::after, +main a[href*="://"]:focus::after { + background-image:url('data:image/svg+xml; utf8, \ + \ + \ + '); +} +/* + * Styles for header/section anchor links + */ +a.anchor-link { + opacity: 0; + transition: opacity 0.1s; +} +:hover > a.anchor-link { + opacity: 80%; +} +a.anchor-link:hover, +a.anchor-link:focus-visible, +a.anchor-link.visible { + opacity: 100%; +} +a.anchor-link > img { + width: 0.9em; + height: 0.9em; +} +/* + * Styles for copy-to-clipboard buttons + */ +button.copy { + opacity: 70%; + border: none; + border-radius: 3px; + position: relative; + background:none; + transition: opacity 0.3s; + cursor: pointer; +} +:hover > button.copy { + opacity: 80%; +} +button.copy:hover, +button.copy:active, +button.copy:focus-visible, +button.copy.visible { + opacity: 100%; +} +button.copy img { + position: relative; + background: none; + filter: brightness(var(--copy-icon-brightness)); +} +button.copy:active { + background-color: var(--copy-button-background-color-active); +} +button.copy span { + color: var(--body-text-color); + position: relative; + top: -0.1em; + transition: all 0.1s; + font-size: 0.76rem; + line-height: 1.2em; + opacity: 0; +} +button.copy:hover span, +button.copy:focus-visible span, +button.copy.visible span { + opacity: 100%; +} +/* search page copy button */ +button#page-search-copy { + margin-left: 0.4em; + padding:0.3em; + top:0.13em; +} +button#page-search-copy img { + width: 1.2em; + height: 1.2em; + padding: 0.01em 0; + top: 0.15em; +} +button#page-search-copy span { + color: var(--body-text-color); + line-height: 1.2em; + padding: 0.2em; + top: -0.18em; +} +div.page-search-info:hover button#page-search-copy span { + opacity: 100%; +} +/* snippet copy button */ +button.snippet-copy { + position: absolute; + top: 6px; + right: 6px; + height: 1.7em; + padding: 2px; +} +button.snippet-copy img { + width: 18px; + height: 18px; + padding: 0.05em 0; +} +button.snippet-copy span { + line-height: 1.2em; + padding: 0.2em; + position: relative; + top: -0.5em; +} +div.snippet-container:hover button.snippet-copy span { + opacity: 100%; +} +/* + * Styles for user-provided tables. + * + * borderless: + * No borders, vertical margins, styled caption. + * This style is provided for use with existing doc comments. + * In general, borderless tables should not be used for layout purposes. + * + * plain: + * Plain borders around table and cells, vertical margins, styled caption. + * Best for small tables or for complex tables for tables with cells that span + * rows and columns, when the "striped" style does not work well. + * + * striped: + * Borders around the table and vertical borders between cells, striped rows, + * vertical margins, styled caption. + * Best for tables that have a header row, and a body containing a series of simple rows. + */ + +table.borderless, +table.plain, +table.striped { + margin-top: 10px; + margin-bottom: 10px; +} +table.borderless > caption, +table.plain > caption, +table.striped > caption { + font-weight: bold; + font-size: smaller; +} +table.borderless th, table.borderless td, +table.plain th, table.plain td, +table.striped th, table.striped td { + padding: 2px 5px; +} +table.borderless, +table.borderless > thead > tr > th, table.borderless > tbody > tr > th, table.borderless > tr > th, +table.borderless > thead > tr > td, table.borderless > tbody > tr > td, table.borderless > tr > td { + border: none; +} +table.borderless > thead > tr, table.borderless > tbody > tr, table.borderless > tr { + background-color: transparent; +} +table.plain { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.plain > thead > tr, table.plain > tbody tr, table.plain > tr { + background-color: transparent; +} +table.plain > thead > tr > th, table.plain > tbody > tr > th, table.plain > tr > th, +table.plain > thead > tr > td, table.plain > tbody > tr > td, table.plain > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped { + border-collapse: collapse; + border: 1px solid var(--table-border-color); +} +table.striped > thead { + background-color: var(--subnav-background-color); +} +table.striped > thead > tr > th, table.striped > thead > tr > td { + border: 1px solid var(--table-border-color); +} +table.striped > tbody > tr:nth-child(even) { + background-color: var(--odd-row-color) +} +table.striped > tbody > tr:nth-child(odd) { + background-color: var(--even-row-color) +} +table.striped > tbody > tr > th, table.striped > tbody > tr > td { + border-left: 1px solid var(--table-border-color); + border-right: 1px solid var(--table-border-color); +} +table.striped > tbody > tr > th { + font-weight: normal; +} +/** + * Tweak style for small screens. + */ +@media screen and (max-width: 920px) { + header.flex-header { + max-height: 100vh; + overflow-y: auto; + } + div#navbar-top { + height: 2.8em; + transition: height 0.35s ease; + } + ul.nav-list { + display: block; + width: 40%; + float:left; + clear: left; + margin: 10px 0 0 0; + padding: 0; + } + ul.nav-list li { + float: none; + padding: 6px; + margin-left: 10px; + margin-top: 2px; + } + ul.sub-nav-list-small { + display:block; + height: 100%; + width: 50%; + float: right; + clear: right; + background-color: var(--subnav-background-color); + color: var(--body-text-color); + margin: 6px 0 0 0; + padding: 0; + } + ul.sub-nav-list-small ul { + padding-left: 20px; + } + ul.sub-nav-list-small a:link, ul.sub-nav-list-small a:visited { + color:var(--link-color); + } + ul.sub-nav-list-small a:hover { + color:var(--link-color-active); + } + ul.sub-nav-list-small li { + list-style:none; + float:none; + padding: 6px; + margin-top: 1px; + text-transform:uppercase; + } + ul.sub-nav-list-small > li { + margin-left: 10px; + } + ul.sub-nav-list-small li p { + margin: 5px 0; + } + div#navbar-sub-list { + display: none; + } + .top-nav a:link, .top-nav a:active, .top-nav a:visited { + display: block; + } + button#navbar-toggle-button { + width: 3.4em; + height: 2.8em; + background-color: transparent; + display: block; + float: left; + border: 0; + margin: 0 10px; + cursor: pointer; + font-size: 10px; + } + button#navbar-toggle-button .nav-bar-toggle-icon { + display: block; + width: 24px; + height: 3px; + margin: 1px 0 4px 0; + border-radius: 2px; + transition: all 0.1s; + background-color: var(--navbar-text-color); + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(1) { + transform: rotate(45deg); + transform-origin: 10% 10%; + width: 26px; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(2) { + opacity: 0; + } + button#navbar-toggle-button.expanded span.nav-bar-toggle-icon:nth-child(3) { + transform: rotate(-45deg); + transform-origin: 10% 90%; + width: 26px; + } +} +@media screen and (max-width: 800px) { + .about-language { + padding-right: 16px; + } + ul.nav-list li { + margin-left: 5px; + } + ul.sub-nav-list-small > li { + margin-left: 5px; + } + main { + padding: 10px; + } + .summary section[class$="-summary"], .details section[class$="-details"], + .class-uses .detail, .serialized-class-details { + padding: 0 8px 5px 8px; + } + body { + -webkit-text-size-adjust: none; + } +} +@media screen and (max-width: 400px) { + .about-language { + font-size: 10px; + padding-right: 12px; + } +} +@media screen and (max-width: 400px) { + .nav-list-search { + width: 94%; + } + #search-input, #page-search-input { + width: 70%; + } +} +@media screen and (max-width: 320px) { + .nav-list-search > label { + display: none; + } + .nav-list-search { + width: 90%; + } + #search-input, #page-search-input { + width: 80%; + } +} + +pre.snippet { + background-color: var(--snippet-background-color); + color: var(--snippet-text-color); + padding: 10px; + margin: 12px 0; + overflow: auto; + white-space: pre; +} +div.snippet-container { + position: relative; +} +@media screen and (max-width: 800px) { + pre.snippet { + padding-top: 26px; + } + button.snippet-copy { + top: 4px; + right: 4px; + } +} +pre.snippet .italic { + font-style: italic; +} +pre.snippet .bold { + font-weight: bold; +} +pre.snippet .highlighted { + background-color: var(--snippet-highlight-color); + border-radius: 10%; +} diff --git a/docs/tag-search-index.js b/docs/tag-search-index.js new file mode 100644 index 0000000..f38b3cb --- /dev/null +++ b/docs/tag-search-index.js @@ -0,0 +1 @@ +tagSearchIndex = [{"l":"Serialized Form","h":"","u":"serialized-form.html"}];updateSearchResults(); \ No newline at end of file diff --git a/docs/type-search-index.js b/docs/type-search-index.js new file mode 100644 index 0000000..dcf3056 --- /dev/null +++ b/docs/type-search-index.js @@ -0,0 +1 @@ +typeSearchIndex = [{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"AlertMessage"},{"l":"All Classes and Interfaces","u":"allclasses-index.html"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"AzureDigitalTwinsProvider"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"CacheOperationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"CacheResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"CreateResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"DeleteResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"DigitalTwinBase"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"InitContext"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"InitSimulationContext"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"LogMessage"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"MessageProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"ProcessingContext"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"ProcessingResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"SendingResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"SharedData"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"SimulationController"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationEventResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"SimulationProcessor"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"SimulationStatus"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"SimulationStep"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"TimerActionResult"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"TimerHandler"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"TimerMetadata"},{"p":"com.scaleoutsoftware.digitaltwin.abstractions","l":"TimerType"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"Workbench"},{"p":"com.scaleoutsoftware.digitaltwin.development","l":"WorkbenchException"}];updateSearchResults(); \ No newline at end of file From d8fc69e5999c61e1e8ff2763980442248e80e1ff Mon Sep 17 00:00:00 2001 From: Brandon Date: Fri, 15 May 2026 14:31:36 -0700 Subject: [PATCH 35/35] Update pom Adding developer and project details --- Abstractions/pom.xml | 31 ++++++++++++++++++++++++++++++- Development/pom.xml | 31 ++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/Abstractions/pom.xml b/Abstractions/pom.xml index d48fe60..bbad931 100644 --- a/Abstractions/pom.xml +++ b/Abstractions/pom.xml @@ -7,7 +7,36 @@ com.scaleoutsoftware.digitaltwin digitaltwin-abstractions 3.0.0 - + 2021 + https://scaleoutsoftware.com + Digital Twin Core API + Core API for building real-time and simulated digital twins. + + + scaleoutdev + ScaleOut Dev + dev@scaleoutsoftware.com + https://scaleoutsoftware.com + ScaleOut Software, Inc. + https://scaleoutsoftware.com + + developer + engineer + + America/Los_Angeles + + + + + Apache License 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + Apache License 2.0 + + + + https://github.com/scaleoutsoftware/JavaDigitalTwinCore + UTF-8 diff --git a/Development/pom.xml b/Development/pom.xml index ec1c9fa..3903d52 100644 --- a/Development/pom.xml +++ b/Development/pom.xml @@ -7,7 +7,36 @@ com.scaleoutsoftware.digitaltwin digitaltwin-development 3.0.0 - + 2021 + https://scaleoutsoftware.com + Digital Twin Core API + Development/Workbench API for testing ScaleOut real-time and simulated digital twins. + + + scaleoutdev + ScaleOut Dev + dev@scaleoutsoftware.com + https://scaleoutsoftware.com + ScaleOut Software, Inc. + https://scaleoutsoftware.com + + developer + engineer + + America/Los_Angeles + + + + + Apache License 2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + Apache License 2.0 + + + + https://github.com/scaleoutsoftware/JavaDigitalTwinCore + 8 8