package eu.eudat.migration.services; import eu.eudat.migration.properties.Argos; import eu.eudat.migration.properties.ConfigProperties; import eu.eudat.models.data.admin.composite.DatasetProfile; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dmp.DataManagementPlan; import eu.eudat.models.data.dmp.DataManagementPlanEditorModel; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.login.Credentials; import eu.eudat.models.data.principal.PrincipalModel; import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.ParameterizedTypeReference; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.util.Objects; import java.util.UUID; @Service public class ArgosService { private final Argos argos; private UUID token; private final RestTemplate restTemplate = new RestTemplate(); @Autowired public ArgosService(ConfigProperties properties) { this.argos = properties.getArgos(); } /** * Auth methods * */ public void login() { Credentials credentials = new Credentials(); credentials.setUsername(argos.getUsername()); credentials.setSecret(argos.getPassword()); HttpEntity request = new HttpEntity<>(credentials, setHeaders()); PrincipalModel principal = Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/auth/nativelogin", HttpMethod.POST, request, new ParameterizedTypeReference>() { }).getBody()).getPayload(); this.token = principal.getToken(); } public void logout() { HttpEntity request = new HttpEntity<>(null, setHeaders()); this.restTemplate.exchange(argos.getUrl() + "/api/auth/logout", HttpMethod.POST, request, new ParameterizedTypeReference>() {}); this.token = null; } /** * Dataset Profiles * */ public UUID createDatasetProfile(DatasetProfile datasetProfile) { HttpEntity request = new HttpEntity<>(datasetProfile, setHeaders()); return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/addDmp", HttpMethod.POST, request, new ParameterizedTypeReference() { }).getBody()); } public UUID createNewVersionDatasetProfile(UUID id, DatasetProfile datasetProfile) { HttpEntity request = new HttpEntity<>(datasetProfile, setHeaders()); return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/newVersion/" + id, HttpMethod.POST, request, new ParameterizedTypeReference() { }).getBody()); } public void deleteDatasetProfile(UUID id) { HttpEntity request = new HttpEntity<>(null, setHeaders()); this.restTemplate.exchange(argos.getUrl() + "/api/admin/" + id, HttpMethod.DELETE, request, Object.class); } /** * DMP methods * */ public DataManagementPlan createDMP(DataManagementPlanEditorModel model) { HttpEntity request = new HttpEntity<>(model, setHeaders()); return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/dmps/", HttpMethod.POST, request, new ParameterizedTypeReference>() { }).getBody()).getPayload(); } public void deleteDMP(UUID id) { HttpEntity request = new HttpEntity<>(null, setHeaders()); this.restTemplate.exchange(argos.getUrl() + "/api/dmps/" + id, HttpMethod.DELETE, request, Object.class); } /** * Dataset Methods * */ public PagedDatasetProfile getDataset(UUID id) { HttpEntity request = new HttpEntity<>(null, setHeaders()); return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/get/" + id, HttpMethod.GET, request, new ParameterizedTypeReference>() { }).getBody()).getPayload(); } public DatasetWizardModel createDataset(DatasetWizardModel model) { HttpEntity request = new HttpEntity<>(model, setHeaders()); return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/", HttpMethod.POST, request, new ParameterizedTypeReference>() { }).getBody()).getPayload(); } public void deleteDataset(UUID id) { HttpEntity request = new HttpEntity<>(null, setHeaders()); this.restTemplate.exchange(argos.getUrl() + "/api/datasets/delete/" + id, HttpMethod.DELETE, request, Object.class); } public HttpHeaders setHeaders() { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); if(this.token != null) { headers.add("AuthToken", this.token.toString()); } return headers; } public UUID getToken() { return token; } public void setToken(UUID token) { this.token = token; } }