code: @Nonnull
      private BallColor calculateBallColor() {
          if (owner instanceof TemplateDrivenMultiBranchProject
                  && ((TemplateDrivenMultiBranchProject) owner).isDisabled()) {
              return BallColor.DISABLED;
          }
  
          BallColor c = BallColor.DISABLED;
          boolean animated = false;
  
          StringTokenizer tokens = new StringTokenizer(Util.fixNull(jobs), ",");
          while (tokens.hasMoreTokens()) {
              String jobName = tokens.nextToken().trim();
              TopLevelItem item = owner.getItem(jobName);
              if (item != null && item instanceof Job) {
                  BallColor d = ((Job) item).getIconColor();
                  animated |= d.isAnimated();
                  d = d.noAnime();
                  if (d.compareTo(c) < 0) {
                      c = d;
                  }
              }
          }
  
          if (animated) {
              c = c.anime();
          }
  
          return c;
      }
docs: Calculates the color of the status ball for the owner based on selected descendants.
  <br>
  Logic kanged from Branch API (original author Stephen Connolly).
  
  @return the color of the status ball for the owner.