@Override
public void processData(String id, IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> entry, ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap, ProtoBufRegistry<String, UnitConfig, UnitConfig.Builder> registry) throws CouldNotPerformException, EntryModification {
UnitConfig.Builder dalUnitConfig = entry.getMessage().toBuilder();
boolean modification = false;
UnitConfig unitConfigClone = UnitConfig.newBuilder(dalUnitConfig.build()).build();
if (!dalUnitConfig.hasPlacementConfig()) {
throw new NotAvailableException("placementconfig");
}
if (!dalUnitConfig.getPlacementConfig().hasLocationId() || dalUnitConfig.getPlacementConfig().getLocationId().isEmpty()) {
throw new NotAvailableException("placementconfig.locationid");
}
ScopeType.Scope newScope = ScopeGenerator.generateUnitScope(unitConfigClone, locationRegistry.getMessage((dalUnitConfig.getPlacementConfig().getLocationId())));
if (!ScopeGenerator.generateStringRep(dalUnitConfig.getScope()).equals(ScopeGenerator.generateStringRep(newScope))) {
dalUnitConfig.setScope(newScope);
modification = true;
}
if (unitScopeMap.containsKey(ScopeGenerator.generateStringRep(dalUnitConfig.getScope()))) {
throw new InvalidStateException("Two units with same scope[" + ScopeGenerator.generateStringRep(dalUnitConfig.getScope()) + "]!");
}
unitScopeMap.put(ScopeGenerator.generateStringRep(dalUnitConfig.getScope()), dalUnitConfig.build());
if (modification) {
throw new EntryModification(entry.setMessage(dalUnitConfig), this);
}
}