2019-08-02 10:27:12 +02:00
|
|
|
package eu.eudat.logic.managers;
|
|
|
|
|
2019-10-03 13:06:44 +02:00
|
|
|
import eu.eudat.logic.proxy.config.ExternalUrlCriteria;
|
|
|
|
import eu.eudat.logic.utilities.helpers.ListHelper;
|
2019-08-02 10:27:12 +02:00
|
|
|
import eu.eudat.models.data.external.ProjectsExternalSourcesModel;
|
|
|
|
import eu.eudat.models.data.project.Project;
|
|
|
|
import eu.eudat.data.query.items.item.project.ProjectCriteriaRequest;
|
|
|
|
import eu.eudat.logic.builders.model.models.ProjectBuilder;
|
|
|
|
import eu.eudat.logic.proxy.config.exceptions.HugeResultSet;
|
|
|
|
import eu.eudat.logic.proxy.config.exceptions.NoURLFound;
|
|
|
|
import eu.eudat.logic.proxy.fetching.RemoteFetcher;
|
|
|
|
import eu.eudat.logic.services.ApiContext;
|
|
|
|
import eu.eudat.models.data.external.ExternalSourcesItemModel;
|
|
|
|
import eu.eudat.models.data.security.Principal;
|
|
|
|
import eu.eudat.queryable.QueryableList;
|
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import java.util.Comparator;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
2019-10-03 13:06:44 +02:00
|
|
|
import java.util.stream.Collectors;
|
2019-08-02 10:27:12 +02:00
|
|
|
|
|
|
|
@Component
|
|
|
|
public class ProjectManager {
|
|
|
|
|
|
|
|
private ApiContext apiContext;
|
|
|
|
private RemoteFetcher remoteFetcher;
|
2019-10-25 12:57:51 +02:00
|
|
|
private ListHelper listHelper;
|
2019-08-02 10:27:12 +02:00
|
|
|
|
2019-10-25 12:57:51 +02:00
|
|
|
public ProjectManager(ApiContext apiContext, ListHelper listHelper) {
|
2019-08-02 10:27:12 +02:00
|
|
|
this.apiContext = apiContext;
|
|
|
|
this.remoteFetcher = apiContext.getOperationsContext().getRemoteFetcher();
|
2019-10-25 12:57:51 +02:00
|
|
|
this.listHelper = listHelper;
|
2019-08-02 10:27:12 +02:00
|
|
|
}
|
|
|
|
|
2019-08-02 17:21:00 +02:00
|
|
|
public List<Project> getCriteriaWithExternal(ProjectCriteriaRequest projectCriteria, Principal principal) throws HugeResultSet, NoURLFound {
|
2019-08-02 10:27:12 +02:00
|
|
|
eu.eudat.data.entities.UserInfo userInfo = new eu.eudat.data.entities.UserInfo();
|
|
|
|
userInfo.setId(principal.getId());
|
2019-08-26 15:16:50 +02:00
|
|
|
projectCriteria.getCriteria().setReference("dmp:");
|
2019-08-02 10:27:12 +02:00
|
|
|
QueryableList<eu.eudat.data.entities.Project> items = apiContext.getOperationsContext().getDatabaseRepository().getProjectDao().getWithCritetia(projectCriteria.getCriteria());
|
|
|
|
QueryableList<eu.eudat.data.entities.Project> authItems = apiContext.getOperationsContext().getDatabaseRepository().getProjectDao().getAuthenticated(items, userInfo);
|
2019-08-02 17:21:00 +02:00
|
|
|
List<Project> projects = authItems.select(item -> new Project().fromDataModel(item));
|
2019-10-03 13:06:44 +02:00
|
|
|
ExternalUrlCriteria externalUrlCriteria = new ExternalUrlCriteria(projectCriteria.getCriteria().getLike());
|
2020-10-07 13:22:37 +02:00
|
|
|
List<Map<String, String>> remoteRepos = remoteFetcher.getProjects(externalUrlCriteria);
|
2019-08-02 10:27:12 +02:00
|
|
|
ProjectsExternalSourcesModel projectsExternalSourcesModel = new ProjectsExternalSourcesModel().fromExternalItem(remoteRepos);
|
|
|
|
for (ExternalSourcesItemModel externalListingItem : projectsExternalSourcesModel) {
|
|
|
|
eu.eudat.models.data.project.Project project = apiContext.getOperationsContext().getBuilderFactory().getBuilder(ProjectBuilder.class)
|
|
|
|
.reference(externalListingItem.getRemoteId()).label(externalListingItem.getName())
|
|
|
|
.description(externalListingItem.getDescription()).uri(externalListingItem.getUri())
|
|
|
|
.abbreviation(externalListingItem.getAbbreviation()).status(eu.eudat.data.entities.Project.Status.fromInteger(0))
|
2020-01-14 12:00:02 +01:00
|
|
|
.key(externalListingItem.getKey())
|
2019-09-05 16:44:25 +02:00
|
|
|
.source(externalListingItem.getTag())
|
2019-08-02 10:27:12 +02:00
|
|
|
.build();
|
|
|
|
|
|
|
|
projects.add(project);
|
|
|
|
}
|
2019-09-05 16:44:25 +02:00
|
|
|
projects.sort(Comparator.comparing(Project::getLabel));
|
2019-10-25 12:57:51 +02:00
|
|
|
projects = projects.stream().filter(listHelper.distinctByKey(Project::getLabel)).collect(Collectors.toList());
|
2019-08-02 10:27:12 +02:00
|
|
|
return projects;
|
|
|
|
}
|
|
|
|
}
|