1111import java .nio .file .Paths ;
1212import java .util .Arrays ;
1313import java .util .List ;
14+ import java .util .Map ;
15+ import java .util .Map .Entry ;
1416import java .util .Objects ;
1517
1618import com .fasterxml .jackson .annotation .JsonAutoDetect .Visibility ;
@@ -96,6 +98,10 @@ public static Config createConfig(Schema schema) {
9698 Type project = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "Project" );
9799 Type board = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "Board" );
98100 Type epicBoard = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "EpicBoard" );
101+ Type milestoneConnection = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "MilestoneConnection" );
102+ Type milestone = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "Milestone" );
103+ Type releaseConnection = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "ReleaseConnection" );
104+ Type release = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "Release" );
99105
100106 SchemaUtil .getFieldByName (schema , boardList , "id" )
101107 .getType ()
@@ -112,9 +118,9 @@ public static Config createConfig(Schema schema) {
112118 schema .getTypes ()
113119 .add (createWorkItemRef ());
114120 schema .getTypes ()
115- .add (createBoardRef (mapper , board ));
121+ .add (createDuplicatedRefType (mapper , board ));
116122 schema .getTypes ()
117- .add (createEpicBoardRef (mapper , epicBoard ));
123+ .add (createDuplicatedRefType (mapper , epicBoard ));
118124 schema .getTypes ()
119125 .add (createProjectContainingSingleIssueBoard (mapper , project ));
120126 schema .getTypes ()
@@ -131,8 +137,19 @@ public static Config createConfig(Schema schema) {
131137 .add (createProjectContainingIssueBoards (mapper , project ));
132138 schema .getTypes ()
133139 .add (createProjectContainingReleases (mapper , project ));
140+ schema .getTypes ()
141+ .add (createDuplicatedRefType (mapper , releaseConnection , Map .of ("Release" , "ReleaseRef" )));
142+ schema .getTypes ()
143+ .add (createDuplicatedRefType (mapper , release ));
134144 schema .getTypes ()
135145 .add (createProjectContainingMilestones (mapper , project ));
146+ schema .getTypes ()
147+ .add (createDuplicatedRefType (mapper , milestoneConnection , Map .of ("Milestone" , "MilestoneRef" )));
148+ schema .getTypes ()
149+ .add (createDuplicatedRefType (mapper , milestone ));
150+
151+ applyRenamingsOnFields (release , Map .of ("MilestoneConnection" , "MilestoneConnectionRef" ));
152+ applyRenamingsOnFields (milestone , Map .of ("ReleaseConnection" , "ReleaseConnectionRef" ));
136153
137154 //See: https://gitlab.com/gitlab-org/gitlab/-/issues/499834
138155 Type label = SchemaUtil .getTypeByKindAndName (schema , Kind .OBJECT , "Label" );
@@ -167,6 +184,7 @@ public static Config createConfig(Schema schema) {
167184 .addIncludeName ("Iteration" ) //
168185 .addIncludeName ("LinkedWorkItemTypeConnection" ) //
169186 .addIncludeName ("Milestone" ) //
187+ .addIncludeName ("MilestoneRef" ) //
170188 .addIncludeName ("DiscussionConnection" ) //
171189 .addIncludeName ("WorkItemTimelogConnection" ) //
172190 .addIncludeName ("WorkItemWidgetDefinitionWeight" ) //
@@ -192,7 +210,10 @@ public static Config createConfig(Schema schema) {
192210 .addIncludeName ("ProjectContainingMilestones" ) //
193211 .addIncludeName ("ReleaseConnection" ) //
194212 .addIncludeName ("Release" ) //
213+ .addIncludeName ("ReleaseConnectionRef" ) //
214+ .addIncludeName ("ReleaseRef" ) //
195215 .addIncludeName ("MilestoneConnection" ) //
216+ .addIncludeName ("MilestoneConnectionRef" ) //
196217 .addIncludeName ("Todo" ) //
197218 .addIncludeName ("WorkItemClosingMergeRequest" ) //
198219 .addIncludeName ("WorkItemTimelog" ) //
@@ -815,6 +836,13 @@ public static Config createConfig(Schema schema) {
815836 .addIncludeName ("updatedAt" ) //
816837 .addIncludeName ("webPath" ) //
817838 ) //
839+ .addFilter (new FieldsFilter ()
840+ .setTypeKind (Kind .OBJECT )
841+ .setTypeName ("MilestoneRef" )
842+ .addIncludeName ("id" ) //
843+ .addIncludeName ("title" ) //
844+ .addIncludeName ("webPath" ) //
845+ ) //
818846 .addFilter (new FieldsFilter ()
819847 .setTypeKind (Kind .OBJECT )
820848 .setTypeName ("TaskCompletionStatus" )
@@ -1075,6 +1103,12 @@ public static Config createConfig(Schema schema) {
10751103 .addIncludeName ("pageInfo" )
10761104 .addIncludeName ("nodes" ) //
10771105 ) //
1106+ .addFilter (new FieldsFilter ()
1107+ .setTypeKind (Kind .OBJECT )
1108+ .setTypeName ("ReleaseConnectionRef" )
1109+ .addIncludeName ("pageInfo" )
1110+ .addIncludeName ("nodes" ) //
1111+ ) //
10781112 .addFilter (new FieldsFilter ()
10791113 .setTypeKind (Kind .OBJECT )
10801114 .setTypeName ("Release" )
@@ -1086,12 +1120,25 @@ public static Config createConfig(Schema schema) {
10861120 .addIncludeName ("upcomingRelease" ) //
10871121 .addIncludeName ("milestones" ) //
10881122 ) //
1123+ .addFilter (new FieldsFilter ()
1124+ .setTypeKind (Kind .OBJECT )
1125+ .setTypeName ("ReleaseRef" )
1126+ .addIncludeName ("id" )
1127+ .addIncludeName ("name" )
1128+ .addIncludeName ("tagName" ) //
1129+ ) //
10891130 .addFilter (new FieldsFilter ()
10901131 .setTypeKind (Kind .OBJECT )
10911132 .setTypeName ("MilestoneConnection" )
10921133 .addIncludeName ("pageInfo" )
10931134 .addIncludeName ("nodes" ) //
10941135 ) //
1136+ .addFilter (new FieldsFilter ()
1137+ .setTypeKind (Kind .OBJECT )
1138+ .setTypeName ("MilestoneConnectionRef" )
1139+ .addIncludeName ("pageInfo" )
1140+ .addIncludeName ("nodes" ) //
1141+ ) //
10951142 .addFilter (new FieldsFilter ()
10961143 .setTypeKind (Kind .OBJECT )
10971144 .setTypeName ("TimeboxReport" )
@@ -1943,12 +1990,34 @@ public static Config createConfig(Schema schema) {
19431990 return config ;
19441991 }
19451992
1946- private static Type createBoardRef (ObjectMapper mapper , Type board ) {
1947- return duplicateType (mapper , board , "BoardRef" );
1993+ private static Type createDuplicatedRefType (ObjectMapper mapper , Type type ) {
1994+ return createDuplicatedRefType (mapper , type , Map . of () );
19481995 }
19491996
1950- private static Type createEpicBoardRef (ObjectMapper mapper , Type epicBoard ) {
1951- return duplicateType (mapper , epicBoard , "EpicBoardRef" );
1997+ private static Type createDuplicatedRefType (ObjectMapper mapper , Type type , Map <String , String > rename ) {
1998+ Type newType = duplicateType (mapper , type , type .getName () + "Ref" );
1999+ applyRenamingsOnFields (newType , rename );
2000+ return newType ;
2001+ }
2002+
2003+ private static void applyRenamingsOnFields (Type type , Map <String , String > rename ) {
2004+ for (Field f : type .getFields ()) {
2005+ TypeRef t = f .getType ();
2006+ applyRenamingsOnType (t , rename );
2007+ }
2008+ }
2009+
2010+ private static void applyRenamingsOnType (TypeRef type , Map <String , String > rename ) {
2011+ if (type .getOfType () != null ) {
2012+ applyRenamingsOnType (type .getOfType (), rename );
2013+ }
2014+ if (type .getKind () == Kind .OBJECT ) {
2015+ for (Entry <String , String > e : rename .entrySet ()) {
2016+ if (Objects .equals (e .getKey (), type .getName ())) {
2017+ type .setName (e .getValue ());
2018+ }
2019+ }
2020+ }
19522021 }
19532022
19542023 private static Type createGroupContainingSingleIssueBoard (ObjectMapper mapper , Type group ) {
0 commit comments