123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package com.rthoni.stssaguenay.dataaccess;
-
- /**
- *
- * Created by robin on 11/27/15.
- */
- public class LuPromise<T> {
-
- public interface LuConsumer<T> {
- void execute(T data);
- }
-
- public interface LuConverter<T, T2> {
- T2 convert(T data);
- }
-
- public static class LuPromiseError {
-
- public LuPromiseError()
- {
-
- }
-
- public LuPromiseError(String error, int statusCode)
- {
- _error = error;
- _statusCode = statusCode;
- }
-
- public String getError() {
- return _error;
- }
-
- public void setError(String error) {
- _error = error;
- }
-
- public int getStatusCode() {
- return _statusCode;
- }
-
- public void setStatusCode(int statusCode) {
- _statusCode = statusCode;
- }
-
- private String _error;
-
- private int _statusCode;
-
- @Override
- public String toString() {
- return _error + " (HTTP Code : " + _statusCode + ")";
- }
- }
-
- public enum LuPromiseStatus {
- Running,
- Resolved,
- Failed
- }
-
- private LuConsumer<T> _onSuccess = new LuConsumer<T>() {
- @Override
- public void execute(T data) {
- }
- };
-
- private LuConsumer<LuPromiseError> _onFailed = new LuConsumer<LuPromiseError>() {
- @Override
- public void execute(LuPromiseError data) {
- }
- };
-
- private LuPromiseStatus _status = LuPromiseStatus.Running;
-
- private T _data = null;
-
- private LuPromiseError _error = null;
-
- public LuPromise<T> then(LuConsumer<T> onSuccess, LuConsumer<LuPromiseError> onFailed)
- {
- _onFailed = onFailed;
- if (_status == LuPromiseStatus.Failed) {
- _onFailed.execute(_error);
- }
- return then(onSuccess);
- }
-
- public LuPromise<T> then(LuConsumer<T> onSuccess)
- {
- _onSuccess = onSuccess;
- if (_status == LuPromiseStatus.Resolved) {
- _onSuccess.execute(_data);
- }
- return this;
- }
-
- public void resolve(T data)
- {
- if (_status == LuPromiseStatus.Running) {
- _data = data;
- _error = null;
- _status = LuPromiseStatus.Resolved;
- _onSuccess.execute(_data);
- }
- }
-
- public void reject(LuPromiseError error)
- {
- if (_status == LuPromiseStatus.Running) {
- _data = null;
- _error = error;
- _status = LuPromiseStatus.Failed;
- _onFailed.execute(_error);
- }
- }
-
- public <T2> LuPromise<T2> map(final LuConverter<T, T2> converter)
- {
- final LuPromise<T2> promise = new LuPromise<>();
- then(new LuConsumer<T>() {
- @Override
- public void execute(T data) {
- promise.resolve(converter.convert(data));
- }
- }, new LuConsumer<LuPromiseError>() {
- @Override
- public void execute(LuPromiseError error) {
- promise.reject(error);
- }
- });
- return promise;
- }
-
- public LuConsumer<LuPromiseError> rejectConsumer()
- {
- return new LuConsumer<LuPromiseError>() {
- @Override
- public void execute(LuPromiseError error) {
- reject(error);
- }
- };
- }
-
- public LuPromiseStatus getStatus()
- {
- return _status;
- }
- }
|