/** {@inheritDoc} */
 @CheckForNull
 public SCMSource getSCMSource(@CheckForNull String sourceId) {
   for (SCMSource source : getSCMSources()) {
     if (source.getId().equals(sourceId)) {
       return source;
     }
   }
   return nullSCMSource;
 }
  /**
   * Creates a {@link Branch} for a specific {@link SCMSource} and {@link SCMHead}.
   *
   * @param source the {@link SCMSource}
   * @param head the {@link SCMHead}.
   * @return the {@link Branch}
   */
  @NonNull
  private Branch newBranch(@NonNull SCMSource source, @NonNull SCMHead head) {
    source.getClass(); // throw NPE if null
    head.getClass(); // throw NPE if null

    String sourceId = source.getId();
    if (NullSCMSource.ID.equals(sourceId)) {
      return new Branch.Dead(head, Collections.<BranchProperty>emptyList());
    } else {
      final BranchPropertyStrategy strategy = getBranchPropertyStrategy(source);
      return new Branch(
          sourceId,
          head,
          source.build(head),
          strategy != null
              ? strategy.getPropertiesFor(head)
              : Collections.<BranchProperty>emptyList());
    }
  }