Skip to content

Commit e80ad76

Browse files
authored
fix(msc-integration): preserve the names of existing entities when synchronizing data from MSC (#46)
1 parent 75c47aa commit e80ad76

File tree

1 file changed

+19
-1
lines changed
  • integrations/msc-integration/src/main/java/com/milesight/beaveriot/integration/msc/service

1 file changed

+19
-1
lines changed

integrations/msc-integration/src/main/java/com/milesight/beaveriot/integration/msc/service/MscDeviceService.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,14 @@
3434
import org.springframework.stereotype.Service;
3535

3636
import java.io.IOException;
37+
import java.util.Collection;
3738
import java.util.List;
3839
import java.util.Map;
3940
import java.util.Objects;
4041
import java.util.Optional;
42+
import java.util.function.Function;
43+
import java.util.stream.Collectors;
44+
import java.util.stream.Stream;
4145

4246

4347
@Slf4j
@@ -182,8 +186,22 @@ public Device updateLocalDevice(String identifier, String deviceId, ThingSpec th
182186
addAdditionalEntities(integrationId, deviceKey, entities);
183187

184188
val device = deviceServiceProvider.findByIdentifier(identifier, integrationId);
189+
190+
// keep entity name
191+
val keyToUpdatedEntity = entities.stream().collect(Collectors.toMap(Entity::getKey, Function.identity(), (a, b) -> a));
192+
device.getEntities().stream()
193+
.flatMap(existingEntity -> Optional.ofNullable(existingEntity.getChildren())
194+
.map(Collection::stream)
195+
.map(childrenStream -> Stream.concat(Stream.of(existingEntity), childrenStream))
196+
.orElseGet(() -> Stream.of(existingEntity)))
197+
.forEach(existingEntity -> {
198+
val updatedEntity = keyToUpdatedEntity.get(existingEntity.getKey());
199+
if (updatedEntity != null) {
200+
updatedEntity.setName(existingEntity.getName());
201+
}
202+
});
203+
185204
// update device attributes except name
186-
// device.setIdentifier(identifier);
187205
device.setAdditional(Map.of(MscIntegrationConstants.DeviceAdditionalDataName.DEVICE_ID, deviceId));
188206
device.setEntities(entities);
189207
deviceServiceProvider.save(device);

0 commit comments

Comments
 (0)