1
1
// Copyright (C) 2011 The Android Open Source Project
2
2
// Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
3
- // Copyright (C) 2019 The Qt Company
3
+ // Copyright (C) 2020 The Qt Company
4
4
//
5
5
// Licensed under the Apache License, Version 2.0 (the "License");
6
6
// you may not use this file except in compliance with the License.
16
16
17
17
package com .googlesource .gerrit .plugins .qtcodereview ;
18
18
19
+ import com .google .common .base .Supplier ;
20
+ import com .google .common .base .Suppliers ;
19
21
import com .google .common .flogger .FluentLogger ;
20
22
import com .google .gerrit .common .FooterConstants ;
23
+ import com .google .gerrit .exceptions .StorageException ;
24
+ import com .google .gerrit .extensions .registration .DynamicItem ;
21
25
import com .google .gerrit .extensions .restapi .RestApiException ;
22
26
import com .google .gerrit .reviewdb .client .Branch ;
23
27
import com .google .gerrit .reviewdb .client .Change ;
24
28
import com .google .gerrit .reviewdb .client .PatchSet ;
25
29
import com .google .gerrit .reviewdb .client .Project ;
26
30
import com .google .gerrit .server .ChangeMessagesUtil ;
27
31
import com .google .gerrit .server .IdentifiedUser ;
32
+ import com .google .gerrit .server .data .ChangeAttribute ;
28
33
import com .google .gerrit .server .extensions .events .GitReferenceUpdated ;
34
+ import com .google .gerrit .server .events .ChangeEvent ;
35
+ import com .google .gerrit .server .events .EventDispatcher ;
36
+ import com .google .gerrit .server .events .EventFactory ;
37
+ import com .google .gerrit .server .notedb .ChangeNotes ;
38
+ import com .google .gerrit .server .permissions .PermissionBackendException ;
29
39
import com .google .gerrit .server .project .NoSuchRefException ;
30
40
import com .google .gerrit .server .query .change .ChangeData ;
31
41
import com .google .gerrit .server .query .change .InternalChangeQuery ;
@@ -79,6 +89,9 @@ public class QtUtil {
79
89
private final Provider <InternalChangeQuery > queryProvider ;
80
90
private final GitReferenceUpdated referenceUpdated ;
81
91
private final BatchUpdate .Factory updateFactory ;
92
+ private final ChangeNotes .Factory changeNotesFactory ;
93
+ private final DynamicItem <EventDispatcher > eventDispatcher ;
94
+ private final EventFactory eventFactory ;
82
95
private final QtCherryPickPatch qtCherryPickPatch ;
83
96
private final QtChangeUpdateOp .Factory qtUpdateFactory ;
84
97
@@ -87,11 +100,17 @@ public class QtUtil {
87
100
Provider <InternalChangeQuery > queryProvider ,
88
101
GitReferenceUpdated referenceUpdated ,
89
102
BatchUpdate .Factory updateFactory ,
103
+ ChangeNotes .Factory changeNotesFactory ,
104
+ EventFactory eventFactory ,
105
+ DynamicItem <EventDispatcher > eventDispatcher ,
90
106
QtCherryPickPatch qtCherryPickPatch ,
91
107
QtChangeUpdateOp .Factory qtUpdateFactory ) {
92
108
this .queryProvider = queryProvider ;
93
109
this .referenceUpdated = referenceUpdated ;
94
110
this .updateFactory = updateFactory ;
111
+ this .changeNotesFactory = changeNotesFactory ;
112
+ this .eventDispatcher = eventDispatcher ;
113
+ this .eventFactory = eventFactory ;
95
114
this .qtCherryPickPatch = qtCherryPickPatch ;
96
115
this .qtUpdateFactory = qtUpdateFactory ;
97
116
}
@@ -642,4 +661,38 @@ private static RefUpdate.Result mergeObjectToBranch(
642
661
revWalk .dispose ();
643
662
}
644
663
}
664
+
665
+ private Supplier <ChangeAttribute > changeAttributeSupplier (Change change , ChangeNotes notes ) {
666
+ return Suppliers .memoize (
667
+ () -> {
668
+ try {
669
+ return eventFactory .asChangeAttribute (change , notes );
670
+ } catch (StorageException e ) {
671
+ throw new RuntimeException (e );
672
+ }
673
+ });
674
+ }
675
+
676
+ public void postChangeStagedEvent (Change change ) {
677
+ try {
678
+ ChangeNotes notes = changeNotesFactory .createChecked (change .getId ());
679
+ QtChangeStagedEvent event = new QtChangeStagedEvent (change );
680
+ event .change = changeAttributeSupplier (change , notes );
681
+ eventDispatcher .get ().postEvent (event );
682
+ } catch (StorageException | PermissionBackendException e ) {
683
+ logger .atWarning ().log ("qtcodereview: postChangeStagedEvent failed: %s" , e );
684
+ }
685
+ }
686
+
687
+ public void postChangeUnStagedEvent (Change change ) {
688
+ try {
689
+ ChangeNotes notes = changeNotesFactory .createChecked (change .getId ());
690
+ QtChangeUnStagedEvent event = new QtChangeUnStagedEvent (change );
691
+ event .change = changeAttributeSupplier (change , notes );
692
+ eventDispatcher .get ().postEvent (event );
693
+ } catch (StorageException | PermissionBackendException e ) {
694
+ logger .atWarning ().log ("qtcodereview: postChangeUnStagedEvent failed: %s" , e );
695
+ }
696
+ }
697
+
645
698
}
0 commit comments