diff options
Diffstat (limited to 'gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/SubmitAction.java')
-rw-r--r-- | gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/SubmitAction.java | 60 |
1 files changed, 16 insertions, 44 deletions
diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/SubmitAction.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/SubmitAction.java index 721656c033..80100ada27 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/SubmitAction.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/changedetail/SubmitAction.java @@ -14,23 +14,16 @@ package com.google.gerrit.httpd.rpc.changedetail; -import com.google.gerrit.common.data.ApprovalTypes; import com.google.gerrit.common.data.ChangeDetail; +import com.google.gerrit.common.data.ReviewResult; import com.google.gerrit.common.errors.NoSuchEntityException; import com.google.gerrit.httpd.rpc.Handler; -import com.google.gerrit.reviewdb.Change; -import com.google.gerrit.reviewdb.PatchSet; -import com.google.gerrit.reviewdb.ReviewDb; -import com.google.gerrit.server.ChangeUtil; -import com.google.gerrit.server.IdentifiedUser; -import com.google.gerrit.server.git.MergeOp; -import com.google.gerrit.server.git.MergeQueue; +import com.google.gerrit.reviewdb.client.PatchSet; +import com.google.gerrit.server.changedetail.Submit; import com.google.gerrit.server.patch.PatchSetInfoNotAvailableException; -import com.google.gerrit.server.project.CanSubmitResult; -import com.google.gerrit.server.project.ChangeControl; +import com.google.gerrit.server.project.InvalidChangeOperationException; import com.google.gerrit.server.project.NoSuchChangeException; -import com.google.gerrit.server.workflow.FunctionState; -import com.google.gwtorm.client.OrmException; +import com.google.gwtorm.server.OrmException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; @@ -39,52 +32,31 @@ class SubmitAction extends Handler<ChangeDetail> { SubmitAction create(PatchSet.Id patchSetId); } - private final ReviewDb db; - private final MergeQueue merger; - private final ApprovalTypes approvalTypes; - private final FunctionState.Factory functionState; - private final IdentifiedUser user; + private final Submit.Factory submitFactory; private final ChangeDetailFactory.Factory changeDetailFactory; - private final ChangeControl.Factory changeControlFactory; - private final MergeOp.Factory opFactory; private final PatchSet.Id patchSetId; @Inject - SubmitAction(final ReviewDb db, final MergeQueue mq, final ApprovalTypes at, - final FunctionState.Factory fs, final IdentifiedUser user, + SubmitAction(final Submit.Factory submitFactory, final ChangeDetailFactory.Factory changeDetailFactory, - final ChangeControl.Factory changeControlFactory, - final MergeOp.Factory opFactory, @Assisted final PatchSet.Id patchSetId) { - this.db = db; - this.merger = mq; - this.approvalTypes = at; - this.functionState = fs; - this.user = user; - this.changeControlFactory = changeControlFactory; + this.submitFactory = submitFactory; this.changeDetailFactory = changeDetailFactory; - this.opFactory = opFactory; this.patchSetId = patchSetId; } @Override public ChangeDetail call() throws OrmException, NoSuchEntityException, - IllegalStateException, PatchSetInfoNotAvailableException, - NoSuchChangeException { - - final Change.Id changeId = patchSetId.getParentKey(); - final ChangeControl changeControl = - changeControlFactory.validateFor(changeId); - - CanSubmitResult err = - changeControl.canSubmit(patchSetId, db, approvalTypes, functionState); - if (err == CanSubmitResult.OK) { - ChangeUtil.submit(patchSetId, user, db, opFactory, merger); - return changeDetailFactory.create(changeId).call(); - } else { - throw new IllegalStateException(err.getMessage()); + IllegalStateException, InvalidChangeOperationException, + PatchSetInfoNotAvailableException, NoSuchChangeException { + final ReviewResult result = + submitFactory.create(patchSetId).call(); + if (result.getErrors().size() > 0) { + throw new IllegalStateException( + "Cannot submit " + result.getErrors().get(0).getMessageOrType()); } + return changeDetailFactory.create(result.getChangeId()).call(); } } |