Skip to content

Commit 3d51963

Browse files
feat: implement actuator discovery in digital twin environment
1 parent 7f92ded commit 3d51963

File tree

1 file changed

+24
-1
lines changed

1 file changed

+24
-1
lines changed

src/env/infrastructure/digitaltwins/DigitalTwinManager.java

+24-1
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@
1515
import com.azure.identity.DefaultAzureCredentialBuilder;
1616
import com.google.gson.Gson;
1717
import com.google.gson.JsonObject;
18+
import entity.actuator.ActuatorID;
19+
import entity.actuator.ActuatorType;
1820
import entity.medicaltechnology.MedicalTechnology;
1921
import entity.medicaltechnology.MedicalTechnologyID;
2022
import entity.room.RoomID;
23+
import infrastructure.digitaltwins.adtpresentation.ActuatorAdtPresentation;
2124
import infrastructure.digitaltwins.adtpresentation.MedicalTechnologyAdtPresentation;
25+
import usecase.repository.ActuatorRepository;
2226
import usecase.repository.MedicalTechnologyRepository;
2327

2428
import java.util.Objects;
@@ -29,7 +33,7 @@
2933
/**
3034
* Digital Twin Manager that implements the repositories of the application.
3135
*/
32-
public class DigitalTwinManager implements MedicalTechnologyRepository {
36+
public class DigitalTwinManager implements MedicalTechnologyRepository, ActuatorRepository {
3337
private static final String DT_APP_ID_VARIABLE = "AZURE_CLIENT_ID";
3438
private static final String DT_TENANT_VARIABLE = "AZURE_TENANT_ID";
3539
private static final String DT_APP_SECRET_VARIABLE = "AZURE_CLIENT_SECRET";
@@ -82,6 +86,25 @@ public final Optional<MedicalTechnology> findBy(final MedicalTechnologyID medica
8286
});
8387
}
8488

89+
@Override
90+
public final Optional<ActuatorID> findActuatorInRoom(final ActuatorType actuatorType, final RoomID roomID) {
91+
return this.applySafeDigitalTwinOperation(Optional.empty(), client ->
92+
client.query("SELECT TOP(1) CT.$dtId"
93+
+ " FROM DIGITALTWINS T "
94+
+ "JOIN CT RELATED T."
95+
+ ActuatorAdtPresentation.HAS_ACTUATOR_RELATIONSHIP
96+
+ " WHERE T.$dtId = '"
97+
+ roomID.getId()
98+
+ "' AND CT.type = '"
99+
+ ActuatorAdtPresentation.toActuatorDigitalTwinType(actuatorType)
100+
+ "'",
101+
String.class).stream()
102+
.findFirst()
103+
.map(firstResult ->
104+
new ActuatorID(new Gson().fromJson(firstResult, JsonObject.class).get("$dtId").getAsString())
105+
));
106+
}
107+
85108
private <R> R applySafeDigitalTwinOperation(final R defaultResult, final Function<DigitalTwinsClient, R> operation) {
86109
try {
87110
return operation.apply(this.dtClient);

0 commit comments

Comments
 (0)