in rest-api/src/jetbrains/buildServer/server/rest/model/buildType/BuildType.java [969:1081]
private boolean fillBuildTypeOrTemplate(final @NotNull BuildTypeOrTemplatePatcher buildTypeOrTemplatePatcher, final @NotNull ServiceLocator serviceLocator) {
boolean result = false;
SubmitedParameters submittedParams = mySubmitted.get();
if (submittedParams.description != null) {
result = true;
buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().setDescription(submittedParams.description);
}
if (submittedParams.paused != null) {
if (buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType() == null) {
throw new BadRequestException("Cannot set paused state for a template");
}
//check if it is already paused if (Boolean.valueOf(submittedPaused) ^ buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType().isPaused())
result = true;
buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType().setPaused(Boolean.valueOf(submittedParams.paused),
serviceLocator.getSingletonService(UserFinder.class).getCurrentUser(),
TeamCityProperties.getProperty("rest.defaultActionComment"));
}
if (submittedParams.templates != null) {
if (buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType() == null) {
throw new BadRequestException("Cannot set templates for a template");
}
try {
//noinspection ConstantConditions
List<BuildTypeOrTemplate> templates = submittedParams.templates.getFromPosted(serviceLocator.findSingletonService(BuildTypeFinder.class));
BuildTypeOrTemplate.setTemplates(buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType(), templates, false);
} catch (BadRequestException e) {
throw new BadRequestException("Error retrieving submitted templates: " + e.getMessage(), e);
}
result = true;
} else if (submittedParams.template != null) {
if (buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType() == null) {
throw new BadRequestException("Cannot set template for a template");
}
final BuildTypeOrTemplate templateFromPosted;
try {
//noinspection ConstantConditions
templateFromPosted = submittedParams.template.getBuildTypeFromPosted(serviceLocator.findSingletonService(BuildTypeFinder.class));
} catch (BadRequestException e) {
throw new BadRequestException("Error retrieving submitted template: " + e.getMessage(), e);
}
if (templateFromPosted.getTemplate() == null) {
throw new BadRequestException("'template' field should reference a template, not build type");
}
result = true;
buildTypeOrTemplatePatcher.getBuildTypeOrTemplate().getBuildType().attachToTemplate(templateFromPosted.getTemplate());
}
BuildTypeOrTemplate buildTypeOrTemplate = buildTypeOrTemplatePatcher.getBuildTypeOrTemplate();
BuildTypeSettingsEx buildTypeSettings = buildTypeOrTemplate.getSettingsEx();
if (submittedParams.vcsRootEntries != null) {
boolean updated = submittedParams.vcsRootEntries.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.parameters != null) {
boolean updated = submittedParams.parameters.setTo(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.steps != null) {
boolean updated = submittedParams.steps.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.features != null) {
boolean updated = submittedParams.features.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.triggers != null) {
boolean updated = submittedParams.triggers.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.snapshotDependencies != null) {
boolean updated = submittedParams.snapshotDependencies.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.artifactDependencies != null) {
boolean updated = submittedParams.artifactDependencies.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.agentRequirements != null) {
boolean updated = submittedParams.agentRequirements.setToBuildType(buildTypeOrTemplate, serviceLocator);
result = result || updated;
}
if (submittedParams.settings != null && submittedParams.settings.getProperties() != null) {
//need to remove all settings if submittedSettings.properties == null???
for (Property property : submittedParams.settings.getProperties()) {
try {
property.addTo(new BuildTypeRequest.BuildTypeSettingsEntityWithParams(buildTypeOrTemplatePatcher.getBuildTypeOrTemplate()), serviceLocator);
result = true;
} catch (java.lang.UnsupportedOperationException e) { //can be thrown from EditableBuildTypeCopy
LOG.debug("Error setting property '" + property.name + "' to value '" + property.value + "': " + e.getMessage());
}
}
}
if (submittedParams.type != null) {
//this overrides setting submitted via "settings"
String previousValue = buildTypeSettings.getOption(BuildTypeOptions.BT_BUILD_CONFIGURATION_TYPE);
boolean modified;
try {
String newValue = TypedFinderBuilder.getEnumValue(submittedParams.type, BuildTypeOptions.BuildConfigurationType.class).name();
modified = !previousValue.equalsIgnoreCase(newValue);
if (modified) {
serviceLocator.getSingletonService(PermissionChecker.class).checkCanEditBuildTypeOrTemplate(buildTypeOrTemplate);
buildTypeSettings.setOption(BuildTypeOptions.BT_BUILD_CONFIGURATION_TYPE, newValue);
}
} catch (IllegalArgumentException e) {
throw new BadRequestException("Could not set type to value '" + submittedParams.type + "'. Error: " + e.getMessage());
}
result = result || modified;
}
return result;
}