argos/dmp-backend/roadmap/src/main/java/eu/eudat/migration/services/ArgosService.java

136 lines
5.5 KiB
Java

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<Credentials> request = new HttpEntity<>(credentials, setHeaders());
PrincipalModel principal = Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/auth/nativelogin",
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<PrincipalModel>>() {
}).getBody()).getPayload();
this.token = principal.getToken();
}
public void logout() {
HttpEntity<Object> request = new HttpEntity<>(null, setHeaders());
this.restTemplate.exchange(argos.getUrl() + "/api/auth/logout", HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<Principal>>() {});
this.token = null;
}
/**
* Dataset Profiles
* */
public UUID createDatasetProfile(DatasetProfile datasetProfile) {
HttpEntity<DatasetProfile> request = new HttpEntity<>(datasetProfile, setHeaders());
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/addDmp",
HttpMethod.POST, request, new ParameterizedTypeReference<UUID>() {
}).getBody());
}
public UUID createNewVersionDatasetProfile(UUID id, DatasetProfile datasetProfile) {
HttpEntity<DatasetProfile> request = new HttpEntity<>(datasetProfile, setHeaders());
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/admin/newVersion/" + id,
HttpMethod.POST, request, new ParameterizedTypeReference<UUID>() {
}).getBody());
}
public void deleteDatasetProfile(UUID id) {
HttpEntity<Object> 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<DataManagementPlanEditorModel> request = new HttpEntity<>(model, setHeaders());
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/dmps/",
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<DataManagementPlan>>() {
}).getBody()).getPayload();
}
public void deleteDMP(UUID id) {
HttpEntity<Object> 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<Object> request = new HttpEntity<>(null, setHeaders());
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/get/" + id,
HttpMethod.GET, request, new ParameterizedTypeReference<ResponseItem<PagedDatasetProfile>>() {
}).getBody()).getPayload();
}
public DatasetWizardModel createDataset(DatasetWizardModel model) {
HttpEntity<DatasetWizardModel> request = new HttpEntity<>(model, setHeaders());
return Objects.requireNonNull(this.restTemplate.exchange(argos.getUrl() + "/api/datasets/",
HttpMethod.POST, request, new ParameterizedTypeReference<ResponseItem<DatasetWizardModel>>() {
}).getBody()).getPayload();
}
public void deleteDataset(UUID id) {
HttpEntity<Object> 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;
}
}