diff options
Diffstat (limited to 'java/com/google/gerrit/server/api/accounts/AccountApiImpl.java')
-rw-r--r-- | java/com/google/gerrit/server/api/accounts/AccountApiImpl.java | 596 |
1 files changed, 596 insertions, 0 deletions
diff --git a/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java b/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java new file mode 100644 index 0000000000..d80ff9b580 --- /dev/null +++ b/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java @@ -0,0 +1,596 @@ +// Copyright (C) 2014 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.api.accounts; + +import static com.google.gerrit.server.api.ApiUtil.asRestApiException; +import static javax.servlet.http.HttpServletResponse.SC_OK; + +import com.google.gerrit.common.RawInputUtil; +import com.google.gerrit.extensions.api.accounts.AccountApi; +import com.google.gerrit.extensions.api.accounts.AgreementInput; +import com.google.gerrit.extensions.api.accounts.DeleteDraftCommentsInput; +import com.google.gerrit.extensions.api.accounts.DeletedDraftCommentInfo; +import com.google.gerrit.extensions.api.accounts.EmailApi; +import com.google.gerrit.extensions.api.accounts.EmailInput; +import com.google.gerrit.extensions.api.accounts.GpgKeyApi; +import com.google.gerrit.extensions.api.accounts.SshKeyInput; +import com.google.gerrit.extensions.api.accounts.StatusInput; +import com.google.gerrit.extensions.api.changes.StarsInput; +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.ProjectWatchInfo; +import com.google.gerrit.extensions.common.AccountDetailInfo; +import com.google.gerrit.extensions.common.AccountExternalIdInfo; +import com.google.gerrit.extensions.common.AccountInfo; +import com.google.gerrit.extensions.common.AgreementInfo; +import com.google.gerrit.extensions.common.ChangeInfo; +import com.google.gerrit.extensions.common.EmailInfo; +import com.google.gerrit.extensions.common.GpgKeyInfo; +import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.extensions.common.Input; +import com.google.gerrit.extensions.common.NameInput; +import com.google.gerrit.extensions.common.SshKeyInfo; +import com.google.gerrit.extensions.restapi.IdString; +import com.google.gerrit.extensions.restapi.Response; +import com.google.gerrit.extensions.restapi.RestApiException; +import com.google.gerrit.extensions.restapi.TopLevelResource; +import com.google.gerrit.server.account.AccountLoader; +import com.google.gerrit.server.account.AccountResource; +import com.google.gerrit.server.account.GpgApiAdapter; +import com.google.gerrit.server.change.ChangeResource; +import com.google.gerrit.server.restapi.account.AddSshKey; +import com.google.gerrit.server.restapi.account.CreateEmail; +import com.google.gerrit.server.restapi.account.DeleteActive; +import com.google.gerrit.server.restapi.account.DeleteDraftComments; +import com.google.gerrit.server.restapi.account.DeleteEmail; +import com.google.gerrit.server.restapi.account.DeleteExternalIds; +import com.google.gerrit.server.restapi.account.DeleteSshKey; +import com.google.gerrit.server.restapi.account.DeleteWatchedProjects; +import com.google.gerrit.server.restapi.account.GetActive; +import com.google.gerrit.server.restapi.account.GetAgreements; +import com.google.gerrit.server.restapi.account.GetAvatar; +import com.google.gerrit.server.restapi.account.GetDetail; +import com.google.gerrit.server.restapi.account.GetDiffPreferences; +import com.google.gerrit.server.restapi.account.GetEditPreferences; +import com.google.gerrit.server.restapi.account.GetEmails; +import com.google.gerrit.server.restapi.account.GetExternalIds; +import com.google.gerrit.server.restapi.account.GetGroups; +import com.google.gerrit.server.restapi.account.GetPreferences; +import com.google.gerrit.server.restapi.account.GetSshKeys; +import com.google.gerrit.server.restapi.account.GetWatchedProjects; +import com.google.gerrit.server.restapi.account.Index; +import com.google.gerrit.server.restapi.account.PostWatchedProjects; +import com.google.gerrit.server.restapi.account.PutActive; +import com.google.gerrit.server.restapi.account.PutAgreement; +import com.google.gerrit.server.restapi.account.PutName; +import com.google.gerrit.server.restapi.account.PutStatus; +import com.google.gerrit.server.restapi.account.SetDiffPreferences; +import com.google.gerrit.server.restapi.account.SetEditPreferences; +import com.google.gerrit.server.restapi.account.SetPreferences; +import com.google.gerrit.server.restapi.account.SshKeys; +import com.google.gerrit.server.restapi.account.StarredChanges; +import com.google.gerrit.server.restapi.account.Stars; +import com.google.gerrit.server.restapi.change.ChangesCollection; +import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; +import java.util.List; +import java.util.Map; +import java.util.SortedSet; + +public class AccountApiImpl implements AccountApi { + interface Factory { + AccountApiImpl create(AccountResource account); + } + + private final AccountResource account; + private final ChangesCollection changes; + private final AccountLoader.Factory accountLoaderFactory; + private final GetDetail getDetail; + private final GetAvatar getAvatar; + private final GetPreferences getPreferences; + private final SetPreferences setPreferences; + private final GetDiffPreferences getDiffPreferences; + private final SetDiffPreferences setDiffPreferences; + private final GetEditPreferences getEditPreferences; + private final SetEditPreferences setEditPreferences; + private final GetWatchedProjects getWatchedProjects; + private final PostWatchedProjects postWatchedProjects; + private final DeleteWatchedProjects deleteWatchedProjects; + private final StarredChanges.Create starredChangesCreate; + private final StarredChanges.Delete starredChangesDelete; + private final Stars stars; + private final Stars.Get starsGet; + private final Stars.Post starsPost; + private final GetEmails getEmails; + private final CreateEmail createEmail; + private final DeleteEmail deleteEmail; + private final GpgApiAdapter gpgApiAdapter; + private final GetSshKeys getSshKeys; + private final AddSshKey addSshKey; + private final DeleteSshKey deleteSshKey; + private final SshKeys sshKeys; + private final GetAgreements getAgreements; + private final PutAgreement putAgreement; + private final GetActive getActive; + private final PutActive putActive; + private final DeleteActive deleteActive; + private final Index index; + private final GetExternalIds getExternalIds; + private final DeleteExternalIds deleteExternalIds; + private final DeleteDraftComments deleteDraftComments; + private final PutStatus putStatus; + private final GetGroups getGroups; + private final EmailApiImpl.Factory emailApi; + private final PutName putName; + + @Inject + AccountApiImpl( + AccountLoader.Factory ailf, + ChangesCollection changes, + GetDetail getDetail, + GetAvatar getAvatar, + GetPreferences getPreferences, + SetPreferences setPreferences, + GetDiffPreferences getDiffPreferences, + SetDiffPreferences setDiffPreferences, + GetEditPreferences getEditPreferences, + SetEditPreferences setEditPreferences, + GetWatchedProjects getWatchedProjects, + PostWatchedProjects postWatchedProjects, + DeleteWatchedProjects deleteWatchedProjects, + StarredChanges.Create starredChangesCreate, + StarredChanges.Delete starredChangesDelete, + Stars stars, + Stars.Get starsGet, + Stars.Post starsPost, + GetEmails getEmails, + CreateEmail createEmail, + DeleteEmail deleteEmail, + GpgApiAdapter gpgApiAdapter, + GetSshKeys getSshKeys, + AddSshKey addSshKey, + DeleteSshKey deleteSshKey, + SshKeys sshKeys, + GetAgreements getAgreements, + PutAgreement putAgreement, + GetActive getActive, + PutActive putActive, + DeleteActive deleteActive, + Index index, + GetExternalIds getExternalIds, + DeleteExternalIds deleteExternalIds, + DeleteDraftComments deleteDraftComments, + PutStatus putStatus, + GetGroups getGroups, + EmailApiImpl.Factory emailApi, + PutName putName, + @Assisted AccountResource account) { + this.account = account; + this.accountLoaderFactory = ailf; + this.changes = changes; + this.getDetail = getDetail; + this.getAvatar = getAvatar; + this.getPreferences = getPreferences; + this.setPreferences = setPreferences; + this.getDiffPreferences = getDiffPreferences; + this.setDiffPreferences = setDiffPreferences; + this.getEditPreferences = getEditPreferences; + this.setEditPreferences = setEditPreferences; + this.getWatchedProjects = getWatchedProjects; + this.postWatchedProjects = postWatchedProjects; + this.deleteWatchedProjects = deleteWatchedProjects; + this.starredChangesCreate = starredChangesCreate; + this.starredChangesDelete = starredChangesDelete; + this.stars = stars; + this.starsGet = starsGet; + this.starsPost = starsPost; + this.getEmails = getEmails; + this.createEmail = createEmail; + this.deleteEmail = deleteEmail; + this.getSshKeys = getSshKeys; + this.addSshKey = addSshKey; + this.deleteSshKey = deleteSshKey; + this.sshKeys = sshKeys; + this.gpgApiAdapter = gpgApiAdapter; + this.getAgreements = getAgreements; + this.putAgreement = putAgreement; + this.getActive = getActive; + this.putActive = putActive; + this.deleteActive = deleteActive; + this.index = index; + this.getExternalIds = getExternalIds; + this.deleteExternalIds = deleteExternalIds; + this.deleteDraftComments = deleteDraftComments; + this.putStatus = putStatus; + this.getGroups = getGroups; + this.emailApi = emailApi; + this.putName = putName; + } + + @Override + public com.google.gerrit.extensions.common.AccountInfo get() throws RestApiException { + AccountLoader accountLoader = accountLoaderFactory.create(true); + try { + AccountInfo ai = accountLoader.get(account.getUser().getAccountId()); + accountLoader.fill(); + return ai; + } catch (Exception e) { + throw asRestApiException("Cannot parse account", e); + } + } + + @Override + public AccountDetailInfo detail() throws RestApiException { + try { + return getDetail.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get detail", e); + } + } + + @Override + public boolean getActive() throws RestApiException { + Response<String> result = getActive.apply(account); + return result.statusCode() == SC_OK && result.value().equals("ok"); + } + + @Override + public void setActive(boolean active) throws RestApiException { + try { + if (active) { + putActive.apply(account, new Input()); + } else { + deleteActive.apply(account, new Input()); + } + } catch (Exception e) { + throw asRestApiException("Cannot set active", e); + } + } + + @Override + public String getAvatarUrl(int size) throws RestApiException { + getAvatar.setSize(size); + return getAvatar.apply(account).location(); + } + + @Override + public GeneralPreferencesInfo getPreferences() throws RestApiException { + try { + return getPreferences.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get preferences", e); + } + } + + @Override + public GeneralPreferencesInfo setPreferences(GeneralPreferencesInfo in) throws RestApiException { + try { + return setPreferences.apply(account, in); + } catch (Exception e) { + throw asRestApiException("Cannot set preferences", e); + } + } + + @Override + public DiffPreferencesInfo getDiffPreferences() throws RestApiException { + try { + return getDiffPreferences.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot query diff preferences", e); + } + } + + @Override + public DiffPreferencesInfo setDiffPreferences(DiffPreferencesInfo in) throws RestApiException { + try { + return setDiffPreferences.apply(account, in); + } catch (Exception e) { + throw asRestApiException("Cannot set diff preferences", e); + } + } + + @Override + public EditPreferencesInfo getEditPreferences() throws RestApiException { + try { + return getEditPreferences.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot query edit preferences", e); + } + } + + @Override + public EditPreferencesInfo setEditPreferences(EditPreferencesInfo in) throws RestApiException { + try { + return setEditPreferences.apply(account, in); + } catch (Exception e) { + throw asRestApiException("Cannot set edit preferences", e); + } + } + + @Override + public List<ProjectWatchInfo> getWatchedProjects() throws RestApiException { + try { + return getWatchedProjects.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get watched projects", e); + } + } + + @Override + public List<ProjectWatchInfo> setWatchedProjects(List<ProjectWatchInfo> in) + throws RestApiException { + try { + return postWatchedProjects.apply(account, in); + } catch (Exception e) { + throw asRestApiException("Cannot update watched projects", e); + } + } + + @Override + public void deleteWatchedProjects(List<ProjectWatchInfo> in) throws RestApiException { + try { + deleteWatchedProjects.apply(account, in); + } catch (Exception e) { + throw asRestApiException("Cannot delete watched projects", e); + } + } + + @Override + public void starChange(String changeId) throws RestApiException { + try { + starredChangesCreate.apply( + account, IdString.fromUrl(changeId), new StarredChanges.EmptyInput()); + } catch (Exception e) { + throw asRestApiException("Cannot star change", e); + } + } + + @Override + public void unstarChange(String changeId) throws RestApiException { + try { + ChangeResource rsrc = changes.parse(TopLevelResource.INSTANCE, IdString.fromUrl(changeId)); + AccountResource.StarredChange starredChange = + new AccountResource.StarredChange(account.getUser(), rsrc); + starredChangesDelete.apply(starredChange, new StarredChanges.EmptyInput()); + } catch (Exception e) { + throw asRestApiException("Cannot unstar change", e); + } + } + + @Override + public void setStars(String changeId, StarsInput input) throws RestApiException { + try { + AccountResource.Star rsrc = stars.parse(account, IdString.fromUrl(changeId)); + starsPost.apply(rsrc, input); + } catch (Exception e) { + throw asRestApiException("Cannot post stars", e); + } + } + + @Override + public SortedSet<String> getStars(String changeId) throws RestApiException { + try { + AccountResource.Star rsrc = stars.parse(account, IdString.fromUrl(changeId)); + return starsGet.apply(rsrc); + } catch (Exception e) { + throw asRestApiException("Cannot get stars", e); + } + } + + @Override + public List<ChangeInfo> getStarredChanges() throws RestApiException { + try { + return stars.list().apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get starred changes", e); + } + } + + @Override + public List<GroupInfo> getGroups() throws RestApiException { + try { + return getGroups.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get groups", e); + } + } + + @Override + public List<EmailInfo> getEmails() throws RestApiException { + try { + return getEmails.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get emails", e); + } + } + + @Override + public void addEmail(EmailInput input) throws RestApiException { + AccountResource.Email rsrc = new AccountResource.Email(account.getUser(), input.email); + try { + createEmail.apply(rsrc, IdString.fromDecoded(input.email), input); + } catch (Exception e) { + throw asRestApiException("Cannot add email", e); + } + } + + @Override + public void deleteEmail(String email) throws RestApiException { + AccountResource.Email rsrc = new AccountResource.Email(account.getUser(), email); + try { + deleteEmail.apply(rsrc, null); + } catch (Exception e) { + throw asRestApiException("Cannot delete email", e); + } + } + + @Override + public EmailApi createEmail(EmailInput input) throws RestApiException { + AccountResource.Email rsrc = new AccountResource.Email(account.getUser(), input.email); + try { + createEmail.apply(rsrc, IdString.fromDecoded(input.email), input); + return email(rsrc.getEmail()); + } catch (Exception e) { + throw asRestApiException("Cannot create email", e); + } + } + + @Override + public EmailApi email(String email) throws RestApiException { + try { + return emailApi.create(account, email); + } catch (Exception e) { + throw asRestApiException("Cannot parse email", e); + } + } + + @Override + public void setStatus(String status) throws RestApiException { + StatusInput in = new StatusInput(status); + try { + putStatus.apply(account, in); + } catch (Exception e) { + throw asRestApiException("Cannot set status", e); + } + } + + @Override + public List<SshKeyInfo> listSshKeys() throws RestApiException { + try { + return getSshKeys.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot list SSH keys", e); + } + } + + @Override + public SshKeyInfo addSshKey(String key) throws RestApiException { + SshKeyInput in = new SshKeyInput(); + in.raw = RawInputUtil.create(key); + try { + return addSshKey.apply(account, in).value(); + } catch (Exception e) { + throw asRestApiException("Cannot add SSH key", e); + } + } + + @Override + public void deleteSshKey(int seq) throws RestApiException { + try { + AccountResource.SshKey sshKeyRes = + sshKeys.parse(account, IdString.fromDecoded(Integer.toString(seq))); + deleteSshKey.apply(sshKeyRes, null); + } catch (Exception e) { + throw asRestApiException("Cannot delete SSH key", e); + } + } + + @Override + public Map<String, GpgKeyInfo> listGpgKeys() throws RestApiException { + try { + return gpgApiAdapter.listGpgKeys(account); + } catch (Exception e) { + throw asRestApiException("Cannot list GPG keys", e); + } + } + + @Override + public Map<String, GpgKeyInfo> putGpgKeys(List<String> add, List<String> delete) + throws RestApiException { + try { + return gpgApiAdapter.putGpgKeys(account, add, delete); + } catch (Exception e) { + throw asRestApiException("Cannot add GPG key", e); + } + } + + @Override + public GpgKeyApi gpgKey(String id) throws RestApiException { + try { + return gpgApiAdapter.gpgKey(account, IdString.fromDecoded(id)); + } catch (Exception e) { + throw asRestApiException("Cannot get PGP key", e); + } + } + + @Override + public List<AgreementInfo> listAgreements() throws RestApiException { + try { + return getAgreements.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get agreements", e); + } + } + + @Override + public void signAgreement(String agreementName) throws RestApiException { + try { + AgreementInput input = new AgreementInput(); + input.name = agreementName; + putAgreement.apply(account, input); + } catch (Exception e) { + throw asRestApiException("Cannot sign agreement", e); + } + } + + @Override + public void index() throws RestApiException { + try { + index.apply(account, new Input()); + } catch (Exception e) { + throw asRestApiException("Cannot index account", e); + } + } + + @Override + public List<AccountExternalIdInfo> getExternalIds() throws RestApiException { + try { + return getExternalIds.apply(account); + } catch (Exception e) { + throw asRestApiException("Cannot get external IDs", e); + } + } + + @Override + public void deleteExternalIds(List<String> externalIds) throws RestApiException { + try { + deleteExternalIds.apply(account, externalIds); + } catch (Exception e) { + throw asRestApiException("Cannot delete external IDs", e); + } + } + + @Override + public List<DeletedDraftCommentInfo> deleteDraftComments(DeleteDraftCommentsInput input) + throws RestApiException { + try { + return deleteDraftComments.apply(account, input); + } catch (Exception e) { + throw asRestApiException("Cannot delete draft comments", e); + } + } + + @Override + public void setName(String name) throws RestApiException { + NameInput input = new NameInput(); + input.name = name; + try { + putName.apply(account, input); + } catch (Exception e) { + throw asRestApiException("Cannot set account name", e); + } + } +} |