Plugins need to be adapted to import the classes from the new client package. Change-Id: I9c3533410fbfceebcdf4d7d899513d14ea1f0f34
223 lines
9.2 KiB
Java
223 lines
9.2 KiB
Java
// Copyright (C) 2013 The Android Open Source Project
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package com.google.gerrit.server.project;
|
|
|
|
import com.google.common.base.Strings;
|
|
import com.google.common.collect.Iterables;
|
|
import com.google.common.collect.Maps;
|
|
import com.google.gerrit.extensions.client.InheritableBoolean;
|
|
import com.google.gerrit.extensions.client.SubmitType;
|
|
import com.google.gerrit.extensions.common.ActionInfo;
|
|
import com.google.gerrit.extensions.registration.DynamicMap;
|
|
import com.google.gerrit.extensions.registration.DynamicMap.Entry;
|
|
import com.google.gerrit.extensions.restapi.RestView;
|
|
import com.google.gerrit.extensions.webui.UiAction;
|
|
import com.google.gerrit.reviewdb.client.Project;
|
|
import com.google.gerrit.server.config.AllProjectsNameProvider;
|
|
import com.google.gerrit.server.config.PluginConfig;
|
|
import com.google.gerrit.server.config.PluginConfigFactory;
|
|
import com.google.gerrit.server.config.ProjectConfigEntry;
|
|
import com.google.gerrit.server.extensions.webui.UiActions;
|
|
import com.google.gerrit.server.git.TransferConfig;
|
|
import com.google.inject.util.Providers;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.TreeMap;
|
|
|
|
public class ConfigInfo {
|
|
public String description;
|
|
public InheritedBooleanInfo useContributorAgreements;
|
|
public InheritedBooleanInfo useContentMerge;
|
|
public InheritedBooleanInfo useSignedOffBy;
|
|
public InheritedBooleanInfo createNewChangeForAllNotInTarget;
|
|
public InheritedBooleanInfo requireChangeId;
|
|
public MaxObjectSizeLimitInfo maxObjectSizeLimit;
|
|
public SubmitType submitType;
|
|
public com.google.gerrit.extensions.client.ProjectState state;
|
|
public Map<String, Map<String, ConfigParameterInfo>> pluginConfig;
|
|
public Map<String, ActionInfo> actions;
|
|
|
|
public Map<String, CommentLinkInfo> commentlinks;
|
|
public ThemeInfo theme;
|
|
|
|
public ConfigInfo(ProjectControl control,
|
|
TransferConfig config,
|
|
DynamicMap<ProjectConfigEntry> pluginConfigEntries,
|
|
PluginConfigFactory cfgFactory,
|
|
AllProjectsNameProvider 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();
|
|
|
|
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();
|
|
|
|
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();
|
|
}
|
|
|
|
this.useContributorAgreements = useContributorAgreements;
|
|
this.useSignedOffBy = useSignedOffBy;
|
|
this.useContentMerge = useContentMerge;
|
|
this.requireChangeId = requireChangeId;
|
|
this.createNewChangeForAllNotInTarget = createNewChangeForAllNotInTarget;
|
|
|
|
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 = Maps.newLinkedHashMap();
|
|
for (CommentLinkInfo cl : projectState.getCommentLinks()) {
|
|
this.commentlinks.put(cl.name, cl);
|
|
}
|
|
|
|
pluginConfig =
|
|
getPluginConfig(control.getProjectState(), pluginConfigEntries,
|
|
cfgFactory, allProjects);
|
|
|
|
actions = Maps.newTreeMap();
|
|
for (UiAction.Description d : UiActions.from(
|
|
views, new ProjectResource(control),
|
|
Providers.of(control.getCurrentUser()))) {
|
|
actions.put(d.getId(), new ActionInfo(d));
|
|
}
|
|
this.theme = projectState.getTheme();
|
|
}
|
|
|
|
private Map<String, Map<String, ConfigParameterInfo>> getPluginConfig(
|
|
ProjectState project, DynamicMap<ProjectConfigEntry> pluginConfigEntries,
|
|
PluginConfigFactory cfgFactory, AllProjectsNameProvider allProjects) {
|
|
TreeMap<String, Map<String, ConfigParameterInfo>> pluginConfig = new TreeMap<>();
|
|
for (Entry<ProjectConfigEntry> e : pluginConfigEntries) {
|
|
ProjectConfigEntry configEntry = e.getProvider().get();
|
|
PluginConfig cfg =
|
|
cfgFactory.getFromProjectConfig(project, e.getPluginName());
|
|
String configuredValue = cfg.getString(e.getExportName());
|
|
ConfigParameterInfo p = new ConfigParameterInfo();
|
|
p.displayName = configEntry.getDisplayName();
|
|
p.description = configEntry.getDescription();
|
|
p.warning = configEntry.getWarning(project);
|
|
p.type = configEntry.getType();
|
|
p.permittedValues = configEntry.getPermittedValues();
|
|
p.editable = configEntry.isEditable(project) ? true : null;
|
|
if (configEntry.isInheritable()
|
|
&& !allProjects.get().equals(project.getProject().getNameKey())) {
|
|
PluginConfig cfgWithInheritance =
|
|
cfgFactory.getFromProjectConfigWithInheritance(project,
|
|
e.getPluginName());
|
|
p.inheritable = true;
|
|
p.value = cfgWithInheritance.getString(e.getExportName(), configEntry.getDefaultValue());
|
|
p.configuredValue = configuredValue;
|
|
p.inheritedValue = getInheritedValue(project, cfgFactory, e);
|
|
} else {
|
|
if (configEntry.getType() == ProjectConfigEntry.Type.ARRAY) {
|
|
p.values = Arrays.asList(cfg.getStringList(e.getExportName()));
|
|
} else {
|
|
p.value = configuredValue != null ? configuredValue : configEntry.getDefaultValue();
|
|
}
|
|
}
|
|
Map<String, ConfigParameterInfo> pc = pluginConfig.get(e.getPluginName());
|
|
if (pc == null) {
|
|
pc = new TreeMap<>();
|
|
pluginConfig.put(e.getPluginName(), pc);
|
|
}
|
|
pc.put(e.getExportName(), p);
|
|
}
|
|
return !pluginConfig.isEmpty() ? pluginConfig : null;
|
|
}
|
|
|
|
private String getInheritedValue(ProjectState project,
|
|
PluginConfigFactory cfgFactory, Entry<ProjectConfigEntry> e) {
|
|
ProjectConfigEntry configEntry = e.getProvider().get();
|
|
ProjectState parent = Iterables.getFirst(project.parents(), null);
|
|
String inheritedValue = configEntry.getDefaultValue();
|
|
if (parent != null) {
|
|
PluginConfig parentCfgWithInheritance =
|
|
cfgFactory.getFromProjectConfigWithInheritance(parent,
|
|
e.getPluginName());
|
|
inheritedValue =
|
|
parentCfgWithInheritance.getString(e.getExportName(),
|
|
configEntry.getDefaultValue());
|
|
}
|
|
return inheritedValue;
|
|
}
|
|
|
|
public static class InheritedBooleanInfo {
|
|
public Boolean value;
|
|
public InheritableBoolean configuredValue;
|
|
public Boolean inheritedValue;
|
|
}
|
|
|
|
public static class MaxObjectSizeLimitInfo {
|
|
public String value;
|
|
public String configuredValue;
|
|
public String inheritedValue;
|
|
}
|
|
|
|
public static class ConfigParameterInfo {
|
|
public String displayName;
|
|
public String description;
|
|
public String warning;
|
|
public ProjectConfigEntry.Type type;
|
|
public String value;
|
|
public Boolean editable;
|
|
public Boolean inheritable;
|
|
public String configuredValue;
|
|
public String inheritedValue;
|
|
public List<String> permittedValues;
|
|
public List<String> values;
|
|
}
|
|
}
|