@Override
public void processData(final String id, final IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> entry, ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap, final ProtoBufRegistry<String, UnitConfig, UnitConfig.Builder> registry) throws CouldNotPerformException, EntryModification {
UnitConfig appUnitConfig = entry.getMessage();
if (!appUnitConfig.hasPlacementConfig()) {
throw new NotAvailableException("agent.placementConfig");
}
if (!appUnitConfig.getPlacementConfig().hasLocationId() || appUnitConfig.getPlacementConfig().getLocationId().isEmpty()) {
throw new NotAvailableException("app.placementConfig.locationId");
}
if (!appUnitConfig.getAppConfig().hasAppClassId() || appUnitConfig.getAppConfig().getAppClassId().isEmpty()) {
throw new NotAvailableException("app.appClassId");
}
Scope newScope = ScopeGenerator.generateAppScope(appUnitConfig, appClassRegistry.get(appUnitConfig.getAppConfig().getAppClassId()).getMessage(), locationRegistry.getMessage(appUnitConfig.getPlacementConfig().getLocationId()));
if (!ScopeGenerator.generateStringRep(appUnitConfig.getScope()).equals(ScopeGenerator.generateStringRep(newScope))) {
if (appMap.containsKey(ScopeGenerator.generateStringRep(newScope))) {
throw new InvalidStateException("Two apps [" + appUnitConfig + "][" + appMap.get(ScopeGenerator.generateStringRep(newScope)) + "] are registered with the same label and location");
} else {
appMap.put(ScopeGenerator.generateStringRep(newScope), appUnitConfig);
entry.setMessage(appUnitConfig.toBuilder().setScope(newScope));
throw new EntryModification(entry, this);
}
}
}