code: public void loadTopology() {
          if (fake) {
              getView().updateHosts(deriveGroups(generateFakeDomain()), hostIndex);
          } else {
              Outcome<FunctionContext> outcome = new Outcome<FunctionContext>() {
                  @Override
                  public void onFailure(final FunctionContext context) {
                      Console.error("Unable to load topology", context.getErrorMessage()); // TODO i18n
                  }
  
                  @Override
                  public void onSuccess(final FunctionContext context) {
                      List<HostInfo> hosts = context.pop();
                      getView().updateHosts(deriveGroups(hosts), hostIndex);
                  }
              };
              new Async<FunctionContext>(Footer.PROGRESS_ELEMENT).waterfall(new FunctionContext(), outcome,
                      new TopologyFunctions.ReadHostsAndGroups(dispatcher),
                      new TopologyFunctions.ReadServerConfigs(dispatcher, beanFactory),
                      new TopologyFunctions.FindRunningServerInstances(dispatcher));
          }
      }
docs: ------------------------------------------------------ presenter lifecycle