summaryrefslogtreecommitdiffstats
path: root/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java
diff options
context:
space:
mode:
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java')
-rw-r--r--gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java130
1 files changed, 130 insertions, 0 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java
new file mode 100644
index 0000000000..db9bc2d71b
--- /dev/null
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/SetDiffPreferences.java
@@ -0,0 +1,130 @@
+// 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.account;
+
+import com.google.gerrit.extensions.restapi.AuthException;
+import com.google.gerrit.extensions.restapi.RestModifyView;
+import com.google.gerrit.reviewdb.client.Account;
+import com.google.gerrit.reviewdb.client.AccountDiffPreference;
+import com.google.gerrit.reviewdb.client.AccountDiffPreference.Whitespace;
+import com.google.gerrit.reviewdb.server.ReviewDb;
+import com.google.gerrit.server.CurrentUser;
+import com.google.gerrit.server.account.GetDiffPreferences.DiffPreferencesInfo;
+import com.google.gerrit.server.account.SetDiffPreferences.Input;
+import com.google.gwtorm.server.OrmException;
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+
+import java.util.Collections;
+
+public class SetDiffPreferences implements RestModifyView<AccountResource, Input> {
+ static class Input {
+ Short context;
+ Boolean expandAllComments;
+ Whitespace ignoreWhitespace;
+ Boolean intralineDifference;
+ Integer lineLength;
+ Boolean manualReview;
+ Boolean retainHeader;
+ Boolean showLineEndings;
+ Boolean showTabs;
+ Boolean showWhitespaceErrors;
+ Boolean skipDeleted;
+ Boolean skipUncommented;
+ Boolean syntaxHighlighting;
+ Integer tabSize;
+ }
+
+ private final Provider<CurrentUser> self;
+ private final ReviewDb db;
+
+ @Inject
+ SetDiffPreferences(Provider<CurrentUser> self, ReviewDb db) {
+ this.self = self;
+ this.db = db;
+ }
+
+ @Override
+ public DiffPreferencesInfo apply(AccountResource rsrc, Input input)
+ throws AuthException, OrmException {
+ if (self.get() != rsrc.getUser()
+ && !self.get().getCapabilities().canAdministrateServer()) {
+ throw new AuthException("restricted to administrator");
+ }
+ if (input == null) {
+ input = new Input();
+ }
+
+ Account.Id accountId = rsrc.getUser().getAccountId();
+ AccountDiffPreference p;
+
+ db.accounts().beginTransaction(accountId);
+ try {
+ p = db.accountDiffPreferences().get(accountId);
+ if (p == null) {
+ p = new AccountDiffPreference(accountId);
+ }
+
+ if (input.context != null) {
+ p.setContext(input.context);
+ }
+ if (input.ignoreWhitespace != null) {
+ p.setIgnoreWhitespace(input.ignoreWhitespace);
+ }
+ if (input.expandAllComments != null) {
+ p.setExpandAllComments(input.expandAllComments);
+ }
+ if (input.intralineDifference != null) {
+ p.setIntralineDifference(input.intralineDifference);
+ }
+ if (input.lineLength != null) {
+ p.setLineLength(input.lineLength);
+ }
+ if (input.manualReview != null) {
+ p.setManualReview(input.manualReview);
+ }
+ if (input.retainHeader != null) {
+ p.setRetainHeader(input.retainHeader);
+ }
+ if (input.showLineEndings != null) {
+ p.setShowLineEndings(input.showLineEndings);
+ }
+ if (input.showTabs != null) {
+ p.setShowTabs(input.showTabs);
+ }
+ if (input.showWhitespaceErrors != null) {
+ p.setShowWhitespaceErrors(input.showWhitespaceErrors);
+ }
+ if (input.skipDeleted != null) {
+ p.setSkipDeleted(input.skipDeleted);
+ }
+ if (input.skipUncommented != null) {
+ p.setSkipUncommented(input.skipUncommented);
+ }
+ if (input.syntaxHighlighting != null) {
+ p.setSyntaxHighlighting(input.syntaxHighlighting);
+ }
+ if (input.tabSize != null) {
+ p.setTabSize(input.tabSize);
+ }
+
+ db.accountDiffPreferences().upsert(Collections.singleton(p));
+ db.commit();
+ } finally {
+ db.rollback();
+ }
+ return DiffPreferencesInfo.parse(p);
+ }
+}