/yamcs-client/src/main/java/org/yamcs/client/timeline/TimelineClient.java

https://github.com/yamcs/yamcs · Java · 227 lines · 200 code · 27 blank · 0 comment · 19 complexity · 174d1db7c3a9d7a7da28ef44245fa85f MD5 · raw file

  1. package org.yamcs.client.timeline;
  2. import static org.yamcs.client.utils.WellKnownTypes.toTimestamp;
  3. import java.time.Instant;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.concurrent.CompletableFuture;
  7. import org.yamcs.api.MethodHandler;
  8. import org.yamcs.api.Observer;
  9. import org.yamcs.client.Page;
  10. import org.yamcs.client.base.AbstractPage;
  11. import org.yamcs.client.base.ResponseObserver;
  12. import org.yamcs.protobuf.AddBandRequest;
  13. import org.yamcs.protobuf.CreateItemRequest;
  14. import org.yamcs.protobuf.DeleteBandRequest;
  15. import org.yamcs.protobuf.DeleteItemRequest;
  16. import org.yamcs.protobuf.DeleteTimelineGroupRequest;
  17. import org.yamcs.protobuf.GetItemRequest;
  18. import org.yamcs.protobuf.ListBandsRequest;
  19. import org.yamcs.protobuf.ListBandsResponse;
  20. import org.yamcs.protobuf.ListItemsRequest;
  21. import org.yamcs.protobuf.ListItemsResponse;
  22. import org.yamcs.protobuf.ListSourcesRequest;
  23. import org.yamcs.protobuf.ListSourcesResponse;
  24. import org.yamcs.protobuf.ListTimelineTagsRequest;
  25. import org.yamcs.protobuf.ListTimelineTagsResponse;
  26. import org.yamcs.protobuf.TimelineApiClient;
  27. import org.yamcs.protobuf.TimelineBand;
  28. import org.yamcs.protobuf.TimelineItem;
  29. import org.yamcs.protobuf.TimelineSourceCapabilities;
  30. import org.yamcs.protobuf.UpdateItemRequest;
  31. public class TimelineClient {
  32. static public final String RDB_TIMELINE_SOURCE = "rdb";
  33. final String instance;
  34. final TimelineApiClient timelineService;
  35. public TimelineClient(MethodHandler handler, String instance) {
  36. this.instance = instance;
  37. timelineService = new TimelineApiClient(handler);
  38. }
  39. public CompletableFuture<Page<TimelineItem>> getItems(Instant start, Instant stop, String band) {
  40. ListItemsRequest.Builder requestb = ListItemsRequest.newBuilder()
  41. .setInstance(instance);
  42. if (start != null) {
  43. requestb.setStart(toTimestamp(start));
  44. }
  45. if (stop != null) {
  46. requestb.setStop(toTimestamp(stop));
  47. }
  48. if (band != null) {
  49. requestb.setBand(band);
  50. }
  51. return new TimelineItemPage(requestb.build()).future();
  52. }
  53. public CompletableFuture<TimelineItem> addItem(String source, TimelineItem item) {
  54. if (!item.hasType()) {
  55. throw new IllegalArgumentException("type is mandatory");
  56. }
  57. CreateItemRequest.Builder requestb = CreateItemRequest.newBuilder()
  58. .setType(item.getType())
  59. .setInstance(instance)
  60. .setSource(source);
  61. if (item.hasStart()) {
  62. requestb.setStart(item.getStart());
  63. }
  64. if (item.hasRelativeTime()) {
  65. requestb.setRelativeTime(item.getRelativeTime());
  66. }
  67. if (item.hasDuration()) {
  68. requestb.setDuration(item.getDuration());
  69. }
  70. requestb.addAllTags(item.getTagsList());
  71. if (item.hasGroupId()) {
  72. requestb.setGroupId(item.getGroupId());
  73. }
  74. CompletableFuture<TimelineItem> f = new CompletableFuture<>();
  75. timelineService.createItem(null, requestb.build(), new ResponseObserver<>(f));
  76. return f;
  77. }
  78. public CompletableFuture<TimelineItem> addItem(TimelineItem item) {
  79. return addItem(RDB_TIMELINE_SOURCE, item);
  80. }
  81. public CompletableFuture<TimelineItem> getItem(String source, String id) {
  82. CompletableFuture<TimelineItem> f = new CompletableFuture<>();
  83. GetItemRequest.Builder requestb = GetItemRequest.newBuilder()
  84. .setInstance(instance)
  85. .setSource(source)
  86. .setId(id);
  87. timelineService.getItem(null, requestb.build(), new ResponseObserver<>(f));
  88. return f;
  89. }
  90. public CompletableFuture<TimelineItem> deleteItem(String id) {
  91. return deleteItem(RDB_TIMELINE_SOURCE, id);
  92. }
  93. public CompletableFuture<TimelineItem> deleteItem(String source, String id) {
  94. CompletableFuture<TimelineItem> f = new CompletableFuture<>();
  95. DeleteItemRequest.Builder requestb = DeleteItemRequest.newBuilder()
  96. .setInstance(instance)
  97. .setSource(source)
  98. .setId(id);
  99. timelineService.deleteItem(null, requestb.build(), new ResponseObserver<>(f));
  100. return f;
  101. }
  102. public CompletableFuture<TimelineItem> deleteTimelineGroup(String id) {
  103. return deleteTimelineGroup(RDB_TIMELINE_SOURCE, id);
  104. }
  105. public CompletableFuture<TimelineItem> deleteTimelineGroup(String source, String id) {
  106. CompletableFuture<TimelineItem> f = new CompletableFuture<>();
  107. DeleteTimelineGroupRequest.Builder requestb = DeleteTimelineGroupRequest.newBuilder()
  108. .setInstance(instance)
  109. .setSource(source)
  110. .setId(id);
  111. timelineService.deleteTimelineGroup(null, requestb.build(), new ResponseObserver<>(f));
  112. return f;
  113. }
  114. public CompletableFuture<TimelineItem> getItem(String id) {
  115. return getItem(RDB_TIMELINE_SOURCE, id);
  116. }
  117. public CompletableFuture<Map<String, TimelineSourceCapabilities>> getSources() {
  118. ListSourcesRequest.Builder requestb = ListSourcesRequest.newBuilder().setInstance(instance);
  119. CompletableFuture<ListSourcesResponse> f = new CompletableFuture<>();
  120. timelineService.listSources(null, requestb.build(), new ResponseObserver<>(f));
  121. return f.thenApply(ListSourcesResponse::getSourcesMap);
  122. }
  123. private class TimelineItemPage extends AbstractPage<ListItemsRequest, ListItemsResponse, TimelineItem>
  124. implements Page<TimelineItem> {
  125. public TimelineItemPage(ListItemsRequest request) {
  126. super(request, "items");
  127. }
  128. @Override
  129. protected void fetch(ListItemsRequest request, Observer<ListItemsResponse> observer) {
  130. timelineService.listItems(null, request, observer);
  131. }
  132. }
  133. public CompletableFuture<List<String>> getTags() {
  134. ListTimelineTagsRequest.Builder requestb = ListTimelineTagsRequest.newBuilder().setInstance(instance);
  135. CompletableFuture<ListTimelineTagsResponse> f = new CompletableFuture<>();
  136. timelineService.listTags(null, requestb.build(), new ResponseObserver<>(f));
  137. return f.thenApply(ListTimelineTagsResponse::getTagsList);
  138. }
  139. public CompletableFuture<TimelineItem> updateItem(TimelineItem item) {
  140. return updateItem(RDB_TIMELINE_SOURCE, item);
  141. }
  142. public CompletableFuture<TimelineItem> updateItem(String source, TimelineItem item) {
  143. if (!item.hasId()) {
  144. throw new IllegalArgumentException("the item needs an id");
  145. }
  146. UpdateItemRequest.Builder requestb = UpdateItemRequest.newBuilder()
  147. .setInstance(instance)
  148. .setSource(source)
  149. .setId(item.getId());
  150. if (item.hasStart()) {
  151. requestb.setStart(item.getStart());
  152. }
  153. if (item.hasRelativeTime()) {
  154. requestb.setRelativeTime(item.getRelativeTime());
  155. }
  156. if (item.hasDuration()) {
  157. requestb.setDuration(item.getDuration());
  158. }
  159. requestb.addAllTags(item.getTagsList());
  160. if (item.hasGroupId()) {
  161. requestb.setGroupId(item.getGroupId());
  162. }
  163. CompletableFuture<TimelineItem> f = new CompletableFuture<>();
  164. timelineService.updateItem(null, requestb.build(), new ResponseObserver<>(f));
  165. return f;
  166. }
  167. public CompletableFuture<List<TimelineBand>> getBands() {
  168. ListBandsRequest.Builder request = ListBandsRequest.newBuilder().setInstance(instance);
  169. CompletableFuture<ListBandsResponse> f = new CompletableFuture<>();
  170. timelineService.listBands(null, request.build(), new ResponseObserver<>(f));
  171. return f.thenApply(ListBandsResponse::getBandsList);
  172. }
  173. public CompletableFuture<TimelineBand> deleteBand(String id) {
  174. CompletableFuture<TimelineBand> f = new CompletableFuture<>();
  175. DeleteBandRequest.Builder requestb = DeleteBandRequest.newBuilder()
  176. .setInstance(instance)
  177. .setId(id);
  178. timelineService.deleteBand(null, requestb.build(), new ResponseObserver<>(f));
  179. return f;
  180. }
  181. public CompletableFuture<TimelineBand> addBand(TimelineBand band) {
  182. AddBandRequest.Builder requestb = AddBandRequest.newBuilder()
  183. .setType(band.getType())
  184. .setInstance(instance);
  185. requestb.addAllTags(band.getTagsList());
  186. requestb.putAllProperties(band.getPropertiesMap());
  187. if (band.hasName()) {
  188. requestb.setName(band.getName());
  189. }
  190. if (band.hasDescription()) {
  191. requestb.setDescription(band.getDescription());
  192. }
  193. if (band.hasShared()) {
  194. requestb.setShared(band.getShared());
  195. }
  196. CompletableFuture<TimelineBand> f = new CompletableFuture<>();
  197. timelineService.addBand(null, requestb.build(), new ResponseObserver<>(f));
  198. return f;
  199. }
  200. }