136 lines
5.5 KiB
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;
|
|
}
|
|
}
|