private static Set<ExtTrustRelationship> entitiesToExtRelationships(
      final Set<ITrustedEntity> entities, final TrustQuery query) {

    final Set<ExtTrustRelationship> result =
        new LinkedHashSet<ExtTrustRelationship>(entities.size());

    final TrustValueType trustValueType = query.getTrustValueType();
    for (final ITrustedEntity entity : entities) {

      final Set<TrustEvidence> evidenceSet = iEvidenceToEvidence(entity.getEvidence());
      // TODO Needs optimisation
      final Set<TrustEvidence> directEvidenceSet = new LinkedHashSet<TrustEvidence>();
      final Set<TrustEvidence> indirectEvidenceSet = new LinkedHashSet<TrustEvidence>();
      for (final TrustEvidence evidence : evidenceSet) {
        if (evidence.getSourceId() == null) {
          directEvidenceSet.add(evidence);
        } else {
          indirectEvidenceSet.add(evidence);
        }
      }

      if (entity.getDirectTrust().getValue() != null
          && (null == trustValueType || TrustValueType.DIRECT == trustValueType)) {
        result.add(
            new ExtTrustRelationship(
                entity.getTrustorId(),
                entity.getTrusteeId(),
                TrustValueType.DIRECT,
                entity.getDirectTrust().getValue(),
                entity.getDirectTrust().getLastUpdated(),
                directEvidenceSet));
      }
      if (entity.getIndirectTrust().getValue() != null
          && (null == trustValueType || TrustValueType.INDIRECT == trustValueType)) {
        result.add(
            new ExtTrustRelationship(
                entity.getTrustorId(),
                entity.getTrusteeId(),
                TrustValueType.INDIRECT,
                entity.getIndirectTrust().getValue(),
                entity.getIndirectTrust().getLastUpdated(),
                indirectEvidenceSet));
      }
      if (entity.getUserPerceivedTrust().getValue() != null
          && (null == trustValueType || TrustValueType.USER_PERCEIVED == trustValueType)) {
        result.add(
            new ExtTrustRelationship(
                entity.getTrustorId(),
                entity.getTrusteeId(),
                TrustValueType.USER_PERCEIVED,
                entity.getUserPerceivedTrust().getValue(),
                entity.getUserPerceivedTrust().getLastUpdated(),
                new HashSet<TrustEvidence>()));
      }
    }

    return result;
  }