| // 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.server.cache.serialize.entities; |
| |
| import static com.google.common.collect.ImmutableList.toImmutableList; |
| |
| import com.google.common.collect.ImmutableList; |
| import com.google.gerrit.entities.AccountsSection; |
| import com.google.gerrit.entities.CachedProjectConfig; |
| import com.google.gerrit.entities.ConfiguredMimeTypes; |
| import com.google.gerrit.entities.PermissionRule; |
| import com.google.gerrit.server.cache.proto.Cache; |
| import com.google.gerrit.server.cache.serialize.ObjectIdConverter; |
| import java.util.Optional; |
| |
| /** Helper to (de)serialize values for caches. */ |
| public class CachedProjectConfigSerializer { |
| public static CachedProjectConfig deserialize(Cache.CachedProjectConfigProto proto) { |
| CachedProjectConfig.Builder builder = |
| CachedProjectConfig.builder() |
| .setProject(ProjectSerializer.deserialize(proto.getProject())) |
| .setMaxObjectSizeLimit(proto.getMaxObjectSizeLimit()) |
| .setCheckReceivedObjects(proto.getCheckReceivedObjects()); |
| if (proto.hasBranchOrderSection()) { |
| builder.setBranchOrderSection( |
| Optional.of(BranchOrderSectionSerializer.deserialize(proto.getBranchOrderSection()))); |
| } |
| ImmutableList<ConfiguredMimeTypes.TypeMatcher> matchers = |
| proto.getMimeTypesList().stream() |
| .map(ConfiguredMimeTypeSerializer::deserialize) |
| .collect(toImmutableList()); |
| builder.setMimeTypes(ConfiguredMimeTypes.create(matchers)); |
| if (!proto.getRulesId().isEmpty()) { |
| builder.setRulesId( |
| Optional.of(ObjectIdConverter.create().fromByteString(proto.getRulesId()))); |
| } |
| if (!proto.getRevision().isEmpty()) { |
| builder.setRevision( |
| Optional.of(ObjectIdConverter.create().fromByteString(proto.getRevision()))); |
| } |
| proto |
| .getExtensionPanelsMap() |
| .entrySet() |
| .forEach( |
| panelSection -> { |
| builder |
| .extensionPanelSectionsBuilder() |
| .put( |
| panelSection.getKey(), |
| panelSection.getValue().getSectionList().stream().collect(toImmutableList())); |
| }); |
| ImmutableList<PermissionRule> accounts = |
| proto.getAccountsSectionList().stream() |
| .map(PermissionRuleSerializer::deserialize) |
| .collect(toImmutableList()); |
| builder.setAccountsSection(AccountsSection.create(accounts)); |
| |
| proto.getGroupListList().stream() |
| .map(GroupReferenceSerializer::deserialize) |
| .forEach(builder::addGroup); |
| proto.getAccessSectionsList().stream() |
| .map(AccessSectionSerializer::deserialize) |
| .forEach(builder::addAccessSection); |
| proto.getContributorAgreementsList().stream() |
| .map(ContributorAgreementSerializer::deserialize) |
| .forEach(builder::addContributorAgreement); |
| proto.getNotifyConfigsList().stream() |
| .map(NotifyConfigSerializer::deserialize) |
| .forEach(builder::addNotifySection); |
| proto.getLabelSectionsList().stream() |
| .map(LabelTypeSerializer::deserialize) |
| .forEach(builder::addLabelSection); |
| proto.getSubmitRequirementSectionsList().stream() |
| .map(SubmitRequirementSerializer::deserialize) |
| .forEach(builder::addSubmitRequirementSection); |
| proto.getSubscribeSectionsList().stream() |
| .map(SubscribeSectionSerializer::deserialize) |
| .forEach(builder::addSubscribeSection); |
| proto.getCommentLinksList().stream() |
| .map(StoredCommentLinkInfoSerializer::deserialize) |
| .forEach(builder::addCommentLinkSection); |
| proto |
| .getPluginConfigsMap() |
| .entrySet() |
| .forEach(e -> builder.addPluginConfig(e.getKey(), e.getValue())); |
| proto |
| .getProjectLevelConfigsMap() |
| .entrySet() |
| .forEach(e -> builder.addProjectLevelConfig(e.getKey(), e.getValue())); |
| |
| return builder.build(); |
| } |
| |
| public static Cache.CachedProjectConfigProto serialize(CachedProjectConfig autoValue) { |
| Cache.CachedProjectConfigProto.Builder builder = |
| Cache.CachedProjectConfigProto.newBuilder() |
| .setProject(ProjectSerializer.serialize(autoValue.getProject())) |
| .setMaxObjectSizeLimit(autoValue.getMaxObjectSizeLimit()) |
| .setCheckReceivedObjects(autoValue.getCheckReceivedObjects()); |
| |
| if (autoValue.getBranchOrderSection().isPresent()) { |
| builder.setBranchOrderSection( |
| BranchOrderSectionSerializer.serialize(autoValue.getBranchOrderSection().get())); |
| } |
| autoValue.getMimeTypes().matchers().stream() |
| .map(ConfiguredMimeTypeSerializer::serialize) |
| .forEach(builder::addMimeTypes); |
| |
| if (autoValue.getRulesId().isPresent()) { |
| builder.setRulesId(ObjectIdConverter.create().toByteString(autoValue.getRulesId().get())); |
| } |
| if (autoValue.getRevision().isPresent()) { |
| builder.setRevision(ObjectIdConverter.create().toByteString(autoValue.getRevision().get())); |
| } |
| |
| autoValue |
| .getExtensionPanelSections() |
| .entrySet() |
| .forEach( |
| panelSection -> { |
| builder.putExtensionPanels( |
| panelSection.getKey(), |
| Cache.CachedProjectConfigProto.ExtensionPanelSectionProto.newBuilder() |
| .addAllSection(panelSection.getValue()) |
| .build()); |
| }); |
| autoValue.getAccountsSection().getSameGroupVisibility().stream() |
| .map(PermissionRuleSerializer::serialize) |
| .forEach(builder::addAccountsSection); |
| |
| autoValue.getGroups().values().stream() |
| .map(GroupReferenceSerializer::serialize) |
| .forEach(builder::addGroupList); |
| autoValue.getAccessSections().values().stream() |
| .map(AccessSectionSerializer::serialize) |
| .forEach(builder::addAccessSections); |
| autoValue.getContributorAgreements().values().stream() |
| .map(ContributorAgreementSerializer::serialize) |
| .forEach(builder::addContributorAgreements); |
| autoValue.getNotifySections().values().stream() |
| .map(NotifyConfigSerializer::serialize) |
| .forEach(builder::addNotifyConfigs); |
| autoValue.getLabelSections().values().stream() |
| .map(LabelTypeSerializer::serialize) |
| .forEach(builder::addLabelSections); |
| autoValue.getSubmitRequirementSections().values().stream() |
| .map(SubmitRequirementSerializer::serialize) |
| .forEach(builder::addSubmitRequirementSections); |
| autoValue.getSubscribeSections().values().stream() |
| .map(SubscribeSectionSerializer::serialize) |
| .forEach(builder::addSubscribeSections); |
| autoValue.getCommentLinkSections().values().stream() |
| .map(StoredCommentLinkInfoSerializer::serialize) |
| .forEach(builder::addCommentLinks); |
| builder.putAllPluginConfigs(autoValue.getPluginConfigs()); |
| builder.putAllProjectLevelConfigs(autoValue.getProjectLevelConfigs()); |
| |
| return builder.build(); |
| } |
| |
| private CachedProjectConfigSerializer() {} |
| } |