Guest User

Untitled

a guest
Sep 27th, 2013
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.43 KB | None | 0 0
  1. @RequiresCapability(WorkInProgressCapability.WORK_IN_PROGRESS)
  2. class WorkInProgressAction implements UiAction<ChangeResource>,
  3. RestModifyView<ChangeResource, WorkInProgressAction.Input> {
  4. private static final Logger log = LoggerFactory
  5. .getLogger(WorkInProgressAction.class);
  6.  
  7. static class Input {
  8. String message;
  9. }
  10.  
  11. private final Provider<ReviewDb> dbProvider;
  12.  
  13. @Inject
  14. WorkInProgressAction(Provider<ReviewDb> dbProvider) {
  15. this.dbProvider = dbProvider;
  16. }
  17.  
  18. @Override
  19. public String apply(ChangeResource rsrc, Input input)
  20. throws ResourceConflictException {
  21. ChangeControl control = rsrc.getControl();
  22. if (!control.getCurrentUser().isIdentifiedUser()) {
  23. throw new AuthException("not permitted to modify change status");
  24. }
  25. IdentifiedUser caller = (IdentifiedUser) control.getCurrentUser();
  26. Change change = rsrc.getChange();
  27. if (change.getStatus() != Status.NEW) {
  28. throw new ResourceConflictException("change is " + status(change));
  29. }
  30. ChangeMessage message;
  31. ReviewDb db = dbProvider.get();
  32. db.changes().beginTransaction(change.getId());
  33. try {
  34. change = db.changes().atomicUpdate(
  35. change.getId(),
  36. new AtomicUpdate<Change>() {
  37. @Override
  38. public Change update(Change change) {
  39. if (change.getStatus() == Status.NEW) {
  40. change.setStatus(Status.WORKINPROGRESS);
  41. ChangeUtil.updated(change);
  42. return change;
  43. }
  44. return null;
  45. }
  46. });
  47. if (change == null) {
  48. throw new ResourceConflictException("change is "
  49. + status(db.changes().get(rsrc.getChange().getId())));
  50. }
  51. // TODO(davido): Do we need to reindex that change?
  52. //indexer.index(change);
  53. message = newMessage(input, caller, change);
  54. db.changeMessages().insert(Collections.singleton(message));
  55. new ApprovalsUtil(db).syncChangeStatus(change);
  56. db.commit();
  57. } finally {
  58. db.rollback();
  59. }
  60.  
  61. try {
  62. ReplyToChangeSender cm = restoredSenderFactory.create(change);
  63. cm.setFrom(caller.getAccountId());
  64. cm.setChangeMessage(message);
  65. cm.send();
  66. } catch (Exception e) {
  67. log.error("Cannot email update for change " + change.getChangeId(), e);
  68. }
  69. return String.format("changed");
  70. }
  71.  
  72. @Override
  73. public Description getDescription(ChangeResource resource) {
  74. return new Description()
  75. .setLabel("Work In Progress")
  76. .setTitle("Set Work In Progress");
  77. }
  78.  
  79. private ChangeMessage newMessage(Input input, IdentifiedUser caller,
  80. Change change) throws OrmException {
  81. StringBuilder msg = new StringBuilder(
  82. "Change "
  83. + change.getId().get()
  84. + ": Work In Progress");
  85. if (!Strings.nullToEmpty(input.message).trim().isEmpty()) {
  86. msg.append("\n\n");
  87. msg.append(input.message.trim());
  88. }
  89.  
  90. ChangeMessage message = new ChangeMessage(
  91. new ChangeMessage.Key(
  92. change.getId(),
  93. ChangeUtil.messageUUID(dbProvider.get())),
  94. caller.getAccountId(),
  95. change.getLastUpdatedOn(),
  96. change.currentPatchSetId());
  97. message.setMessage(msg.toString());
  98. return message;
  99. }
  100.  
  101. private static String status(Change change) {
  102. return change != null
  103. ? change.getStatus().name().toLowerCase()
  104. : "deleted";
  105. }
  106. }
Advertisement
Add Comment
Please, Sign In to add comment