| package com.doumee.lib_coremodel.binding.command; | 
|   | 
|   | 
| import io.reactivex.functions.Function; | 
|   | 
| /** | 
|  * About : kelin的ResponseCommand | 
|  * 执行的命令事件转换 | 
|  */ | 
| public class ResponseCommand<T, R> { | 
|   | 
|     private BindingFunction<R> execute; | 
|     private Function<T, R> function; | 
|     private BindingFunction<Boolean> canExecute; | 
|   | 
|     /** | 
|      * like {@link BindingCommand},but ResponseCommand can return result when command has executed! | 
|      * | 
|      * @param execute function to execute when event occur. | 
|      */ | 
|     public ResponseCommand(BindingFunction<R> execute) { | 
|         this.execute = execute; | 
|     } | 
|   | 
|   | 
|     public ResponseCommand(Function<T, R> execute) { | 
|         this.function = execute; | 
|     } | 
|   | 
|   | 
|     public ResponseCommand(BindingFunction<R> execute, BindingFunction<Boolean> canExecute) { | 
|         this.execute = execute; | 
|         this.canExecute = canExecute; | 
|     } | 
|   | 
|   | 
|     public ResponseCommand(Function<T, R> execute, BindingFunction<Boolean> canExecute) { | 
|         this.function = execute; | 
|         this.canExecute = canExecute; | 
|     } | 
|   | 
|   | 
|     public R execute() { | 
|         if (execute != null && canExecute()) { | 
|             return execute.call(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     private boolean canExecute() { | 
|         if (canExecute == null) { | 
|             return true; | 
|         } | 
|         return canExecute.call(); | 
|     } | 
|   | 
|   | 
|     public R execute(T parameter) throws Exception { | 
|         if (function != null && canExecute()) { | 
|             return function.apply(parameter); | 
|         } | 
|         return null; | 
|     } | 
| } |