Build with 2.16 API Change-Id: I291cf659fdce5c146910ef068bad5722d71034e3
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java index 9f71e9d..8c17842 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/DeleteImage.java
@@ -71,15 +71,15 @@ throws AuthException, ResourceConflictException, RepositoryNotFoundException, IOException, ResourceNotFoundException, PermissionBackendException { - if (!permissionBackend.user(self).ref(rsrc.getBranchKey()).testOrFalse(RefPermission.DELETE)) { + if (!permissionBackend.currentUser().ref(rsrc.getBranchKey()).testOrFalse(RefPermission.DELETE)) { permissionBackend - .user(self) + .currentUser() .test(new PluginPermission(pluginName, DeleteOwnImagesCapability.DELETE_OWN_IMAGES)); } try (Repository r = repoManager.openRepository(rsrc.getProject())) { if (!permissionBackend - .user(self) + .currentUser() .ref(rsrc.getBranchKey()) .testOrFalse(RefPermission.DELETE)) { validateOwnImage(r, rsrc.getRef()); @@ -101,7 +101,7 @@ case NO_CHANGE: case FAST_FORWARD: case FORCED: - referenceUpdated.fire(rsrc.getProject(), u, self.get().getAccount()); + referenceUpdated.fire(rsrc.getProject(), u, self.get().state()); break; case REJECTED_CURRENT_BRANCH:
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java index 4c5041b..e69b27d 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/GetPreference.java
@@ -60,10 +60,10 @@ @Override public ConfigInfo apply(AccountResource rsrc) throws AuthException, PermissionBackendException { if (self.get() != rsrc.getUser()) { - permissionBackend.user(self).check(ADMINISTRATE_SERVER); + permissionBackend.currentUser().check(ADMINISTRATE_SERVER); } - String username = self.get().getUserName(); + String username = self.get().getUserName().get(); ConfigInfo globalCfg = getConfig.get().apply(new ConfigResource());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java index 131ae51..4fab002 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageResource.java
@@ -18,32 +18,28 @@ import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.reviewdb.client.Branch; import com.google.gerrit.reviewdb.client.Project; -import com.google.gerrit.server.project.RefControl; + import com.google.inject.TypeLiteral; public class ImageResource implements RestResource { public static final TypeLiteral<RestView<ImageResource>> IMAGE_KIND = new TypeLiteral<RestView<ImageResource>>() {}; - private final RefControl refControl; + private Branch.NameKey branchName; - ImageResource(RefControl refControl) { - this.refControl = refControl; - } - - public RefControl getControl() { - return refControl; + ImageResource(Branch.NameKey branchName) { + this.branchName = branchName; } public Project.NameKey getProject() { - return refControl.getProjectControl().getProject().getNameKey(); + return branchName.getParentKey(); } public String getRef() { - return refControl.getRefName(); + return branchName.get(); } public Branch.NameKey getBranchKey() { - return new Branch.NameKey(getProject(), getRef()); + return branchName; } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java index 6c52b46..f05d7e7 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImageServlet.java
@@ -31,14 +31,13 @@ import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.permissions.RefPermission; -import com.google.gerrit.server.project.CommitsCollection; -import com.google.gerrit.server.project.GetHead; +import com.google.gerrit.server.restapi.project.CommitsCollection; +import com.google.gerrit.server.restapi.project.GetHead; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.ProjectCache; -import com.google.gerrit.server.project.ProjectControl; import com.google.gerrit.server.project.ProjectResource; import com.google.gerrit.server.project.ProjectState; -import com.google.gwtexpui.server.CacheHeaders; +import com.google.gerrit.util.http.CacheHeaders; import com.google.inject.Inject; import com.google.inject.Provider; import com.google.inject.Singleton; @@ -67,7 +66,6 @@ public static final String PATH_PREFIX = "/project/"; private final String pluginName; - private final ProjectControl.Factory projectControlFactory; private final ProjectCache projectCache; private final Provider<GetHead> getHead; private final GitRepositoryManager repoManager; @@ -79,7 +77,6 @@ @Inject ImageServlet( @PluginName String pluginName, - ProjectControl.Factory projectControlFactory, ProjectCache projectCache, Provider<GetHead> getHead, GitRepositoryManager repoManager, @@ -88,7 +85,6 @@ Provider<CurrentUser> self, PermissionBackend permissionBackend) { this.pluginName = pluginName; - this.projectControlFactory = projectControlFactory; this.projectCache = projectCache; this.getHead = getHead; this.repoManager = repoManager; @@ -120,16 +116,16 @@ } try { - ProjectControl projectControl = projectControlFactory.controlFor(key.project); + ProjectState projectState = projectCache.get(key.project); String rev = key.revision; if (rev == null || Constants.HEAD.equals(rev)) { - rev = getHead.get().apply(new ProjectResource(projectControl)); + rev = getHead.get().apply(new ProjectResource(projectState, self.get())); } else { if (!ObjectId.isId(rev)) { if (!rev.startsWith(Constants.R_REFS)) { rev = Constants.R_HEADS + rev; } - PermissionBackend.ForProject perm = permissionBackend.user(self).project(key.project); + PermissionBackend.ForProject perm = permissionBackend.currentUser().project(key.project); try { perm.ref(rev).check(RefPermission.READ); } catch (AuthException e) { @@ -203,7 +199,6 @@ } } } catch (RepositoryNotFoundException - | NoSuchProjectException | ResourceNotFoundException | AuthException | RevisionSyntaxException
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagesCollection.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagesCollection.java index 2edaae3..47aea1c 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagesCollection.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/ImagesCollection.java
@@ -15,7 +15,6 @@ package com.googlesource.gerrit.plugins.imagare; import com.google.gerrit.extensions.registration.DynamicMap; -import com.google.gerrit.extensions.restapi.AcceptsPost; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; @@ -29,7 +28,7 @@ import com.google.inject.Provider; public class ImagesCollection - implements ChildCollection<ProjectResource, ImageResource>, AcceptsPost<ProjectResource> { + implements ChildCollection<ProjectResource, ImageResource> { private final DynamicMap<RestView<ImageResource>> views; private final Provider<PostImage> createImage; private final PermissionBackend permissionBackend; @@ -53,10 +52,10 @@ public ImageResource parse(ProjectResource parent, IdString id) throws ResourceNotFoundException { Branch.NameKey branchName = new Branch.NameKey(parent.getNameKey(), id.get()); if (permissionBackend - .user(parent.getControl().getUser()) + .user(parent.getUser()) .ref(branchName) .testOrFalse(RefPermission.READ)) { - return new ImageResource(parent.getControl().controlForRef(branchName)); + return new ImageResource(branchName); } throw new ResourceNotFoundException(id); } @@ -65,9 +64,4 @@ public DynamicMap<RestView<ImageResource>> views() { return views; } - - @Override - public PostImage post(ProjectResource parent) throws RestApiException { - return createImage.get(); - } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/Module.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/Module.java index b9ecf0a..c6aade0 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/Module.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/Module.java
@@ -55,6 +55,7 @@ bind(ImagesCollection.class); child(PROJECT_KIND, "images").to(ImagesCollection.class); delete(IMAGE_KIND).to(DeleteImage.class); + post(PROJECT_KIND, "images").to(PostImage.class); } }); }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java index f1b54d3..0a330f1 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PostImage.java
@@ -34,10 +34,11 @@ import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.CreateRefControl; import com.google.gerrit.server.project.NoSuchProjectException; -import com.google.gerrit.server.project.ProjectControl; import com.google.gerrit.server.project.ProjectResource; +import com.google.gerrit.server.project.ProjectState; import com.google.inject.Inject; import com.google.inject.Provider; +import com.google.inject.Singleton; import com.googlesource.gerrit.plugins.imagare.PostImage.Input; import eu.medsea.mimeutil.MimeType; import java.io.IOException; @@ -56,8 +57,8 @@ import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.util.Base64; +@Singleton public class PostImage implements RestModifyView<ProjectResource, Input> { - public static class Input { public String imageData; public String fileName; @@ -102,14 +103,14 @@ } ImageInfo info; if (input.imageData != null) { - info = storeImage(rsrc.getControl(), input.imageData, input.fileName); + info = storeImage(rsrc.getProjectState(), input.imageData, input.fileName); } else { throw new BadRequestException("no image data"); } return Response.created(info); } - private ImageInfo storeImage(ProjectControl pc, String imageData, String fileName) + private ImageInfo storeImage(ProjectState ps, String imageData, String fileName) throws RestApiException, IOException, PermissionBackendException, NoSuchProjectException { Matcher m = imageDataPattern.matcher(imageData); if (m.matches()) { @@ -135,17 +136,17 @@ if (!receivedMimeType.equals(mimeType.toString())) { throw new BadRequestException("incorrect mime type"); } - return new ImageInfo(storeImage(pc, content, fileName)); + return new ImageInfo(storeImage(ps, content, fileName)); } throw new MethodNotAllowedException("unsupported encoding"); } throw new BadRequestException("invalid image data"); } - private String storeImage(ProjectControl pc, byte[] content, String fileName) + private String storeImage(ProjectState ps, byte[] content, String fileName) throws AuthException, IOException, ResourceConflictException, PermissionBackendException, NoSuchProjectException { - long maxSize = pc.getProjectState().getEffectiveMaxObjectSizeLimit().value; + long maxSize = ps.getEffectiveMaxObjectSizeLimit().value; // maxSize == 0 means that there is no limit if (maxSize > 0 && content.length > maxSize) { throw new ResourceConflictException("image too large"); @@ -153,11 +154,11 @@ String ref = getRef(content, fileName); - try (Repository repo = repoManager.openRepository(pc.getProject().getNameKey())) { + try (Repository repo = repoManager.openRepository(ps.getProject().getNameKey())) { ObjectId commitId = repo.resolve(ref); if (commitId != null) { // this image exists already - return getUrl(pc.getProject().getNameKey(), ref, fileName); + return getUrl(ps.getProject().getNameKey(), ref, fileName); } try (RevWalk rw = new RevWalk(repo); @@ -185,11 +186,11 @@ createRefControl.checkCreateRef( self, repo, - new Branch.NameKey(pc.getProject().getNameKey(), ref), + new Branch.NameKey(ps.getProject().getNameKey(), ref), rw.parseCommit(commitId)); } catch (AuthException e) { throw new AuthException( - String.format("Project %s doesn't allow image upload.", pc.getProject().getName())); + String.format("Project %s doesn't allow image upload.", ps.getProject().getName())); } RefUpdate ru = repo.updateRef(ref); @@ -197,15 +198,15 @@ ru.setNewObjectId(commitId); ru.disableRefLog(); if (ru.update(rw) == RefUpdate.Result.NEW) { - referenceUpdated.fire(pc.getProject().getNameKey(), ru, self.get().getAccount()); + referenceUpdated.fire(ps.getProject().getNameKey(), ru, self.get().state()); } else { throw new IOException( String.format( "Failed to create ref %s in %s: %s", - ref, pc.getProject().getName(), ru.getResult())); + ref, ps.getProject().getName(), ru.getResult())); } - return getUrl(pc.getProject().getNameKey(), ref, fileName); + return getUrl(ps.getProject().getNameKey(), ref, fileName); } } }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java index 025475a..ffd00d4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java +++ b/src/main/java/com/googlesource/gerrit/plugins/imagare/PutPreference.java
@@ -29,11 +29,11 @@ import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.IdentifiedUser; import com.google.gerrit.server.account.AccountResource; -import com.google.gerrit.server.git.MetaDataUpdate; -import com.google.gerrit.server.git.ProjectLevelConfig; +import com.google.gerrit.server.git.meta.MetaDataUpdate; import com.google.gerrit.server.permissions.PermissionBackend; import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.ProjectCache; +import com.google.gerrit.server.project.ProjectLevelConfig; import com.google.inject.Inject; import com.google.inject.Provider; import com.googlesource.gerrit.plugins.imagare.PutConfig.Input; @@ -67,13 +67,13 @@ throws AuthException, RepositoryNotFoundException, IOException, UnprocessableEntityException, PermissionBackendException { if (self.get() != rsrc.getUser()) { - permissionBackend.user(self).check(ADMINISTRATE_SERVER); + permissionBackend.currentUser().check(ADMINISTRATE_SERVER); } if (input == null) { input = new Input(); } - String username = self.get().getUserName(); + String username = self.get().getUserName().get(); ProjectLevelConfig storage = projectCache.getAllProjects().getConfig(pluginName + ".config"); Config db = storage.get();