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

com.google.gerrit.server.config.UserPreferencesConverter Maven / Gradle / Ivy

The newest version!
// Copyright (C) 2023 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.config;

import static com.google.common.collect.ImmutableList.toImmutableList;

import com.google.gerrit.common.Nullable;
import com.google.gerrit.entities.converter.SafeProtoConverter;
import com.google.gerrit.extensions.client.DiffPreferencesInfo;
import com.google.gerrit.extensions.client.EditPreferencesInfo;
import com.google.gerrit.extensions.client.GeneralPreferencesInfo;
import com.google.gerrit.extensions.client.MenuItem;
import com.google.gerrit.proto.Entities.UserPreferences;
import com.google.protobuf.Message;
import com.google.protobuf.Parser;
import com.google.protobuf.ProtocolMessageEnum;
import java.util.function.Function;

/**
 * Converters for user preferences data classes
 *
 * 

Upstream, we use java representations of the preference classes. Internally, we store proto * equivalents in Spanner. */ public final class UserPreferencesConverter { public enum GeneralPreferencesInfoConverter implements SafeProtoConverter { GENERAL_PREFERENCES_INFO_CONVERTER; @Override public UserPreferences.GeneralPreferencesInfo toProto(GeneralPreferencesInfo info) { UserPreferences.GeneralPreferencesInfo.Builder builder = UserPreferences.GeneralPreferencesInfo.newBuilder(); builder = setIfNotNull(builder, builder::setChangesPerPage, info.changesPerPage); builder = setIfNotNull(builder, builder::setDownloadScheme, info.downloadScheme); builder = setEnumIfNotNull( builder, builder::setTheme, UserPreferences.GeneralPreferencesInfo.Theme::valueOf, info.theme); builder = setEnumIfNotNull( builder, builder::setDateFormat, UserPreferences.GeneralPreferencesInfo.DateFormat::valueOf, info.dateFormat); builder = setEnumIfNotNull( builder, builder::setTimeFormat, UserPreferences.GeneralPreferencesInfo.TimeFormat::valueOf, info.timeFormat); builder = setIfNotNull(builder, builder::setExpandInlineDiffs, info.expandInlineDiffs); builder = setIfNotNull( builder, builder::setRelativeDateInChangeTable, info.relativeDateInChangeTable); builder = setEnumIfNotNull( builder, builder::setDiffView, UserPreferences.GeneralPreferencesInfo.DiffView::valueOf, info.diffView); builder = setIfNotNull(builder, builder::setSizeBarInChangeTable, info.sizeBarInChangeTable); builder = setIfNotNull(builder, builder::setLegacycidInChangeTable, info.legacycidInChangeTable); builder = setIfNotNull(builder, builder::setMuteCommonPathPrefixes, info.muteCommonPathPrefixes); builder = setIfNotNull(builder, builder::setSignedOffBy, info.signedOffBy); builder = setEnumIfNotNull( builder, builder::setEmailStrategy, UserPreferences.GeneralPreferencesInfo.EmailStrategy::valueOf, info.emailStrategy); builder = setEnumIfNotNull( builder, builder::setEmailFormat, UserPreferences.GeneralPreferencesInfo.EmailFormat::valueOf, info.emailFormat); builder = setEnumIfNotNull( builder, builder::setDefaultBaseForMerges, UserPreferences.GeneralPreferencesInfo.DefaultBase::valueOf, info.defaultBaseForMerges); builder = setIfNotNull(builder, builder::setPublishCommentsOnPush, info.publishCommentsOnPush); builder = setIfNotNull( builder, builder::setDisableKeyboardShortcuts, info.disableKeyboardShortcuts); builder = setIfNotNull( builder, builder::setDisableTokenHighlighting, info.disableTokenHighlighting); builder = setIfNotNull(builder, builder::setWorkInProgressByDefault, info.workInProgressByDefault); if (info.my != null) { builder = builder.addAllMyMenuItems( info.my.stream().map(i -> menuItemToProto(i)).collect(toImmutableList())); } if (info.changeTable != null) { builder = builder.addAllChangeTable(info.changeTable); } builder = setIfNotNull( builder, builder::setAllowBrowserNotifications, info.allowBrowserNotifications); builder = setIfNotNull( builder, builder::setAllowSuggestCodeWhileCommenting, info.allowSuggestCodeWhileCommenting); builder = setIfNotNull( builder, builder::setAllowAutocompletingComments, info.allowAutocompletingComments); builder = setIfNotNull(builder, builder::setDiffPageSidebar, info.diffPageSidebar); return builder.build(); } @Override public GeneralPreferencesInfo fromProto(UserPreferences.GeneralPreferencesInfo proto) { GeneralPreferencesInfo res = new GeneralPreferencesInfo(); res.changesPerPage = proto.hasChangesPerPage() ? proto.getChangesPerPage() : null; res.downloadScheme = proto.hasDownloadScheme() ? proto.getDownloadScheme() : null; res.theme = proto.hasTheme() ? GeneralPreferencesInfo.Theme.valueOf(proto.getTheme().name()) : null; res.dateFormat = proto.hasDateFormat() ? GeneralPreferencesInfo.DateFormat.valueOf(proto.getDateFormat().name()) : null; res.timeFormat = proto.hasTimeFormat() ? GeneralPreferencesInfo.TimeFormat.valueOf(proto.getTimeFormat().name()) : null; res.expandInlineDiffs = proto.hasExpandInlineDiffs() ? proto.getExpandInlineDiffs() : null; res.relativeDateInChangeTable = proto.hasRelativeDateInChangeTable() ? proto.getRelativeDateInChangeTable() : null; res.diffView = proto.hasDiffView() ? GeneralPreferencesInfo.DiffView.valueOf(proto.getDiffView().name()) : null; res.sizeBarInChangeTable = proto.hasSizeBarInChangeTable() ? proto.getSizeBarInChangeTable() : null; res.legacycidInChangeTable = proto.hasLegacycidInChangeTable() ? proto.getLegacycidInChangeTable() : null; res.muteCommonPathPrefixes = proto.hasMuteCommonPathPrefixes() ? proto.getMuteCommonPathPrefixes() : null; res.signedOffBy = proto.hasSignedOffBy() ? proto.getSignedOffBy() : null; res.emailStrategy = proto.hasEmailStrategy() ? GeneralPreferencesInfo.EmailStrategy.valueOf(proto.getEmailStrategy().name()) : null; res.emailFormat = proto.hasEmailFormat() ? GeneralPreferencesInfo.EmailFormat.valueOf(proto.getEmailFormat().name()) : null; res.defaultBaseForMerges = proto.hasDefaultBaseForMerges() ? GeneralPreferencesInfo.DefaultBase.valueOf(proto.getDefaultBaseForMerges().name()) : null; res.publishCommentsOnPush = proto.hasPublishCommentsOnPush() ? proto.getPublishCommentsOnPush() : null; res.disableKeyboardShortcuts = proto.hasDisableKeyboardShortcuts() ? proto.getDisableKeyboardShortcuts() : null; res.disableTokenHighlighting = proto.hasDisableTokenHighlighting() ? proto.getDisableTokenHighlighting() : null; res.workInProgressByDefault = proto.hasWorkInProgressByDefault() ? proto.getWorkInProgressByDefault() : null; res.my = proto.getMyMenuItemsCount() != 0 ? proto.getMyMenuItemsList().stream() .map(p -> menuItemFromProto(p)) .collect(toImmutableList()) : null; res.changeTable = proto.getChangeTableCount() != 0 ? proto.getChangeTableList() : null; res.allowBrowserNotifications = proto.hasAllowBrowserNotifications() ? proto.getAllowBrowserNotifications() : null; res.allowSuggestCodeWhileCommenting = proto.hasAllowSuggestCodeWhileCommenting() ? proto.getAllowSuggestCodeWhileCommenting() : null; res.allowAutocompletingComments = proto.hasAllowAutocompletingComments() ? proto.getAllowAutocompletingComments() : null; res.diffPageSidebar = proto.hasDiffPageSidebar() ? proto.getDiffPageSidebar() : null; return res; } @Override public Parser getParser() { return UserPreferences.GeneralPreferencesInfo.parser(); } private static UserPreferences.GeneralPreferencesInfo.MenuItem menuItemToProto( MenuItem javaItem) { UserPreferences.GeneralPreferencesInfo.MenuItem.Builder builder = UserPreferences.GeneralPreferencesInfo.MenuItem.newBuilder(); builder = setIfNotNull(builder, builder::setName, trimSafe(javaItem.name)); builder = setIfNotNull(builder, builder::setUrl, trimSafe(javaItem.url)); builder = setIfNotNull(builder, builder::setTarget, trimSafe(javaItem.target)); builder = setIfNotNull(builder, builder::setId, trimSafe(javaItem.id)); return builder.build(); } private static @Nullable String trimSafe(@Nullable String s) { return s == null ? s : s.trim(); } private static MenuItem menuItemFromProto( UserPreferences.GeneralPreferencesInfo.MenuItem proto) { return new MenuItem( proto.hasName() ? proto.getName().trim() : null, proto.hasUrl() ? proto.getUrl().trim() : null, proto.hasTarget() ? proto.getTarget().trim() : null, proto.hasId() ? proto.getId().trim() : null); } @Override public Class getProtoClass() { return UserPreferences.GeneralPreferencesInfo.class; } @Override public Class getEntityClass() { return GeneralPreferencesInfo.class; } } public enum DiffPreferencesInfoConverter implements SafeProtoConverter { DIFF_PREFERENCES_INFO_CONVERTER; @Override public UserPreferences.DiffPreferencesInfo toProto(DiffPreferencesInfo info) { UserPreferences.DiffPreferencesInfo.Builder builder = UserPreferences.DiffPreferencesInfo.newBuilder(); builder = setIfNotNull(builder, builder::setContext, info.context); builder = setIfNotNull(builder, builder::setTabSize, info.tabSize); builder = setIfNotNull(builder, builder::setFontSize, info.fontSize); builder = setIfNotNull(builder, builder::setLineLength, info.lineLength); builder = setIfNotNull(builder, builder::setCursorBlinkRate, info.cursorBlinkRate); builder = setIfNotNull(builder, builder::setExpandAllComments, info.expandAllComments); builder = setIfNotNull(builder, builder::setIntralineDifference, info.intralineDifference); builder = setIfNotNull(builder, builder::setManualReview, info.manualReview); builder = setIfNotNull(builder, builder::setShowLineEndings, info.showLineEndings); builder = setIfNotNull(builder, builder::setShowTabs, info.showTabs); builder = setIfNotNull(builder, builder::setShowWhitespaceErrors, info.showWhitespaceErrors); builder = setIfNotNull(builder, builder::setSyntaxHighlighting, info.syntaxHighlighting); builder = setIfNotNull(builder, builder::setHideTopMenu, info.hideTopMenu); builder = setIfNotNull(builder, builder::setAutoHideDiffTableHeader, info.autoHideDiffTableHeader); builder = setIfNotNull(builder, builder::setHideLineNumbers, info.hideLineNumbers); builder = setIfNotNull(builder, builder::setRenderEntireFile, info.renderEntireFile); builder = setIfNotNull(builder, builder::setHideEmptyPane, info.hideEmptyPane); builder = setIfNotNull(builder, builder::setMatchBrackets, info.matchBrackets); builder = setIfNotNull(builder, builder::setLineWrapping, info.lineWrapping); builder = setEnumIfNotNull( builder, builder::setIgnoreWhitespace, UserPreferences.DiffPreferencesInfo.Whitespace::valueOf, info.ignoreWhitespace); builder = setIfNotNull(builder, builder::setRetainHeader, info.retainHeader); builder = setIfNotNull(builder, builder::setSkipDeleted, info.skipDeleted); builder = setIfNotNull(builder, builder::setSkipUnchanged, info.skipUnchanged); builder = setIfNotNull(builder, builder::setSkipUncommented, info.skipUncommented); return builder.build(); } @Override public DiffPreferencesInfo fromProto(UserPreferences.DiffPreferencesInfo proto) { DiffPreferencesInfo res = new DiffPreferencesInfo(); res.context = proto.hasContext() ? proto.getContext() : null; res.tabSize = proto.hasTabSize() ? proto.getTabSize() : null; res.fontSize = proto.hasFontSize() ? proto.getFontSize() : null; res.lineLength = proto.hasLineLength() ? proto.getLineLength() : null; res.cursorBlinkRate = proto.hasCursorBlinkRate() ? proto.getCursorBlinkRate() : null; res.expandAllComments = proto.hasExpandAllComments() ? proto.getExpandAllComments() : null; res.intralineDifference = proto.hasIntralineDifference() ? proto.getIntralineDifference() : null; res.manualReview = proto.hasManualReview() ? proto.getManualReview() : null; res.showLineEndings = proto.hasShowLineEndings() ? proto.getShowLineEndings() : null; res.showTabs = proto.hasShowTabs() ? proto.getShowTabs() : null; res.showWhitespaceErrors = proto.hasShowWhitespaceErrors() ? proto.getShowWhitespaceErrors() : null; res.syntaxHighlighting = proto.hasSyntaxHighlighting() ? proto.getSyntaxHighlighting() : null; res.hideTopMenu = proto.hasHideTopMenu() ? proto.getHideTopMenu() : null; res.autoHideDiffTableHeader = proto.hasAutoHideDiffTableHeader() ? proto.getAutoHideDiffTableHeader() : null; res.hideLineNumbers = proto.hasHideLineNumbers() ? proto.getHideLineNumbers() : null; res.renderEntireFile = proto.hasRenderEntireFile() ? proto.getRenderEntireFile() : null; res.hideEmptyPane = proto.hasHideEmptyPane() ? proto.getHideEmptyPane() : null; res.matchBrackets = proto.hasMatchBrackets() ? proto.getMatchBrackets() : null; res.lineWrapping = proto.hasLineWrapping() ? proto.getLineWrapping() : null; res.ignoreWhitespace = proto.hasIgnoreWhitespace() ? DiffPreferencesInfo.Whitespace.valueOf(proto.getIgnoreWhitespace().name()) : null; res.retainHeader = proto.hasRetainHeader() ? proto.getRetainHeader() : null; res.skipDeleted = proto.hasSkipDeleted() ? proto.getSkipDeleted() : null; res.skipUnchanged = proto.hasSkipUnchanged() ? proto.getSkipUnchanged() : null; res.skipUncommented = proto.hasSkipUncommented() ? proto.getSkipUncommented() : null; return res; } @Override public Parser getParser() { return UserPreferences.DiffPreferencesInfo.parser(); } @Override public Class getProtoClass() { return UserPreferences.DiffPreferencesInfo.class; } @Override public Class getEntityClass() { return DiffPreferencesInfo.class; } } public enum EditPreferencesInfoConverter implements SafeProtoConverter { EDIT_PREFERENCES_INFO_CONVERTER; @Override public UserPreferences.EditPreferencesInfo toProto(EditPreferencesInfo info) { UserPreferences.EditPreferencesInfo.Builder builder = UserPreferences.EditPreferencesInfo.newBuilder(); builder = setIfNotNull(builder, builder::setTabSize, info.tabSize); builder = setIfNotNull(builder, builder::setLineLength, info.lineLength); builder = setIfNotNull(builder, builder::setIndentUnit, info.indentUnit); builder = setIfNotNull(builder, builder::setCursorBlinkRate, info.cursorBlinkRate); builder = setIfNotNull(builder, builder::setHideTopMenu, info.hideTopMenu); builder = setIfNotNull(builder, builder::setShowTabs, info.showTabs); builder = setIfNotNull(builder, builder::setShowWhitespaceErrors, info.showWhitespaceErrors); builder = setIfNotNull(builder, builder::setSyntaxHighlighting, info.syntaxHighlighting); builder = setIfNotNull(builder, builder::setHideLineNumbers, info.hideLineNumbers); builder = setIfNotNull(builder, builder::setMatchBrackets, info.matchBrackets); builder = setIfNotNull(builder, builder::setLineWrapping, info.lineWrapping); builder = setIfNotNull(builder, builder::setIndentWithTabs, info.indentWithTabs); builder = setIfNotNull(builder, builder::setAutoCloseBrackets, info.autoCloseBrackets); builder = setIfNotNull(builder, builder::setShowBase, info.showBase); return builder.build(); } @Override public EditPreferencesInfo fromProto(UserPreferences.EditPreferencesInfo proto) { EditPreferencesInfo res = new EditPreferencesInfo(); res.tabSize = proto.hasTabSize() ? proto.getTabSize() : null; res.lineLength = proto.hasLineLength() ? proto.getLineLength() : null; res.indentUnit = proto.hasIndentUnit() ? proto.getIndentUnit() : null; res.cursorBlinkRate = proto.hasCursorBlinkRate() ? proto.getCursorBlinkRate() : null; res.hideTopMenu = proto.hasHideTopMenu() ? proto.getHideTopMenu() : null; res.showTabs = proto.hasShowTabs() ? proto.getShowTabs() : null; res.showWhitespaceErrors = proto.hasShowWhitespaceErrors() ? proto.getShowWhitespaceErrors() : null; res.syntaxHighlighting = proto.hasSyntaxHighlighting() ? proto.getSyntaxHighlighting() : null; res.hideLineNumbers = proto.hasHideLineNumbers() ? proto.getHideLineNumbers() : null; res.matchBrackets = proto.hasMatchBrackets() ? proto.getMatchBrackets() : null; res.lineWrapping = proto.hasLineWrapping() ? proto.getLineWrapping() : null; res.indentWithTabs = proto.hasIndentWithTabs() ? proto.getIndentWithTabs() : null; res.autoCloseBrackets = proto.hasAutoCloseBrackets() ? proto.getAutoCloseBrackets() : null; res.showBase = proto.hasShowBase() ? proto.getShowBase() : null; return res; } @Override public Parser getParser() { return UserPreferences.EditPreferencesInfo.parser(); } @Override public Class getProtoClass() { return UserPreferences.EditPreferencesInfo.class; } @Override public Class getEntityClass() { return EditPreferencesInfo.class; } } private static BuilderT setIfNotNull( BuilderT builder, Function protoFieldSetterFn, ValueT javaField) { if (javaField != null) { return protoFieldSetterFn.apply(javaField); } return builder; } private static < JavaEnumT extends Enum, ProtoEnumT extends ProtocolMessageEnum, BuilderT extends Message.Builder> BuilderT setEnumIfNotNull( BuilderT builder, Function protoFieldSetterFn, Function protoEnumFromNameFn, JavaEnumT javaEnum) { if (javaEnum != null) { return protoFieldSetterFn.apply(protoEnumFromNameFn.apply(javaEnum.name())); } return builder; } private UserPreferencesConverter() {} }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy