Esempio n. 1
0
  public static void validateRootLocation(
      final UnitConfig newRootLocation,
      final ProtoBufMessageMap<String, UnitConfig, UnitConfig.Builder> entryMap,
      final ConsistencyHandler consistencyHandler)
      throws CouldNotPerformException, EntryModification {
    try {
      boolean modified = false;
      // detect root location
      IdentifiableMessage<String, UnitConfig, UnitConfig.Builder> detectedRootLocationConfigEntry =
          entryMap.get(newRootLocation.getId());
      UnitConfig.Builder detectedRootLocationConfigBuilder =
          detectedRootLocationConfigEntry.getMessage().toBuilder();

      // verify if root flag is set.
      if (!detectedRootLocationConfigBuilder.getLocationConfig().hasRoot()
          || !detectedRootLocationConfigBuilder.getLocationConfig().getRoot()) {
        detectedRootLocationConfigBuilder.getLocationConfigBuilder().setRoot(true);
        modified = true;
      }

      // verify if placement field is set.
      if (!detectedRootLocationConfigBuilder.hasPlacementConfig()) {
        detectedRootLocationConfigBuilder.setPlacementConfig(
            PlacementConfigType.PlacementConfig.newBuilder());
        modified = true;
      }

      // verify if placement location id is set.
      if (!detectedRootLocationConfigBuilder.getPlacementConfig().hasLocationId()
          || !detectedRootLocationConfigBuilder
              .getPlacementConfig()
              .getLocationId()
              .equals(detectedRootLocationConfigBuilder.getId())) {
        detectedRootLocationConfigBuilder
            .getPlacementConfigBuilder()
            .setLocationId(detectedRootLocationConfigBuilder.getId());
        modified = true;
      }

      if (modified) {
        throw new EntryModification(
            detectedRootLocationConfigEntry.setMessage(detectedRootLocationConfigBuilder),
            consistencyHandler);
      }
    } catch (CouldNotPerformException ex) {
      throw new CouldNotPerformException("Could not validate root location!", ex);
    }
  }