• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

WindhoverLabs / phoebus / #78

06 Sep 2023 05:36PM UTC coverage: 16.563%. First build
#78

push

lorenzo-gomez-windhover
-Connection status StatusBar. WIP.

31 of 31 new or added lines in 3 files covered. (100.0%)

17767 of 107271 relevant lines covered (16.56%)

0.17 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

82.73
/core/commander-core/src/main/java/com/windhoverlabs/yamcs/core/YamcsObjectManager.java
1
package com.windhoverlabs.yamcs.core;
2

3
import com.windhoverlabs.pv.yamcs.YamcsAware;
4
import com.windhoverlabs.pv.yamcs.YamcsAware.YamcsAwareMethod;
5
import java.util.ArrayList;
6
import java.util.logging.Logger;
7
import javafx.beans.property.SimpleStringProperty;
8
import javafx.collections.FXCollections;
9
import javafx.collections.ObservableList;
10

11
/**
12
 * Very simple class which manages YamcsObjects. Users of commander-core should always use this
13
 * class to access YamcsObject objects via the getRoot() method.
14
 *
15
 * @author lgomez
16
 */
17
public final class YamcsObjectManager {
18

19
  /** Logger for all file browser code */
20
  public static final Logger log = Logger.getLogger(YamcsObjectManager.class.getPackageName());
1✔
21

22
  private static YamcsObject<YamcsServer> root;
23
  private static ObservableList<YamcsServer> servers = FXCollections.observableArrayList();
1✔
24
  private YamcsAware listener;
25

26
  private static SimpleStringProperty managerStatus =
1✔
27
      new SimpleStringProperty("Connection Status: Disconnected");
28

29
  public static SimpleStringProperty getManagerStatus() {
30
    return managerStatus;
×
31
  }
32

33
  private static ArrayList<YamcsAware> listeners = new ArrayList<YamcsAware>();
1✔
34

35
  //  TODO: Really don't like this static block pattern. The proper way to do it is to add listeners
36
  // to the "servers" observable list.
37
  //  This will do, for now.
38

39
  static {
40
  }
41

42
  // At the moment we do not support setting a default server directly by the outside
43
  private static YamcsServer defaultServer = null;
1✔
44
  // TODO:When doing integration testing(specifically Connections App), refactor this
45
  // such that third parameter is removed.
46
  public static void setConnectionObjForServer(
47
      YamcsServerConnection newConnection, String oldServerName, String newServerName) {
48
    getServerFromName(oldServerName).setConnection(newConnection);
1✔
49
    if (defaultServerName != null && defaultServerName.equals(oldServerName)) {
1✔
50
      defaultServerName = newServerName;
1✔
51
    }
52
  }
1✔
53

54
  private static CMDR_YamcsInstance defaultInstance = null;
1✔
55
  private static String defaultInstanceName = null;
1✔
56
  private static String defaultServerName = null;
1✔
57

58
  public static String getDefaultServerName() {
59
    return defaultServerName;
1✔
60
  }
61

62
  public static String getDefaultInstanceName() {
63
    return defaultInstanceName;
1✔
64
  }
65

66
  public static YamcsServer getDefaultServer() {
67
    return defaultServer;
1✔
68
  }
69

70
  public static CMDR_YamcsInstance getDefaultInstance() {
71
    return defaultInstance;
1✔
72
  }
73

74
  public static void setDefaultInstance(String server, String instance) {
75
    defaultServer = getServerFromName(server);
1✔
76
    if (defaultServer == null) {
1✔
77
      log.warning("Server " + "\"" + server + "\" not found");
1✔
78
      return;
1✔
79
    }
80

81
    for (YamcsServer s : root.getItems()) {
1✔
82
      s.setDefaultInstance(null);
1✔
83
    }
1✔
84
    defaultInstanceName = instance;
1✔
85
    defaultServerName = server;
1✔
86
    defaultInstance = getServerFromName(server).getInstance(instance);
1✔
87
    if (defaultInstance == null) {
1✔
88
      log.warning("Should not happen: Instance " + "\"" + instance + "\" not found");
1✔
89
      return;
1✔
90
    }
91
    defaultServer.setDefaultInstance(defaultInstanceName);
1✔
92

93
    if (defaultInstance != null) {
1✔
94
      for (YamcsAware listener : listeners) {
1✔
95
        listener.changeDefaultInstance();
1✔
96
      }
1✔
97
    }
98
  }
1✔
99

100
  private YamcsObjectManager() {
101

102
    //    addYamcsListener(listener);
103
  }
104

105
  public static YamcsObject<YamcsServer> getRoot() {
106
    return root;
1✔
107
  }
108

109
  static {
110
    YamcsAware managerListener =
1✔
111
        new YamcsAware() {
1✔
112
          /**
113
           * TODO:At the moment onYamcsConnected is not being called changeDefaultInstance is
114
           * driving the listeners for now.
115
           */
116
          public void onYamcsConnected() {
117
            if (!anyServerConnected()) {
1✔
118
              managerStatus.set("Connection Status: Connected");
1✔
119
            }
120
          }
1✔
121

122
          public void onYamcsDisconnected() {
123
            if (!anyServerConnected()) {
1✔
124
              managerStatus.set("Connection Status: Disconnected");
1✔
125
            }
126
          }
1✔
127

128
          public void changeDefaultInstance() {
129
            if (anyServerConnected()) {
1✔
130
              managerStatus.set(
×
131
                  "Connection Status: Connected. Default Server: \""
132
                      + getDefaultServerName()
×
133
                      + "\""
134
                      + ". Default set to "
135
                      + "\""
136
                      + getDefaultInstanceName()
×
137
                      + "\"");
138
            }
139
          }
1✔
140

141
          public void onInstancesReady(YamcsServer s) {
142
            managerStatus.set("Connection Status: Connected to \"" + s.getName() + "\"");
×
143
          }
×
144
        };
145
    listeners.add(managerListener);
1✔
146
    root =
1✔
147
        new YamcsObject<YamcsServer>("") {
1✔
148

149
          @Override
150
          public String getObjectType() {
151
            return "root";
1✔
152
          }
153

154
          @Override
155
          public ObservableList<YamcsServer> getItems() {
156
            return servers;
1✔
157
          }
158

159
          @Override
160
          public void createAndAddChild(String name) {
161
            YamcsServer newServer = new YamcsServer(name);
1✔
162
            try {
163
              for (YamcsAware l : listeners) {
1✔
164
                newServer.addListener(l);
1✔
165
              }
1✔
166
            } catch (Exception e) {
×
167
              // TODO Auto-generated catch block
168
              e.printStackTrace();
×
169
            }
1✔
170
            getItems().add(newServer);
1✔
171
          }
1✔
172
        };
173
  }
1✔
174

175
  public static void addYamcsListener(YamcsAware newListener) {
176
    log.info("addYamcsListener on YamcsServer");
1✔
177
    listeners.add(newListener);
1✔
178
    if (defaultInstance != null) {
1✔
179
      newListener.changeDefaultInstance();
1✔
180
    }
181
    //  for (YamcsServer s : YamcsObjectManager.getRoot().getItems()) {
182
    //  s.addListener(yamcsListener);
183
    // }
184
  }
1✔
185

186
  /**
187
   * Traverse through allServers and find the server object that matches name
188
   *
189
   * @param name Name of the user-defined server.
190
   * @return The object with the server name.
191
   */
192
  public static YamcsServer getServerFromName(String name) {
193
    YamcsServer outServer = null;
1✔
194
    for (YamcsObject<?> server : root.getItems()) {
1✔
195
      if (server.getName().equals(name)) {
1✔
196
        outServer = (YamcsServer) server;
1✔
197
      }
198
    }
1✔
199
    return outServer;
1✔
200
  }
201

202
  /**
203
   * Traverse through allServers and find the instance object that matches pathToInstance
204
   *
205
   * @param serverName Name of the user-defined server. "Server_A:yamcs-cfs"
206
   * @return The object with the server name.
207
   */
208
  public static CMDR_YamcsInstance getInstanceFromName(String serverName, String instanceName) {
209
    CMDR_YamcsInstance outServer = null;
1✔
210
    for (YamcsObject<?> server : root.getItems()) {
1✔
211
      if (server.getName().equals(serverName)) {
1✔
212
        outServer = ((YamcsServer) server).getInstance(instanceName);
1✔
213
      }
214
    }
1✔
215
    return outServer;
1✔
216
  }
217
  //  TODO:Right now there are several ways to "trigger" these events. I think this function should
218
  // become the only and default way
219
  //  to avoid redundant code paths that maintenance more difficult and makes code harder to follow.
220
  static void triggerYamcsListeners(YamcsAwareMethod m) {
221
    for (YamcsAware l : listeners) {
1✔
222
      switch (m) {
1✔
223
        case onYamcsDisconnected:
224
          {
225
            l.onYamcsDisconnected();
1✔
226
          }
227
          break;
1✔
228
        case changeDefaultInstance:
229
          l.changeDefaultInstance();
1✔
230
          ;
231
          break;
1✔
232
        case onYamcsConnected:
233
          {
234
            l.onYamcsConnected();
1✔
235
          }
236
          break;
1✔
237
        default:
238
          break;
239
      }
240
    }
1✔
241
  }
1✔
242

243
  public static void removeListener(YamcsAware l) {
244
    listeners.remove(l);
×
245
  }
×
246

247
  public static void switchProcessor(String processorName) {
248
    if (defaultInstance != null) {
×
249
      for (YamcsAware listener : listeners) {
×
250
        getDefaultInstance()
×
251
            .switchProcessor(
×
252
                getDefaultServer().getYamcsClient(), getDefaultServer().getName(), processorName);
×
253
        listener.changeProcessor(getDefaultInstance().getName(), processorName);
×
254
      }
×
255
    }
256
  }
×
257

258
  private static boolean anyServerConnected() {
259
    boolean isConnected = false;
1✔
260
    for (var s : servers) {
1✔
261
      if (s.getServerState() == ConnectionState.CONNECTED) {
1✔
262
        isConnected = true;
×
263
      }
264
    }
1✔
265

266
    return isConnected;
1✔
267
  }
268
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc