DT Engine & DT Instance
Now that we have created the main fundamental element of a DT (Physical Adapter, Shadowing Function and Digital Adapter) we can create Class file with a main to create the WLDT Engine with the created components and start the DT.
Create a new Java file called DemoDigitalTwin adding the following code:
With the following code we now create a new Digital Twin Instance
// Create the new Digital Twin with its Shadowing Function  
DigitalTwin digitalTwin = new DigitalTwin(digitalTwinId, new DemoShadowingFunction());  
  
// Physical Adapter with Configuration  
digitalTwin.addPhysicalAdapter(  
        new DemoPhysicalAdapter(  
                String.format("%s-%s", digitalTwinId, "test-physical-adapter"),  
                new DemoPhysicalAdapterConfiguration(),  
                true));  
  
// Digital Adapter with Configuration  
digitalTwin.addDigitalAdapter(  
        new DemoDigitalAdapter(  
                String.format("%s-%s", digitalTwinId, "test-digital-adapter"),  
                new DemoDigitalAdapterConfiguration())  
);
DTs cannot be directly run but it should be added to the DigitalTwinEngine in order to be executed through the WLDT Library
// Create the Digital Twin Engine
DigitalTwinEngine digitalTwinEngine = new DigitalTwinEngine();  
// Add the Digital Twin to the Engine
digitalTwinEngine.addDigitalTwin(digitalTwin);
In order to start a DT from the Engine you can:
// Directly start when you add it passing a second boolean value = true
digitalTwinEngine.addDigitalTwin(digitalTwin. true);
// Starting the single DT on the engine through its id
digitalTwinEngine.startDigitalTwin(DIGITAL_TWIN_ID);
// Start all the DTs registered on the engine
digitalTwinEngine.startAll();
To stop a single twin or all the twin registered on the engine:
// Stop a single DT on the engine through its id
digitalTwinEngine.stopDigitalTwin(DIGITAL_TWIN_ID);
// Stop all the DTs registered on the engine
digitalTwinEngine.stopAll();
It is also possible to remove a DT from the Engine with a consequent stop if it is active and the deletion of its reference from the engine:
// Remove a single DT on the engine through its id
digitalTwinEngine.removeDigitalTwin(DIGITAL_TWIN_ID);
// Remove all the DTs registered on the engine
digitalTwinEngine.removeAll();
The resulting code in our case is:
public class DemoDigitalTwin {
    public static void main(String[] args)  {
        try{
            // Create the new Digital Twin
            DigitalTwin digitalTwin = new DigitalTwin(
                    "test-dt-id",
                    new DemoShadowingFunction("test-shadowing-function")
            );
            //Default Physical and Digital Adapter
            //digitalTwin.addPhysicalAdapter(new DemoPhysicalAdapter("test-physical-adapter"));
            //digitalTwin.addDigitalAdapter(new DemoDigitalAdapter("test-digital-adapter"));
            //Physical and Digital Adapters with Configuration
            digitalTwin.addPhysicalAdapter(new DemoConfPhysicalAdapter("test-physical-adapter", new DemoPhysicalAdapterConfiguration()));
            digitalTwin.addDigitalAdapter(new DemoConfDigitalAdapter("test-digital-adapter", new DemoDigitalAdapterConfiguration()));
            // Create the Digital Twin Engine
            DigitalTwinEngine digitalTwinEngine = new DigitalTwinEngine();
            // Add the Digital Twin to the Engine
            digitalTwinEngine.addDigitalTwin(digitalTwin);
            // Set a new Event-Logger to a Custom One that we created with the class 'DemoEventLogger'
            WldtEventBus.getInstance().setEventLogger(new DemoEventLogger());
            // Start all the DTs registered on the engine
            digitalTwinEngine.startAll();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}