All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.google.gerrit.entities.CachedProjectConfig Maven / Gradle / Ivy

There is a newer version: 3.11.0-rc3
Show newest version
// Copyright (C) 2020 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.entities;

import com.google.auto.value.AutoValue;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.flogger.FluentLogger;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.eclipse.jgit.annotations.Nullable;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.ObjectId;

/**
 * Cached representation of values parsed from {@link
 * com.google.gerrit.server.project.ProjectConfig}.
 *
 * 

This class is immutable and thread-safe. */ @AutoValue public abstract class CachedProjectConfig { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); public abstract Project getProject(); public abstract ImmutableMap getGroups(); /** Returns a set of all groups used by this configuration. */ public ImmutableSet getAllGroupUUIDs() { return getGroups().keySet(); } /** * Returns the group reference for a {@link AccountGroup.UUID}, if the group is used by at least * one rule. */ public Optional getGroup(AccountGroup.UUID uuid) { return Optional.ofNullable(getGroups().get(uuid)); } /** * Returns the group reference for matching the given {@code name}, if the group is used by at * least one rule. */ public Optional getGroupByName(@Nullable String name) { if (name == null) { return Optional.empty(); } return getGroups().values().stream().filter(g -> name.equals(g.getName())).findAny(); } /** Returns the account section containing visibility information about accounts. */ public abstract AccountsSection getAccountsSection(); /** Returns a map of {@link AccessSection}s keyed by their name. */ public abstract ImmutableMap getAccessSections(); /** Returns the {@link AccessSection} with to the given name. */ public Optional getAccessSection(String refName) { return Optional.ofNullable(getAccessSections().get(refName)); } /** Returns all {@link AccessSection} names. */ public ImmutableSet getAccessSectionNames() { return ImmutableSet.copyOf(getAccessSections().keySet()); } /** * Returns the {@link BranchOrderSection} containing the order in which branches should be shown. */ public abstract Optional getBranchOrderSection(); /** Returns the {@link ContributorAgreement}s keyed by their name. */ public abstract ImmutableMap getContributorAgreements(); /** Returns the {@link NotifyConfig}s keyed by their name. */ public abstract ImmutableMap getNotifySections(); /** Returns the {@link LabelType}s keyed by their name. */ public abstract ImmutableMap getLabelSections(); /** Returns configured {@link ConfiguredMimeTypes}s. */ public abstract ConfiguredMimeTypes getMimeTypes(); /** Returns {@link SubscribeSection} keyed by the {@link Project.NameKey} they reference. */ public abstract ImmutableMap getSubscribeSections(); /** Returns {@link StoredCommentLinkInfo} keyed by their name. */ public abstract ImmutableMap getCommentLinkSections(); /** Returns the blob ID of the {@code rules.pl} file, if present. */ public abstract Optional getRulesId(); // TODO(hiesel): This should not have to be an Optional. /** Returns the SHA1 of the {@code refs/meta/config} branch. */ public abstract Optional getRevision(); /** Returns the maximum allowed object size. */ public abstract long getMaxObjectSizeLimit(); /** Returns {@code true} if received objects should be checked for validity. */ public abstract boolean getCheckReceivedObjects(); /** Returns a list of panel sections keyed by title. */ public abstract ImmutableMap> getExtensionPanelSections(); public ImmutableList getSubscribeSections(BranchNameKey branch) { return filterSubscribeSectionsByBranch(getSubscribeSections().values(), branch); } public abstract ImmutableMap getPluginConfigs(); public abstract ImmutableMap getProjectLevelConfigs(); public abstract ImmutableMap getParsedProjectLevelConfigs(); public static Builder builder() { return new AutoValue_CachedProjectConfig.Builder(); } public abstract Builder toBuilder(); @AutoValue.Builder public abstract static class Builder { public abstract Builder setProject(Project value); public abstract Builder setAccountsSection(AccountsSection value); public abstract Builder setBranchOrderSection(Optional value); public Builder addGroup(GroupReference groupReference) { groupsBuilder().put(groupReference.getUUID(), groupReference); return this; } public Builder addAccessSection(AccessSection accessSection) { accessSectionsBuilder().put(accessSection.getName(), accessSection); return this; } public Builder addContributorAgreement(ContributorAgreement contributorAgreement) { contributorAgreementsBuilder().put(contributorAgreement.getName(), contributorAgreement); return this; } public Builder addNotifySection(NotifyConfig notifyConfig) { notifySectionsBuilder().put(notifyConfig.getName(), notifyConfig); return this; } public Builder addLabelSection(LabelType labelType) { labelSectionsBuilder().put(labelType.getName(), labelType); return this; } public abstract Builder setMimeTypes(ConfiguredMimeTypes value); public Builder addSubscribeSection(SubscribeSection subscribeSection) { subscribeSectionsBuilder().put(subscribeSection.project(), subscribeSection); return this; } public Builder addCommentLinkSection(StoredCommentLinkInfo storedCommentLinkInfo) { commentLinkSectionsBuilder().put(storedCommentLinkInfo.getName(), storedCommentLinkInfo); return this; } public abstract Builder setRulesId(Optional value); public abstract Builder setRevision(Optional value); public abstract Builder setMaxObjectSizeLimit(long value); public abstract Builder setCheckReceivedObjects(boolean value); public abstract ImmutableMap.Builder> extensionPanelSectionsBuilder(); public Builder setExtensionPanelSections(Map> value) { value .entrySet() .forEach( e -> extensionPanelSectionsBuilder() .put(e.getKey(), ImmutableList.copyOf(e.getValue()))); return this; } abstract ImmutableMap.Builder pluginConfigsBuilder(); public Builder addPluginConfig(String pluginName, String pluginConfig) { pluginConfigsBuilder().put(pluginName, pluginConfig); return this; } abstract ImmutableMap.Builder projectLevelConfigsBuilder(); abstract ImmutableMap.Builder parsedProjectLevelConfigsBuilder(); public Builder addProjectLevelConfig(String configFileName, String config) { projectLevelConfigsBuilder().put(configFileName, config); try { parsedProjectLevelConfigsBuilder().put(configFileName, ImmutableConfig.parse(config)); } catch (ConfigInvalidException e) { logger.atInfo().withCause(e).log("Config for " + configFileName + " not parsable"); } return this; } public abstract CachedProjectConfig build(); protected abstract ImmutableMap.Builder groupsBuilder(); protected abstract ImmutableMap.Builder accessSectionsBuilder(); protected abstract ImmutableMap.Builder contributorAgreementsBuilder(); protected abstract ImmutableMap.Builder notifySectionsBuilder(); protected abstract ImmutableMap.Builder labelSectionsBuilder(); protected abstract ImmutableMap.Builder subscribeSectionsBuilder(); protected abstract ImmutableMap.Builder commentLinkSectionsBuilder(); } private static ImmutableList filterSubscribeSectionsByBranch( Collection allSubscribeSections, BranchNameKey branch) { ImmutableList.Builder ret = ImmutableList.builder(); for (SubscribeSection s : allSubscribeSections) { if (s.appliesTo(branch)) { ret.add(s); } } return ret.build(); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy