You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

LuPromise.java 3.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. package com.rthoni.stssaguenay.dataaccess;
  2. /**
  3. *
  4. * Created by robin on 11/27/15.
  5. */
  6. public class LuPromise<T> {
  7. public interface LuConsumer<T> {
  8. void execute(T data);
  9. }
  10. public interface LuConverter<T, T2> {
  11. T2 convert(T data);
  12. }
  13. public static class LuPromiseError {
  14. public LuPromiseError()
  15. {
  16. }
  17. public LuPromiseError(String error, int statusCode)
  18. {
  19. _error = error;
  20. _statusCode = statusCode;
  21. }
  22. public String getError() {
  23. return _error;
  24. }
  25. public void setError(String error) {
  26. _error = error;
  27. }
  28. public int getStatusCode() {
  29. return _statusCode;
  30. }
  31. public void setStatusCode(int statusCode) {
  32. _statusCode = statusCode;
  33. }
  34. private String _error;
  35. private int _statusCode;
  36. @Override
  37. public String toString() {
  38. return _error + " (HTTP Code : " + _statusCode + ")";
  39. }
  40. }
  41. public enum LuPromiseStatus {
  42. Running,
  43. Resolved,
  44. Failed
  45. }
  46. private LuConsumer<T> _onSuccess = new LuConsumer<T>() {
  47. @Override
  48. public void execute(T data) {
  49. }
  50. };
  51. private LuConsumer<LuPromiseError> _onFailed = new LuConsumer<LuPromiseError>() {
  52. @Override
  53. public void execute(LuPromiseError data) {
  54. }
  55. };
  56. private LuPromiseStatus _status = LuPromiseStatus.Running;
  57. private T _data = null;
  58. private LuPromiseError _error = null;
  59. public LuPromise<T> then(LuConsumer<T> onSuccess, LuConsumer<LuPromiseError> onFailed)
  60. {
  61. _onFailed = onFailed;
  62. if (_status == LuPromiseStatus.Failed) {
  63. _onFailed.execute(_error);
  64. }
  65. return then(onSuccess);
  66. }
  67. public LuPromise<T> then(LuConsumer<T> onSuccess)
  68. {
  69. _onSuccess = onSuccess;
  70. if (_status == LuPromiseStatus.Resolved) {
  71. _onSuccess.execute(_data);
  72. }
  73. return this;
  74. }
  75. public void resolve(T data)
  76. {
  77. if (_status == LuPromiseStatus.Running) {
  78. _data = data;
  79. _error = null;
  80. _status = LuPromiseStatus.Resolved;
  81. _onSuccess.execute(_data);
  82. }
  83. }
  84. public void reject(LuPromiseError error)
  85. {
  86. if (_status == LuPromiseStatus.Running) {
  87. _data = null;
  88. _error = error;
  89. _status = LuPromiseStatus.Failed;
  90. _onFailed.execute(_error);
  91. }
  92. }
  93. public <T2> LuPromise<T2> map(final LuConverter<T, T2> converter)
  94. {
  95. final LuPromise<T2> promise = new LuPromise<>();
  96. then(new LuConsumer<T>() {
  97. @Override
  98. public void execute(T data) {
  99. promise.resolve(converter.convert(data));
  100. }
  101. }, new LuConsumer<LuPromiseError>() {
  102. @Override
  103. public void execute(LuPromiseError error) {
  104. promise.reject(error);
  105. }
  106. });
  107. return promise;
  108. }
  109. public LuConsumer<LuPromiseError> rejectConsumer()
  110. {
  111. return new LuConsumer<LuPromiseError>() {
  112. @Override
  113. public void execute(LuPromiseError error) {
  114. reject(error);
  115. }
  116. };
  117. }
  118. public LuPromiseStatus getStatus()
  119. {
  120. return _status;
  121. }
  122. }