1616
1717package org .cloudfoundry .operations .buildpacks ;
1818
19- import static org .cloudfoundry .util .tuple .TupleUtils .function ;
20-
2119import java .nio .file .Path ;
2220import java .time .Duration ;
2321import java .util .Optional ;
3735import org .cloudfoundry .util .ResourceUtils ;
3836import reactor .core .publisher .Flux ;
3937import reactor .core .publisher .Mono ;
38+ import reactor .core .scheduler .Schedulers ;
4039
4140public final class DefaultBuildpacks implements Buildpacks {
4241
43- private final Mono < CloudFoundryClient > cloudFoundryClient ;
42+ private final CloudFoundryClient cloudFoundryClient ;
4443
45- public DefaultBuildpacks (Mono < CloudFoundryClient > cloudFoundryClient ) {
44+ public DefaultBuildpacks (CloudFoundryClient cloudFoundryClient ) {
4645 this .cloudFoundryClient = cloudFoundryClient ;
4746 }
4847
48+ /**
49+ * Create a new instance.
50+ *
51+ * @deprecated Use {@link DefaultBuildpacks(CloudFoundryClient)} instead.
52+ */
53+ @ Deprecated
54+ public DefaultBuildpacks (Mono <CloudFoundryClient > cloudFoundryClient ) {
55+ this .cloudFoundryClient =
56+ cloudFoundryClient .subscribeOn (Schedulers .boundedElastic ()).block ();
57+ }
58+
4959 @ Override
5060 public Mono <Void > create (CreateBuildpackRequest request ) {
51- return this .cloudFoundryClient
52- .flatMap (
53- cloudFoundryClient ->
54- Mono .zip (
55- Mono .just (cloudFoundryClient ),
56- requestCreateBuildpack (
57- cloudFoundryClient ,
58- request .getName (),
59- request .getPosition (),
60- request .getEnable ())))
61+ return requestCreateBuildpack (
62+ this .cloudFoundryClient ,
63+ request .getName (),
64+ request .getPosition (),
65+ request .getEnable ())
6166 .flatMap (
62- function (
63- (cloudFoundryClient , response ) ->
64- requestUploadBuildpackBits (
65- cloudFoundryClient ,
66- ResourceUtils .getId (response ),
67- request .getBuildpack ())))
67+ response ->
68+ requestUploadBuildpackBits (
69+ ResourceUtils .getId (response ), request .getBuildpack ()))
6870 .then ()
6971 .transform (OperationsLogging .log ("Create Buildpack" ))
7072 .checkpoint ();
7173 }
7274
7375 @ Override
7476 public Mono <Void > delete (DeleteBuildpackRequest request ) {
75- return this . cloudFoundryClient
77+ return getBuildPackId ( request . getName ())
7678 .flatMap (
77- cloudFoundryClient ->
78- Mono .zip (
79- getBuildPackId (cloudFoundryClient , request .getName ()),
80- Mono .just (cloudFoundryClient )))
81- .flatMap (
82- function (
83- (buildpackId , cloudFoundryClient ) ->
84- deleteBuildpack (
85- cloudFoundryClient ,
86- buildpackId ,
87- request .getCompletionTimeout ())))
79+ buildpackId -> deleteBuildpack (buildpackId , request .getCompletionTimeout ()))
8880 .then ()
8981 .transform (OperationsLogging .log ("Delete Buildpack" ))
9082 .checkpoint ();
9183 }
9284
9385 @ Override
9486 public Flux <Buildpack > list () {
95- return this .cloudFoundryClient
96- .flatMapMany (DefaultBuildpacks ::requestBuildpacks )
97- .map (DefaultBuildpacks ::toBuildpackResource )
87+ return requestBuildpacks (this .cloudFoundryClient )
88+ .map (this ::toBuildpackResource )
9889 .transform (OperationsLogging .log ("List Buildpacks" ))
9990 .checkpoint ();
10091 }
10192
10293 @ Override
10394 public Mono <Void > rename (RenameBuildpackRequest request ) {
104- return this .cloudFoundryClient
105- .flatMap (
106- cloudFoundryClient ->
107- Mono .zip (
108- getBuildPackId (cloudFoundryClient , request .getName ()),
109- Mono .just (cloudFoundryClient )))
110- .flatMap (
111- function (
112- (buildpackId , cloudFoundryClient ) ->
113- requestUpdateBuildpack (
114- cloudFoundryClient ,
115- buildpackId ,
116- request .getNewName ())))
95+ return getBuildPackId (request .getName ())
96+ .flatMap (buildpackId -> requestUpdateBuildpack (buildpackId , request .getNewName ()))
11797 .then ()
11898 .transform (OperationsLogging .log ("Rename Buildpack" ))
11999 .checkpoint ();
120100 }
121101
122102 @ Override
123103 public Mono <Void > update (UpdateBuildpackRequest request ) {
124- return this . cloudFoundryClient
104+ return getBuildPackId ( request . getName ())
125105 .flatMap (
126- cloudFoundryClient ->
127- Mono .zip (
128- getBuildPackId (cloudFoundryClient , request .getName ()),
129- Mono .just (cloudFoundryClient )))
130- .flatMap (
131- function (
132- (buildpackId , cloudFoundryClient ) ->
133- Mono .when (
134- requestUpdateBuildpack (
135- cloudFoundryClient , buildpackId , request ),
136- uploadBuildpackBits (
137- cloudFoundryClient , buildpackId , request ))))
106+ buildpackId ->
107+ Mono .when (
108+ requestUpdateBuildpack (buildpackId , request ),
109+ uploadBuildpackBits (buildpackId , request )))
138110 .then ()
139111 .transform (OperationsLogging .log ("Update Buildpack" ))
140112 .checkpoint ();
141113 }
142114
143- private static Mono <Void > deleteBuildpack (
144- CloudFoundryClient cloudFoundryClient , String buildpackId , Duration timeout ) {
145- return requestDeleteBuildpack (cloudFoundryClient , buildpackId )
146- .flatMap (job -> JobUtils .waitForCompletion (cloudFoundryClient , timeout , job ));
115+ private Mono <Void > deleteBuildpack (String buildpackId , Duration timeout ) {
116+ return requestDeleteBuildpack (buildpackId )
117+ .flatMap (job -> JobUtils .waitForCompletion (this .cloudFoundryClient , timeout , job ));
147118 }
148119
149- private static Mono <String > getBuildPackId (CloudFoundryClient cloudFoundryClient , String name ) {
150- return requestBuildpacks (cloudFoundryClient , name )
120+ private Mono <String > getBuildPackId (String name ) {
121+ return requestBuildpacks (name )
151122 .singleOrEmpty ()
152123 .map (ResourceUtils ::getId )
153124 .switchIfEmpty (ExceptionUtils .illegalArgument ("Buildpack %s not found" , name ));
154125 }
155126
156- private static Flux <BuildpackResource > requestBuildpacks (
157- CloudFoundryClient cloudFoundryClient ) {
127+ private Flux <BuildpackResource > requestBuildpacks (CloudFoundryClient cloudFoundryClient ) {
158128 return PaginationUtils .requestClientV2Resources (
159129 page ->
160130 cloudFoundryClient
161131 .buildpacks ()
162132 .list (ListBuildpacksRequest .builder ().page (page ).build ()));
163133 }
164134
165- private static Flux <BuildpackResource > requestBuildpacks (
166- CloudFoundryClient cloudFoundryClient , String name ) {
135+ private Flux <BuildpackResource > requestBuildpacks (String name ) {
167136 return PaginationUtils .requestClientV2Resources (
168137 page ->
169138 cloudFoundryClient
@@ -175,7 +144,7 @@ private static Flux<BuildpackResource> requestBuildpacks(
175144 .build ()));
176145 }
177146
178- private static Mono <CreateBuildpackResponse > requestCreateBuildpack (
147+ private Mono <CreateBuildpackResponse > requestCreateBuildpack (
179148 CloudFoundryClient cloudFoundryClient ,
180149 String buildpackName ,
181150 Integer position ,
@@ -190,8 +159,7 @@ private static Mono<CreateBuildpackResponse> requestCreateBuildpack(
190159 .build ());
191160 }
192161
193- private static Mono <DeleteBuildpackResponse > requestDeleteBuildpack (
194- CloudFoundryClient cloudFoundryClient , String buildpackId ) {
162+ private Mono <DeleteBuildpackResponse > requestDeleteBuildpack (String buildpackId ) {
195163 return cloudFoundryClient
196164 .buildpacks ()
197165 .delete (
@@ -201,10 +169,8 @@ private static Mono<DeleteBuildpackResponse> requestDeleteBuildpack(
201169 .build ());
202170 }
203171
204- private static Mono <UpdateBuildpackResponse > requestUpdateBuildpack (
205- CloudFoundryClient cloudFoundryClient ,
206- String buildpackId ,
207- UpdateBuildpackRequest request ) {
172+ private Mono <UpdateBuildpackResponse > requestUpdateBuildpack (
173+ String buildpackId , UpdateBuildpackRequest request ) {
208174 return cloudFoundryClient
209175 .buildpacks ()
210176 .update (
@@ -216,8 +182,7 @@ private static Mono<UpdateBuildpackResponse> requestUpdateBuildpack(
216182 .build ());
217183 }
218184
219- private static Mono <UpdateBuildpackResponse > requestUpdateBuildpack (
220- CloudFoundryClient cloudFoundryClient , String buildpackId , String name ) {
185+ private Mono <UpdateBuildpackResponse > requestUpdateBuildpack (String buildpackId , String name ) {
221186 return cloudFoundryClient
222187 .buildpacks ()
223188 .update (
@@ -227,8 +192,8 @@ private static Mono<UpdateBuildpackResponse> requestUpdateBuildpack(
227192 .build ());
228193 }
229194
230- private static Mono <UploadBuildpackResponse > requestUploadBuildpackBits (
231- CloudFoundryClient cloudFoundryClient , String buildpackId , Path buildpack ) {
195+ private Mono <UploadBuildpackResponse > requestUploadBuildpackBits (
196+ String buildpackId , Path buildpack ) {
232197 return cloudFoundryClient
233198 .buildpacks ()
234199 .upload (
@@ -239,7 +204,7 @@ private static Mono<UploadBuildpackResponse> requestUploadBuildpackBits(
239204 .build ());
240205 }
241206
242- private static Buildpack toBuildpackResource (BuildpackResource resource ) {
207+ private Buildpack toBuildpackResource (BuildpackResource resource ) {
243208 BuildpackEntity entity = ResourceUtils .getEntity (resource );
244209
245210 return Buildpack .builder ()
@@ -253,13 +218,9 @@ private static Buildpack toBuildpackResource(BuildpackResource resource) {
253218 .build ();
254219 }
255220
256- private static Mono <Void > uploadBuildpackBits (
257- CloudFoundryClient cloudFoundryClient ,
258- String buildpackId ,
259- UpdateBuildpackRequest request ) {
221+ private Mono <Void > uploadBuildpackBits (String buildpackId , UpdateBuildpackRequest request ) {
260222 if (request .getBuildpack () != null ) {
261- return requestUploadBuildpackBits (
262- cloudFoundryClient , buildpackId , request .getBuildpack ())
223+ return requestUploadBuildpackBits (buildpackId , request .getBuildpack ())
263224 .then (Mono .empty ());
264225 }
265226
0 commit comments