From b25a2d41daf47d34d9cb069eb224ef482d664a8e Mon Sep 17 00:00:00 2001 From: Dave Borowitz Date: Fri, 13 Mar 2015 10:46:00 -0700 Subject: [PATCH] ChildProjectResource: Use composition instead of inheritance It was confusing that the project of the ChildProjectResource was actually the parent project, due to using inheritance. This was causing us to accidentally put the parent project name in the ResourceNotFoundException when parsing a resource. Change-Id: I94fe6522f1b11e81b677eb4cfda293ec991ff39f --- .../server/project/ChildProjectResource.java | 18 ++++++++++++------ .../gerrit/server/project/GetChildProject.java | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/ChildProjectResource.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/ChildProjectResource.java index f68acddc14..4257825c98 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/ChildProjectResource.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/ChildProjectResource.java @@ -15,28 +15,34 @@ package com.google.gerrit.server.project; import com.google.common.collect.Iterables; +import com.google.gerrit.extensions.restapi.RestResource; import com.google.gerrit.extensions.restapi.RestView; import com.google.inject.TypeLiteral; -public class ChildProjectResource extends ProjectResource { +public class ChildProjectResource implements RestResource { public static final TypeLiteral> CHILD_PROJECT_KIND = new TypeLiteral>() {}; + private final ProjectResource parent; private final ProjectControl child; - public ChildProjectResource(ProjectResource project, ProjectControl child) { - super(project); + public ChildProjectResource(ProjectResource parent, ProjectControl child) { + this.parent = parent; this.child = child; } + public ProjectResource getParent() { + return parent; + } + public ProjectControl getChild() { return child; } public boolean isDirectChild() { - ProjectState parent = + ProjectState firstParent = Iterables.getFirst(child.getProjectState().parents(), null); - return parent != null - && getNameKey().equals(parent.getProject().getNameKey()); + return firstParent != null + && parent.getNameKey().equals(firstParent.getProject().getNameKey()); } } diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetChildProject.java b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetChildProject.java index 815653ff8d..2218ac0ca9 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/project/GetChildProject.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/project/GetChildProject.java @@ -38,6 +38,6 @@ public class GetChildProject implements RestReadView { if (recursive || rsrc.isDirectChild()) { return json.format(rsrc.getChild().getProject()); } - throw new ResourceNotFoundException(rsrc.getName()); + throw new ResourceNotFoundException(rsrc.getChild().getProject().getName()); } }