in server/src/jetbrains/buildServer/sharedResources/pages/EditFeatureController.java [84:153]
protected ModelAndView doHandle(@NotNull final HttpServletRequest request,
@NotNull final HttpServletResponse response) {
final ModelAndView result = new ModelAndView(myDescriptor.getPluginResourcesPath(EDIT_FEATURE_PATH_JSP));
final Map<String, Object> model = result.getModel();
final EditableBuildTypeSettingsForm form = myFormFactory.getOrCreateForm(request);
assert form != null;
final BuildTypeSettings buildTypeSettings = form.getSettings();
assert buildTypeSettings != null;
final SProject project = form.getProject();
final BuildFeaturesBean buildFeaturesBean = form.getBuildFeaturesBean();
final String buildFeatureId = request.getParameter("featureId");
final Map<String, Lock> locks = new HashMap<>();
// map of all visible resources from this project and its subtree
final List<Resource> projectResources = myResources.getResources(project);
final Set<String> available = projectResources.stream().map(Resource::getName).collect(Collectors.toSet());
// resource names locked by other features defined in current build type
final Set<String> lockedByOtherFeatures = new HashSet<>();
final Collection<Lock> invalidLocks = new ArrayList<>();
boolean inherited = false;
for (BuildFeatureBean bfb: buildFeaturesBean.getBuildFeatureDescriptors()) {
SBuildFeatureDescriptor descriptor = bfb.getDescriptor();
if (SharedResourcesBuildFeature.FEATURE_TYPE.equals(descriptor.getType())) {
// we have build feature of needed type
SharedResourcesFeature f = myFactory.createFeature(descriptor);
if (buildFeatureId.equals(descriptor.getId())) {
// we have feature that we need to edit
locks.putAll(f.getLockedResources());
invalidLocks.addAll(myInspector.inspect(project, f).keySet());
inherited = bfb.isInherited();
String originExternalId = bfb.getOriginExternalId();
if (!StringUtil.isEmptyOrSpaces(originExternalId)) {
if (inherited) {
model.put("template", myProjectManager.findBuildTypeTemplateByExternalId(originExternalId));
}
}
} else {
// if feature belongs to current build type settings (not inherited, not enforced etc),
// we must remove resources locked by this feature from available
if (!bfb.isInherited()) {
lockedByOtherFeatures.addAll(f.getLockedResources().keySet());
}
}
}
}
if (!inherited) { // we are editing build feature descriptor in current build type
available.removeAll(lockedByOtherFeatures);
}
if (buildTypeSettings.isCompositeBuildType()) { // custom resources are not available for composite build types yet
projectResources.stream()
.filter(resource -> resource.getType() == ResourceType.CUSTOM)
.map(Resource::getName)
.forEach(available::remove);
}
final EditFeatureBean bean = myBeansFactory.createEditFeatureBean(project, available);
final Map<String, Lock> invalidLocksMap = new HashMap<>();
for (Lock lock: invalidLocks) {
invalidLocksMap.put(lock.getName(), lock);
}
model.put("inherited", inherited);
model.put("invalidLocks", invalidLocksMap);
model.put("locks", locks);
model.put("bean", bean);
return result;
}