public ConfigInfoImpl( boolean serverEnableSignedPush, ProjectControl control, TransferConfig config, DynamicMap<ProjectConfigEntry> pluginConfigEntries, PluginConfigFactory cfgFactory, AllProjectsName allProjects, DynamicMap<RestView<ProjectResource>> views) { ProjectState projectState = control.getProjectState(); Project p = control.getProject(); this.description = Strings.emptyToNull(p.getDescription()); InheritedBooleanInfo useContributorAgreements = new InheritedBooleanInfo(); InheritedBooleanInfo useSignedOffBy = new InheritedBooleanInfo(); InheritedBooleanInfo useContentMerge = new InheritedBooleanInfo(); InheritedBooleanInfo requireChangeId = new InheritedBooleanInfo(); InheritedBooleanInfo createNewChangeForAllNotInTarget = new InheritedBooleanInfo(); InheritedBooleanInfo enableSignedPush = new InheritedBooleanInfo(); InheritedBooleanInfo requireSignedPush = new InheritedBooleanInfo(); InheritedBooleanInfo rejectImplicitMerges = new InheritedBooleanInfo(); useContributorAgreements.value = projectState.isUseContributorAgreements(); useSignedOffBy.value = projectState.isUseSignedOffBy(); useContentMerge.value = projectState.isUseContentMerge(); requireChangeId.value = projectState.isRequireChangeID(); createNewChangeForAllNotInTarget.value = projectState.isCreateNewChangeForAllNotInTarget(); useContributorAgreements.configuredValue = p.getUseContributorAgreements(); useSignedOffBy.configuredValue = p.getUseSignedOffBy(); useContentMerge.configuredValue = p.getUseContentMerge(); requireChangeId.configuredValue = p.getRequireChangeID(); createNewChangeForAllNotInTarget.configuredValue = p.getCreateNewChangeForAllNotInTarget(); enableSignedPush.configuredValue = p.getEnableSignedPush(); requireSignedPush.configuredValue = p.getRequireSignedPush(); rejectImplicitMerges.configuredValue = p.getRejectImplicitMerges(); ProjectState parentState = Iterables.getFirst(projectState.parents(), null); if (parentState != null) { useContributorAgreements.inheritedValue = parentState.isUseContributorAgreements(); useSignedOffBy.inheritedValue = parentState.isUseSignedOffBy(); useContentMerge.inheritedValue = parentState.isUseContentMerge(); requireChangeId.inheritedValue = parentState.isRequireChangeID(); createNewChangeForAllNotInTarget.inheritedValue = parentState.isCreateNewChangeForAllNotInTarget(); enableSignedPush.inheritedValue = projectState.isEnableSignedPush(); requireSignedPush.inheritedValue = projectState.isRequireSignedPush(); rejectImplicitMerges.inheritedValue = projectState.isRejectImplicitMerges(); } this.useContributorAgreements = useContributorAgreements; this.useSignedOffBy = useSignedOffBy; this.useContentMerge = useContentMerge; this.requireChangeId = requireChangeId; this.rejectImplicitMerges = rejectImplicitMerges; this.createNewChangeForAllNotInTarget = createNewChangeForAllNotInTarget; if (serverEnableSignedPush) { this.enableSignedPush = enableSignedPush; this.requireSignedPush = requireSignedPush; } MaxObjectSizeLimitInfo maxObjectSizeLimit = new MaxObjectSizeLimitInfo(); maxObjectSizeLimit.value = config.getEffectiveMaxObjectSizeLimit(projectState) == config.getMaxObjectSizeLimit() ? config.getFormattedMaxObjectSizeLimit() : p.getMaxObjectSizeLimit(); maxObjectSizeLimit.configuredValue = p.getMaxObjectSizeLimit(); maxObjectSizeLimit.inheritedValue = config.getFormattedMaxObjectSizeLimit(); this.maxObjectSizeLimit = maxObjectSizeLimit; this.submitType = p.getSubmitType(); this.state = p.getState() != com.google.gerrit.extensions.client.ProjectState.ACTIVE ? p.getState() : null; this.commentlinks = new LinkedHashMap<>(); for (CommentLinkInfo cl : projectState.getCommentLinks()) { this.commentlinks.put(cl.name, cl); } pluginConfig = getPluginConfig(control.getProjectState(), pluginConfigEntries, cfgFactory, allProjects); actions = new TreeMap<>(); for (UiAction.Description d : UiActions.from(views, new ProjectResource(control), Providers.of(control.getUser()))) { actions.put(d.getId(), new ActionInfo(d)); } this.theme = projectState.getTheme(); }