argos/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java

226 lines
15 KiB
Java

package eu.eudat.controllers;
import eu.eudat.authorization.Permission;
import eu.eudat.commons.scope.user.UserScope;
import eu.eudat.data.DescriptionTemplateEntity;
import eu.eudat.logic.managers.DatasetProfileManager;
import eu.eudat.logic.managers.MetricsManager;
import eu.eudat.logic.managers.UserManager;
import eu.eudat.logic.proxy.config.configloaders.ConfigLoader;
import eu.eudat.logic.services.ApiContext;
import eu.eudat.models.data.helpers.responses.ResponseItem;
import eu.eudat.query.DescriptionTemplateTypeQuery;
import eu.eudat.service.descriptiontemplatetype.DescriptionTemplateTypeService;
import eu.eudat.service.fielddatahelper.FieldDataHelperService;
import eu.eudat.types.ApiMessageCode;
import gr.cite.commons.web.authz.service.AuthorizationService;
import gr.cite.tools.data.query.QueryFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import jakarta.transaction.Transactional;
import javax.management.InvalidApplicationException;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
@RestController
@CrossOrigin
@RequestMapping(value = {"/api/admin/"})
public class Admin extends BaseController {
private DatasetProfileManager datasetProfileManager;
private UserManager userManager;
private ConfigLoader configLoader;
private final MetricsManager metricsManager;
private final AuthorizationService authorizationService;
private final UserScope userScope;
private final QueryFactory queryFactory;
private final DescriptionTemplateTypeService descriptionTemplateTypeService;
//private final FieldDataHelperService fieldDataHelperService;
@Autowired
public Admin(ApiContext apiContext, DatasetProfileManager datasetProfileManager, UserManager userManager/*, Logger logger*/, ConfigLoader configLoader, MetricsManager metricsManager, AuthorizationService authorizationService, UserScope userScope, QueryFactory queryFactory, DescriptionTemplateTypeService descriptionTemplateTypeService/*, FieldDataHelperService fieldDataHelperService*/) {
super(apiContext);
this.datasetProfileManager = datasetProfileManager;
this.userManager = userManager;
this.configLoader = configLoader;
this.metricsManager = metricsManager;
this.authorizationService = authorizationService;
this.userScope = userScope;
this.queryFactory = queryFactory;
this.descriptionTemplateTypeService = descriptionTemplateTypeService;
//this.fieldDataHelperService = fieldDataHelperService;
}
// @Transactional
// @RequestMapping(method = RequestMethod.POST, value = {"/addDmp"}, consumes = "application/json", produces = "application/json")
// public ResponseEntity<Object> addDmp(@Valid @RequestBody DatasetProfile profile) throws Exception {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// //this.getLoggerService().info(principal, "Admin Added Dataset Profile");
// DatasetProfile shortenProfile = profile.toShort();
// DescriptionTemplateEntity modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, getApiContext(), descriptionTemplateTypeService);
//// modelDefinition.setType(getApiContext().getOperationsContext().getDatabaseRepository().getDescriptionTemplateTypeDao().findFromName(profile.getType()));
////TODO: dtziotzios modelDefinition.setType(descriptionTemplateTypeService.getEntityByName(profile.getType()));
// modelDefinition.setGroupId(UUID.randomUUID());
// modelDefinition.setVersion((short) 0);
//
// DescriptionTemplateEntity descriptionTemplateEntity = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
// UserDescriptionTemplateEntity userDatasetProfile = new UserDescriptionTemplateEntity();
// userDatasetProfile.setDescriptionTemplate(descriptionTemplateEntity.getId());
// UserInfo userInfo = getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId());
// userDatasetProfile.setUser(userInfo.getId());
// userDatasetProfile.setRole(UserDescriptionTemplateRole.Owner);
// getApiContext().getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
// datasetProfileManager.storeDatasetProfileUsers(descriptionTemplateEntity, profile);
//
// metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricsManager.datasetTemplateStatus.get(descriptionTemplateEntity.getStatus()) );
// return ResponseEntity.status(HttpStatus.OK).body(modelDefinition.getId());
// }
// @Transactional
// @RequestMapping(method = RequestMethod.POST, value = {"/addDmp/{id}"}, consumes = "application/json", produces = "application/json")
// public ResponseEntity<ResponseItem<UUID>> updateDmp(@PathVariable String id, @RequestBody DatasetProfile profile) throws Exception {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// DatasetProfile shortenProfile = profile.toShort();
// DescriptionTemplateEntity modelDefinition = AdminManager.generateViewStyleDefinition(shortenProfile, getApiContext(), descriptionTemplateTypeService);
// DescriptionTemplateEntity datasetprofile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
// datasetprofile.setDefinition(modelDefinition.getDefinition());
// DescriptionTemplateStatus oldStatus = datasetprofile.getStatus();
// datasetprofile.setStatus(modelDefinition.getStatus());
// datasetprofile.setLabel(modelDefinition.getLabel());
// datasetprofile.setDescription(modelDefinition.getDescription());
// datasetprofile.setLanguage(modelDefinition.getLanguage());
// DescriptionTemplateEntity descriptionTemplateEntity = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(datasetprofile);
// datasetProfileManager.storeDatasetProfileUsers(descriptionTemplateEntity, profile);
// if (DescriptionTemplateStatus.Finalized.equals(descriptionTemplateEntity.getStatus()) && DescriptionTemplateStatus.Draft.equals(oldStatus)) {
// metricsManager.increaseValue(MetricNames.DATASET_TEMPLATE, 1, MetricNames.ACTIVE);
// }
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<UUID>().status(ApiMessageCode.NO_MESSAGE));
// }
// @Transactional
// @RequestMapping(method = RequestMethod.POST, value = {"/newVersion/{id}"}, produces = "application/json")
// public ResponseEntity newVersionDatasetProfile(@PathVariable String id, @RequestBody DatasetProfile profile) throws Exception {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// try {
// DescriptionTemplateEntity modelDefinition = this.datasetProfileManager.createNewVersionDatasetProfile(id, profile);
// return ResponseEntity.status(HttpStatus.OK).body(modelDefinition.getId());
// } catch (DatasetProfileNewVersionException exception) {
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<eu.eudat.models.data.admin.composite.DatasetProfile>().status(ApiMessageCode.ERROR_MESSAGE).message(exception.getMessage()));
// }
// }
// @RequestMapping(method = RequestMethod.GET, value = {"/get/{id}"}, produces = "application/json")
// @Transactional
// public ResponseEntity<ResponseItem<DatasetProfile>> get(@PathVariable String id) throws InvalidApplicationException {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// eu.eudat.models.data.admin.composite.DatasetProfile datasetprofile = this.datasetProfileManager.getDatasetProfile(id);
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DatasetProfile>().status(ApiMessageCode.NO_MESSAGE).payload(datasetprofile));
// }
// @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofiles/getPaged"}, produces = "application/json")
// public @ResponseBody
// ResponseEntity<ResponseItem<DataTableData<DatasetProfileListingModel>>> getPaged(@RequestBody DatasetProfileTableRequestItem datasetProfileTableRequestItem) throws Exception {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// DataTableData<DatasetProfileListingModel> datasetProfileTableData = this.datasetProfileManager.getPaged(datasetProfileTableRequestItem);
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<DataTableData<DatasetProfileListingModel>>().status(ApiMessageCode.NO_MESSAGE).payload(datasetProfileTableData));
// }
// @RequestMapping(method = RequestMethod.POST, value = {"/preview"}, consumes = "application/json", produces = "application/json")
// public ResponseEntity<ResponseItem<PagedDatasetProfile>> getPreview(@RequestBody DatasetProfile profile) throws Exception {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// DescriptionTemplateEntity modelDefinition = AdminManager.generateViewStyleDefinition(profile, getApiContext(), descriptionTemplateTypeService);
// eu.eudat.models.data.user.composite.DatasetProfile datasetProfile = userManager.generateDatasetProfileModel(modelDefinition);
// PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile();
// pagedDatasetProfile.buildPagedDatasetProfile(datasetProfile);
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<PagedDatasetProfile>().status(ApiMessageCode.NO_MESSAGE).payload(pagedDatasetProfile));
// }
// @Transactional
// @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofile/clone/{id}"}, consumes = "application/json", produces = "application/json")
// public ResponseEntity<ResponseItem<eu.eudat.models.data.admin.composite.DatasetProfile>> clone(@PathVariable String id) throws InvalidApplicationException {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// eu.eudat.models.data.admin.composite.DatasetProfile datasetprofile = this.datasetProfileManager.getDatasetProfile(id);
// datasetprofile.setLabel(datasetprofile.getLabel() + " new ");
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<eu.eudat.models.data.admin.composite.DatasetProfile>().payload(datasetprofile));
// }
// @Transactional
// @RequestMapping(method = RequestMethod.DELETE, value = {"{id}"}, consumes = "application/json", produces = "application/json")
// public @ResponseBody
// ResponseEntity<ResponseItem<DatasetProfile>> inactivate(@PathVariable String id) {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// try {
// DescriptionTemplateEntity ret = AdminManager.inactivate(this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao(), this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao(), id);
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<eu.eudat.models.data.admin.composite.DatasetProfile>().status(ApiMessageCode.SUCCESS_MESSAGE));
// } catch (DatasetProfileWithDatasetsExeption | InvalidApplicationException exception) {
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<eu.eudat.models.data.admin.composite.DatasetProfile>().status(ApiMessageCode.UNSUCCESS_DELETE).message(exception.getMessage()));
// }
// }
// @Transactional
// @RequestMapping(method = RequestMethod.GET, value = {"/getXml/{id}"}, produces = "application/json")
// public ResponseEntity getDatasetProfileXml(@PathVariable String id, @RequestHeader("Content-Type") String contentType) throws IllegalAccessException, IOException, InstantiationException, InvalidApplicationException {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// if (contentType.equals("application/xml")) {
// DescriptionTemplateEntity profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id));
// eu.eudat.models.data.user.composite.DatasetProfile datasetProfile = userManager.generateDatasetProfileModel(profile);
// datasetProfile.setStatus(profile.getStatus().getValue());
// datasetProfile.setDescription(profile.getDescription());
// datasetProfile.setLanguage(profile.getLanguage());
// datasetProfile.setType(this.queryFactory.query(DescriptionTemplateTypeQuery.class).ids(profile.getType()).first().getName());
// return this.datasetProfileManager.getDocument(datasetProfile, profile.getLabel());
// } else {
// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem<eu.eudat.models.data.admin.composite.DatasetProfile>().status(ApiMessageCode.ERROR_MESSAGE).message("NOT AUTHORIZE"));
// }
// }
// @RequestMapping(method = RequestMethod.POST, value = {"/upload", "/upload/{id}"})
// public ResponseEntity<Object> setDatasetProfileXml(@RequestParam("file") MultipartFile file,
// @PathVariable(value = "id", required = false) String id) throws Exception {
// this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
//
// DescriptionTemplateImportXml descriptionTemplateImportXmlModel = this.datasetProfileManager.createDatasetProfileFromXml(file);
// eu.eudat.models.data.admin.composite.DatasetProfile datasetProfileEntity = descriptionTemplateImportXmlModel.toPersistModel(file.getOriginalFilename(), this.fieldDataHelperService);
// DescriptionTemplateEntity modelDefinition;
// if (id == null) {
// modelDefinition = AdminManager.generateViewStyleDefinition(datasetProfileEntity, getApiContext(), descriptionTemplateTypeService);
// DescriptionTemplateEntity descriptionTemplateEntity = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().createOrUpdate(modelDefinition);
// UserDescriptionTemplateEntity userDatasetProfile = new UserDescriptionTemplateEntity();
// userDatasetProfile.setDescriptionTemplate(descriptionTemplateEntity.getId());
// UserInfo userInfo = getApiContext().getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userScope.getUserId());
// userDatasetProfile.setUser(userInfo.getId());
// userDatasetProfile.setRole(UserDescriptionTemplateRole.Owner);
// getApiContext().getOperationsContext().getDatabaseRepository().getUserDatasetProfileDao().createOrUpdate(userDatasetProfile);
// } else {
// modelDefinition = datasetProfileManager.createNewVersionDatasetProfile(id, datasetProfileEntity);
// }
// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<DescriptionTemplateEntity>>()
// .status(ApiMessageCode.SUCCESS_MESSAGE).message(""));
// }
@RequestMapping(method = RequestMethod.GET, value = {"/getSemantics"}, produces = "application/json")
public ResponseEntity<ResponseItem<List<String>>> getSemantics(@RequestParam(value = "query", required = false) String query) {
this.authorizationService.authorizeForce(Permission.AdminRole, Permission.DatasetProfileManagerRole);
List<String> semantics = this.datasetProfileManager.getSemantics(query);
return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem<List<String>>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(semantics));
}
}