-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Move MonoToListenableFutureAdapter to spring-core
This was a package private class in spring-messaging since 5.0, and was recently made public in 5.1. This commit promotes it to spring-core where it belongs next to all other ListenableFuture support classes. Follow-up refactoring for SPR-17336
- Loading branch information
1 parent
928c541
commit c01f350
Showing
6 changed files
with
101 additions
and
50 deletions.
There are no files selected for viewing
97 changes: 97 additions & 0 deletions
97
...core/src/main/java/org/springframework/util/concurrent/MonoToListenableFutureAdapter.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
/* | ||
* Copyright 2002-2018 the original author or authors. | ||
* | ||
* Licensed under the Apache License, Version 2.0 (the "License"); | ||
* you may not use this file except in compliance with the License. | ||
* You may obtain a copy of the License at | ||
* | ||
* http://www.apache.org/licenses/LICENSE-2.0 | ||
* | ||
* Unless required by applicable law or agreed to in writing, software | ||
* distributed under the License is distributed on an "AS IS" BASIS, | ||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
* See the License for the specific language governing permissions and | ||
* limitations under the License. | ||
*/ | ||
|
||
package org.springframework.util.concurrent; | ||
|
||
import java.time.Duration; | ||
import java.util.concurrent.TimeUnit; | ||
|
||
import reactor.core.publisher.Mono; | ||
import reactor.core.publisher.MonoProcessor; | ||
|
||
import org.springframework.lang.Nullable; | ||
import org.springframework.util.Assert; | ||
|
||
/** | ||
* Adapts a {@link Mono} into a {@link ListenableFuture}. | ||
* | ||
* @author Rossen Stoyanchev | ||
* @author Stephane Maldini | ||
* @since 5.1 | ||
* @param <T> the object type | ||
*/ | ||
public class MonoToListenableFutureAdapter<T> implements ListenableFuture<T> { | ||
|
||
private final MonoProcessor<T> processor; | ||
|
||
private final ListenableFutureCallbackRegistry<T> registry = new ListenableFutureCallbackRegistry<>(); | ||
|
||
|
||
public MonoToListenableFutureAdapter(Mono<T> mono) { | ||
Assert.notNull(mono, "Mono must not be null"); | ||
this.processor = mono | ||
.doOnSuccess(this.registry::success) | ||
.doOnError(this.registry::failure) | ||
.toProcessor(); | ||
} | ||
|
||
|
||
@Override | ||
@Nullable | ||
public T get() { | ||
return this.processor.block(); | ||
} | ||
|
||
@Override | ||
@Nullable | ||
public T get(long timeout, TimeUnit unit) { | ||
Assert.notNull(unit, "TimeUnit must not be null"); | ||
Duration duration = Duration.ofMillis(TimeUnit.MILLISECONDS.convert(timeout, unit)); | ||
return this.processor.block(duration); | ||
} | ||
|
||
@Override | ||
public boolean cancel(boolean mayInterruptIfRunning) { | ||
if (isCancelled()) { | ||
return false; | ||
} | ||
this.processor.cancel(); | ||
// isCancelled may still return false, if mono completed before the cancel | ||
return this.processor.isCancelled(); | ||
} | ||
|
||
@Override | ||
public boolean isCancelled() { | ||
return this.processor.isCancelled(); | ||
} | ||
|
||
@Override | ||
public boolean isDone() { | ||
return this.processor.isTerminated(); | ||
} | ||
|
||
@Override | ||
public void addCallback(ListenableFutureCallback<? super T> callback) { | ||
this.registry.addCallback(callback); | ||
} | ||
|
||
@Override | ||
public void addCallback(SuccessCallback<? super T> success, FailureCallback failure) { | ||
this.registry.addSuccessCallback(success); | ||
this.registry.addFailureCallback(failure); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
44 changes: 0 additions & 44 deletions
44
...ng/src/main/java/org/springframework/messaging/support/MonoToListenableFutureAdapter.java
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters