public void validate(ValidationContext validationContext) { List<CaseInsensitiveString> allPipelineNames = validationContext.getCruiseConfig().getAllPipelineNames(); List<CaseInsensitiveString> allEnvironmentNames = new ArrayList<>(); Map<CaseInsensitiveString, CaseInsensitiveString> pipelineToEnvMap = new HashMap<>(); for (EnvironmentConfig environmentConfig : this) { if (allEnvironmentNames.contains(environmentConfig.name())) { environmentConfig.addError("name", String.format("Environment with name '%s' already exists.", environmentConfig.name())); } else { allEnvironmentNames.add(environmentConfig.name()); } for (EnvironmentPipelineConfig pipeline : environmentConfig.getPipelines()) { if (!allPipelineNames.contains(pipeline.getName())) { environmentConfig.addError("pipeline", String.format("Environment '%s' refers to an unknown pipeline '%s'.", environmentConfig.name(), pipeline.getName())); } if (pipelineToEnvMap.containsKey(pipeline.getName())) { environmentConfig.addError("pipeline", "Associating pipeline(s) which is already part of " + pipelineToEnvMap.get(pipeline.getName()) + " environment"); } else { pipelineToEnvMap.put(pipeline.getName(), environmentConfig.name()); } } } }
private void haltIfEntityWithSameNameExists(EnvironmentConfig environmentConfig) { HttpLocalizedOperationResult result = new HttpLocalizedOperationResult(); ConfigElementForEdit<EnvironmentConfig> existingEnvironmentConfig = environmentConfigService.getMergedEnvironmentforDisplay(environmentConfig.name().toString(), result); if (existingEnvironmentConfig == null) { return; } environmentConfig.addError("name", format("Environment name should be unique. Environment with name '%s' already exists.", environmentConfig.name().toString())); throw haltBecauseEntityAlreadyExists(jsonWriter(environmentConfig), "environment", environmentConfig.name().toString()); }