public List<Entity> getLatestRequirementVersionsByProject(Key projectKey) {
   Query query =
       QueryBuilder.buildAncestorQuery(
           RequirementVersion.ENTITY_NAME,
           CompositeFilterOperator.AND,
           new HashMap<String, Object>(),
           projectKey);
   ArtifactVersionEntityManager artifactVersionEntityManager = new ArtifactVersionEntityManager();
   ArtifactEntityManager artifactEntityManager = new ArtifactEntityManager();
   List<Entity> allRequirementVersions =
       datastore.prepare(query).asList(FetchOptions.Builder.withDefaults());
   Map<Key, List<Entity>> requirementVersionsByArtifact = new HashMap<Key, List<Entity>>();
   for (Entity requirementVersion : allRequirementVersions) {
     Entity artifactVersion = artifactVersionEntityManager.find(requirementVersion.getParent());
     Key artifactKey = artifactVersion.getParent();
     if (requirementVersionsByArtifact.containsKey(artifactKey)) {
       requirementVersionsByArtifact.get(artifactKey).add(requirementVersion);
     } else {
       List<Entity> requirementVersionsList = new ArrayList<Entity>();
       requirementVersionsList.add(requirementVersion);
       requirementVersionsByArtifact.put(artifactKey, requirementVersionsList);
     }
   }
   List<ComparableRequirement> latestRequirementVersionsByArtifact =
       new ArrayList<ComparableRequirement>();
   for (Key artifactKey : requirementVersionsByArtifact.keySet()) {
     Integer version = -1;
     Entity candidate = null;
     Integer number = -1;
     for (Entity requirement : requirementVersionsByArtifact.get(artifactKey)) {
       Entity artifactVersion = artifactVersionEntityManager.find(requirement.getParent());
       Entity artifact = artifactEntityManager.find(artifactVersion.getParent());
       if (((Integer) artifactVersion.getProperty(ArtifactVersion.VERSION_NUMBER)) > version) {
         candidate = requirement;
         number = (Integer) artifact.getProperty(Artifact.NUMBER);
       }
     }
     latestRequirementVersionsByArtifact.add(new ComparableRequirement(candidate, number));
   }
   Collections.sort(latestRequirementVersionsByArtifact);
   List<Entity> correctList = new ArrayList<Entity>();
   for (ComparableRequirement cr : latestRequirementVersionsByArtifact) {
     correctList.add(cr.requirementVersion);
   }
   return correctList;
 }