mirror of
https://github.com/DependencyTrack/dependency-track.git
synced 2025-10-19 16:03:19 +00:00
Added transient List of ProjectVersions and set Metrics in Project to minimize the number of round trips a client needs to make
Signed-off-by: Walter de Boer <walterdeboer@dbso.nl>
This commit is contained in:
parent
6799fc8e0c
commit
c02fe38e7b
6 changed files with 141 additions and 23 deletions
|
@ -31,6 +31,7 @@ import alpine.resources.AlpineRequest;
|
|||
import com.github.packageurl.PackageURL;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.datanucleus.api.jdo.JDOQuery;
|
||||
import org.dependencytrack.auth.Permissions;
|
||||
import org.dependencytrack.event.IndexEvent;
|
||||
import org.dependencytrack.model.Analysis;
|
||||
|
@ -41,6 +42,7 @@ import org.dependencytrack.model.ConfigPropertyConstants;
|
|||
import org.dependencytrack.model.FindingAttribution;
|
||||
import org.dependencytrack.model.Project;
|
||||
import org.dependencytrack.model.ProjectProperty;
|
||||
import org.dependencytrack.model.ProjectVersion;
|
||||
import org.dependencytrack.model.ServiceComponent;
|
||||
import org.dependencytrack.model.Tag;
|
||||
import org.dependencytrack.model.Vulnerability;
|
||||
|
@ -48,7 +50,6 @@ import org.dependencytrack.notification.NotificationConstants;
|
|||
import org.dependencytrack.notification.NotificationGroup;
|
||||
import org.dependencytrack.notification.NotificationScope;
|
||||
import org.dependencytrack.util.NotificationUtil;
|
||||
|
||||
import javax.jdo.FetchPlan;
|
||||
import javax.jdo.PersistenceManager;
|
||||
import javax.jdo.Query;
|
||||
|
@ -193,6 +194,23 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager {
|
|||
return execute(query, params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a project by its uuid.
|
||||
* @param uuid the uuid of the Project (required)
|
||||
* @return a Project object, or null if not found
|
||||
*/
|
||||
public Project getProject(final String uuid) {
|
||||
final Project project = getObjectByUuid(Project.class, uuid, Project.FetchGroup.ALL.name());
|
||||
if (project != null) {
|
||||
// set Metrics to minimize the number of round trips a client needs to make
|
||||
project.setMetrics(getMostRecentProjectMetrics(project));
|
||||
// set ProjectVersions to minimize the number of round trips a client needs to make
|
||||
project.setVersions(getProjectVersions(project));
|
||||
}
|
||||
return project;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a project by its name and version.
|
||||
* @param name the name of the Project (required)
|
||||
|
@ -212,7 +230,14 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager {
|
|||
preprocessACLs(query, queryFilter, params, false);
|
||||
query.setFilter(queryFilter);
|
||||
query.setRange(0, 1);
|
||||
return singleResult(query.executeWithMap(params));
|
||||
final Project project = singleResult(query.executeWithMap(params));
|
||||
if (project != null) {
|
||||
// set Metrics to prevent extra round trip
|
||||
project.setMetrics(getMostRecentProjectMetrics(project));
|
||||
// set ProjectVersions to prevent extra round trip
|
||||
project.setVersions(getProjectVersions(project));
|
||||
}
|
||||
return project;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1095,4 +1120,11 @@ final class ProjectQueryManager extends QueryManager implements IQueryManager {
|
|||
}
|
||||
return hasActiveChild;
|
||||
}
|
||||
|
||||
private List<ProjectVersion> getProjectVersions(Project project) {
|
||||
final Query<Object[]> query = pm.newQuery(JDOQuery.SQL, "SELECT UUID, VERSION FROM PROJECT WHERE NAME = ?");
|
||||
query.setParameters(project.getName());
|
||||
final var stream = query.executeList().stream();
|
||||
return stream.map(i -> new ProjectVersion(i[0].toString(), i[1].toString())).toList();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue