1818
1919import static org .cloudfoundry .util .tuple .TupleUtils .function ;
2020
21+ import java .util .List ;
22+ import java .util .Map ;
2123import java .util .NoSuchElementException ;
24+ import java .util .Optional ;
25+ import java .util .stream .Collectors ;
2226import org .cloudfoundry .client .CloudFoundryClient ;
23- import org .cloudfoundry .client .v2 .organizations .AssociateOrganizationPrivateDomainRequest ;
24- import org .cloudfoundry .client .v2 .organizations .AssociateOrganizationPrivateDomainResponse ;
25- import org .cloudfoundry .client .v2 .organizations .ListOrganizationsRequest ;
26- import org .cloudfoundry .client .v2 .organizations .OrganizationResource ;
27- import org .cloudfoundry .client .v2 .organizations .RemoveOrganizationPrivateDomainRequest ;
28- import org .cloudfoundry .client .v2 .privatedomains .CreatePrivateDomainRequest ;
29- import org .cloudfoundry .client .v2 .privatedomains .CreatePrivateDomainResponse ;
3027import org .cloudfoundry .client .v2 .privatedomains .ListPrivateDomainsRequest ;
31- import org .cloudfoundry .client .v2 .privatedomains .PrivateDomainEntity ;
3228import org .cloudfoundry .client .v2 .privatedomains .PrivateDomainResource ;
3329import org .cloudfoundry .client .v2 .shareddomains .CreateSharedDomainResponse ;
3430import org .cloudfoundry .client .v2 .shareddomains .ListSharedDomainsRequest ;
35- import org .cloudfoundry .client .v2 .shareddomains .SharedDomainEntity ;
3631import org .cloudfoundry .client .v2 .shareddomains .SharedDomainResource ;
32+ import org .cloudfoundry .client .v3 .Relationship ;
33+ import org .cloudfoundry .client .v3 .ToOneRelationship ;
34+ import org .cloudfoundry .client .v3 .domains .CreateDomainResponse ;
35+ import org .cloudfoundry .client .v3 .domains .DomainRelationships ;
36+ import org .cloudfoundry .client .v3 .domains .DomainResource ;
37+ import org .cloudfoundry .client .v3 .domains .ListDomainsRequest ;
38+ import org .cloudfoundry .client .v3 .domains .ShareDomainResponse ;
39+ import org .cloudfoundry .client .v3 .organizations .ListOrganizationsRequest ;
40+ import org .cloudfoundry .client .v3 .organizations .OrganizationResource ;
3741import org .cloudfoundry .operations .util .OperationsLogging ;
3842import org .cloudfoundry .routing .RoutingClient ;
3943import org .cloudfoundry .routing .v1 .routergroups .ListRouterGroupsResponse ;
@@ -66,43 +70,59 @@ public DefaultDomains(
6670
6771 @ Override
6872 public Mono <Void > create (CreateDomainRequest request ) {
69- return getOrganizationId (request .getOrganization ())
70- .flatMap (organizationId -> requestCreateDomain (request .getDomain (), organizationId ))
73+ Mono <Optional <String >> organizationId =
74+ Mono .justOrEmpty (request .getOrganization ())
75+ .flatMap (this ::getOrganization )
76+ .map (OrganizationResource ::getId )
77+ .singleOptional ();
78+
79+ Mono <Optional <String >> groupId =
80+ Mono .justOrEmpty (request .getRouterGroup ())
81+ .flatMap (this ::getRouterGroupId )
82+ .singleOptional ();
83+
84+ return Mono .zip (organizationId , groupId )
85+ .flatMap (
86+ function (
87+ (oId , gId ) ->
88+ requestCreateDomain (
89+ request .getDomain (),
90+ oId .orElse (null ),
91+ gId .orElse (null ))))
7192 .then ()
7293 .transform (OperationsLogging .log ("Create Domain" ))
7394 .checkpoint ();
7495 }
7596
7697 @ Override
98+ @ Deprecated
7799 public Mono <Void > createShared (CreateSharedDomainRequest request ) {
78- if (request .getRouterGroup () == null ) {
79- return requestCreateSharedDomain (request .getDomain (), null )
80- .then ()
81- .transform (OperationsLogging .log ("Create Shared Domain" ))
82- .checkpoint ();
83- } else {
84- return getRouterGroupId (routingClient , request .getRouterGroup ())
85- .flatMap (
86- routerGroupId ->
87- requestCreateSharedDomain (request .getDomain (), routerGroupId ))
88- .then ()
89- .transform (OperationsLogging .log ("Create Shared Domain" ))
90- .checkpoint ();
91- }
100+ return create (
101+ CreateDomainRequest .builder ()
102+ .domain (request .getDomain ())
103+ .routerGroup (request .getRouterGroup ())
104+ .build ());
92105 }
93106
94107 @ Override
95108 public Flux <Domain > list () {
96- return requestListPrivateDomains ()
97- .map (DefaultDomains ::toDomain )
98- .mergeWith (requestListSharedDomains ().map (DefaultDomains ::toDomain ))
109+ return requestListRouterGroups ()
110+ .map (ListRouterGroupsResponse ::getRouterGroups )
111+ .map (DefaultDomains ::indexRouterGroupsById )
112+ .flatMapMany (
113+ routerGroupsIndexedById ->
114+ requestListDomains ()
115+ .map (
116+ domain ->
117+ DefaultDomains .toDomain (
118+ domain , routerGroupsIndexedById )))
99119 .transform (OperationsLogging .log ("List Domains" ))
100120 .checkpoint ();
101121 }
102122
103123 @ Override
104124 public Flux <RouterGroup > listRouterGroups () {
105- return requestListRouterGroups (routingClient )
125+ return requestListRouterGroups ()
106126 .flatMapIterable (ListRouterGroupsResponse ::getRouterGroups )
107127 .map (DefaultDomains ::toRouterGroup )
108128 .transform (OperationsLogging .log ("List Router Groups" ))
@@ -112,9 +132,9 @@ public Flux<RouterGroup> listRouterGroups() {
112132 @ Override
113133 public Mono <Void > share (ShareDomainRequest request ) {
114134 return Mono .zip (
115- getPrivateDomainId (request .getDomain ()),
135+ getDomainId (request .getDomain ()),
116136 getOrganizationId (request .getOrganization ()))
117- .flatMap (function (this ::requestAssociateOrganizationPrivateDomainRequest ))
137+ .flatMap (function (this ::requestShareDomain ))
118138 .then ()
119139 .transform (OperationsLogging .log ("Share Domain" ))
120140 .checkpoint ();
@@ -123,9 +143,9 @@ public Mono<Void> share(ShareDomainRequest request) {
123143 @ Override
124144 public Mono <Void > unshare (UnshareDomainRequest request ) {
125145 return Mono .zip (
126- getPrivateDomainId (request .getDomain ()),
146+ getDomainId (request .getDomain ()),
127147 getOrganizationId (request .getOrganization ()))
128- .flatMap (function (this ::requestRemoveOrganizationPrivateDomainRequest ))
148+ .flatMap (function (this ::requestUnshareDomain ))
129149 .transform (OperationsLogging .log ("Unshare Domain" ))
130150 .checkpoint ();
131151 }
@@ -141,7 +161,19 @@ private Mono<OrganizationResource> getOrganization(String organization) {
141161 }
142162
143163 private Mono <String > getOrganizationId (String organization ) {
144- return getOrganization (organization ).map (ResourceUtils ::getId );
164+ return getOrganization (organization ).map (OrganizationResource ::getId );
165+ }
166+
167+ private Mono <String > getDomainId (String domain ) {
168+ return this .requestListDomains ()
169+ .filter (d -> d .getName ().equals (domain ))
170+ .map (DomainResource ::getId )
171+ .single ()
172+ .onErrorResume (
173+ NoSuchElementException .class ,
174+ t ->
175+ ExceptionUtils .illegalArgument (
176+ "Private domain %s does not exist" , domain ));
145177 }
146178
147179 private Mono <PrivateDomainResource > getPrivateDomain (String domain ) {
@@ -158,35 +190,44 @@ private Mono<String> getPrivateDomainId(String domain) {
158190 return getPrivateDomain (domain ).map (ResourceUtils ::getId );
159191 }
160192
161- private static Mono <String > getRouterGroupId (RoutingClient routingClient , String routerGroup ) {
162- return requestListRouterGroups (routingClient )
193+ private Mono <String > getRouterGroupId (String routerGroup ) {
194+ return requestListRouterGroups ()
163195 .flatMapIterable (ListRouterGroupsResponse ::getRouterGroups )
164196 .filter (group -> routerGroup .equals (group .getName ()))
165197 .single ()
166198 .map (org .cloudfoundry .routing .v1 .routergroups .RouterGroup ::getRouterGroupId );
167199 }
168200
169- private Mono <AssociateOrganizationPrivateDomainResponse >
170- requestAssociateOrganizationPrivateDomainRequest (
171- String domainId , String organizationId ) {
201+ private Mono <ShareDomainResponse > requestShareDomain (String domainId , String organizationId ) {
172202 return this .cloudFoundryClient
173- .organizations ()
174- .associatePrivateDomain (
175- AssociateOrganizationPrivateDomainRequest .builder ()
176- .organizationId ( organizationId )
177- .privateDomainId ( domainId )
203+ .domainsV3 ()
204+ .share (
205+ org . cloudfoundry . client . v3 . domains . ShareDomainRequest .builder ()
206+ .domainId ( domainId )
207+ .data ( Relationship . builder (). id ( organizationId ). build () )
178208 .build ());
179209 }
180210
181- private Mono <CreatePrivateDomainResponse > requestCreateDomain (
182- String domain , String organizationId ) {
183- return this .cloudFoundryClient
184- .privateDomains ()
185- .create (
186- CreatePrivateDomainRequest .builder ()
187- .name (domain )
188- .owningOrganizationId (organizationId )
189- .build ());
211+ private Mono <CreateDomainResponse > requestCreateDomain (
212+ String domain , String organizationId , String routerGroupId ) {
213+ org .cloudfoundry .client .v3 .domains .CreateDomainRequest .Builder createDomainRequest =
214+ org .cloudfoundry .client .v3 .domains .CreateDomainRequest .builder ().name (domain );
215+ if (organizationId != null ) {
216+ createDomainRequest .relationships (
217+ DomainRelationships .builder ()
218+ .organization (
219+ ToOneRelationship .builder ()
220+ .data (Relationship .builder ().id (organizationId ).build ())
221+ .build ())
222+ .build ());
223+ }
224+ if (routerGroupId != null ) {
225+ createDomainRequest .routerGroup (
226+ org .cloudfoundry .client .v3 .domains .RouterGroup .builder ()
227+ .id (routerGroupId )
228+ .build ());
229+ }
230+ return this .cloudFoundryClient .domainsV3 ().create (createDomainRequest .build ());
190231 }
191232
192233 private Mono <CreateSharedDomainResponse > requestCreateSharedDomain (
@@ -212,17 +253,16 @@ private Flux<PrivateDomainResource> requestListPrivateDomains(String domain) {
212253 .build ()));
213254 }
214255
215- private Flux <PrivateDomainResource > requestListPrivateDomains () {
216- return PaginationUtils .requestClientV2Resources (
256+ private Flux <DomainResource > requestListDomains () {
257+ return PaginationUtils .requestClientV3Resources (
217258 page ->
218259 this .cloudFoundryClient
219- .privateDomains ()
220- .list (ListPrivateDomainsRequest .builder ().page (page ).build ()));
260+ .domainsV3 ()
261+ .list (ListDomainsRequest .builder ().page (page ).build ()));
221262 }
222263
223- private static Mono <ListRouterGroupsResponse > requestListRouterGroups (
224- RoutingClient routingClient ) {
225- return routingClient
264+ private Mono <ListRouterGroupsResponse > requestListRouterGroups () {
265+ return this .routingClient
226266 .routerGroups ()
227267 .list (
228268 org .cloudfoundry .routing .v1 .routergroups .ListRouterGroupsRequest .builder ()
@@ -238,47 +278,50 @@ private Flux<SharedDomainResource> requestListSharedDomains() {
238278 }
239279
240280 private Flux <OrganizationResource > requestOrganizations (String organization ) {
241- return PaginationUtils .requestClientV2Resources (
281+ return PaginationUtils .requestClientV3Resources (
242282 page ->
243283 this .cloudFoundryClient
244- .organizations ()
284+ .organizationsV3 ()
245285 .list (
246286 ListOrganizationsRequest .builder ()
247287 .name (organization )
248288 .page (page )
249289 .build ()));
250290 }
251291
252- private Mono <Void > requestRemoveOrganizationPrivateDomainRequest (
253- String domainId , String organizationId ) {
292+ private Mono <Void > requestUnshareDomain (String domainId , String organizationId ) {
254293 return this .cloudFoundryClient
255- .organizations ()
256- .removePrivateDomain (
257- RemoveOrganizationPrivateDomainRequest .builder ()
294+ .domainsV3 ()
295+ .unshare (
296+ org . cloudfoundry . client . v3 . domains . UnshareDomainRequest .builder ()
258297 .organizationId (organizationId )
259- .privateDomainId (domainId )
298+ .domainId (domainId )
260299 .build ());
261300 }
262301
263- private static Domain toDomain (PrivateDomainResource resource ) {
264- PrivateDomainEntity entity = ResourceUtils .getEntity (resource );
265-
302+ private static Domain toDomain (DomainResource entity , Map <String , String > type ) {
266303 return Domain .builder ()
267- .id (ResourceUtils .getId (resource ))
304+ .id (entity .getId ())
268305 .name (entity .getName ())
269- .status (Status .OWNED )
306+ .status (
307+ entity .getRelationships ().getOrganization ().getData () != null
308+ ? Status .OWNED
309+ : Status .SHARED )
310+ .type (
311+ entity .getRouterGroup () != null
312+ ? type .get (entity .getRouterGroup ().getId ())
313+ : null )
270314 .build ();
271315 }
272316
273- private static Domain toDomain (SharedDomainResource resource ) {
274- SharedDomainEntity entity = ResourceUtils .getEntity (resource );
275-
276- return Domain .builder ()
277- .id (ResourceUtils .getId (resource ))
278- .name (entity .getName ())
279- .status (Status .SHARED )
280- .type (entity .getRouterGroupType ())
281- .build ();
317+ private static Map <String , String > indexRouterGroupsById (
318+ List <org .cloudfoundry .routing .v1 .routergroups .RouterGroup > routeGroups ) {
319+ return routeGroups .stream ()
320+ .collect (
321+ Collectors .toMap (
322+ org .cloudfoundry .routing .v1 .routergroups .RouterGroup
323+ ::getRouterGroupId ,
324+ org .cloudfoundry .routing .v1 .routergroups .RouterGroup ::getType ));
282325 }
283326
284327 private static RouterGroup toRouterGroup (
0 commit comments