package eu.eudat.controllers; import eu.eudat.data.dao.criteria.RequestItem; import eu.eudat.logic.managers.DatasetProfileManager; import eu.eudat.logic.managers.UserManager; import eu.eudat.models.data.components.commons.datafield.AutoCompleteData; import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.helpers.common.AutoCompleteLookupItem; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.properties.PropertiesModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.logic.services.ApiContext; import eu.eudat.types.ApiMessageCode; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @RestController @CrossOrigin @RequestMapping(value = {"/api"}) public class DatasetProfileController extends BaseController { @Autowired public DatasetProfileController(ApiContext apiContext) { super(apiContext); } @RequestMapping(method = RequestMethod.GET, value = {"/datasetwizard/get/{id}"}, produces = "application/json") public ResponseEntity> getSingle(@PathVariable String id) { try { eu.eudat.data.entities.DatasetProfile profile = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetProfileDao().find(UUID.fromString(id)); eu.eudat.models.data.user.composite.DatasetProfile datasetprofile = UserManager.generateDatasetProfileModel(profile); PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(pagedDatasetProfile)); } catch (Exception ex) { ex.printStackTrace(); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.DEFAULT_ERROR_MESSAGE).message(ex.getMessage())); } } @Transactional @RequestMapping(method = RequestMethod.POST, value = {"/datasetprofile/save/{id}"}, consumes = "application/json", produces = "application/json") public ResponseEntity updateDataset(@PathVariable String id, @RequestBody PropertiesModel properties) { try { eu.eudat.data.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(id)); Map values = new HashMap(); properties.toMap(values); JSONObject jobject = new JSONObject(values); dataset.setProperties(jobject.toString()); dataset.setStatus((short) properties.getStatus()); this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().createOrUpdate(dataset); //TODO return ResponseEntity.status(HttpStatus.OK).body(properties); } catch (Exception ex) { ex.printStackTrace(); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: " + ex.getMessage()); } } @RequestMapping(method = RequestMethod.POST, value = {"/search/autocomplete"}, consumes = "application/json", produces = "application/json") public ResponseEntity getDataForAutocomplete(@RequestBody RequestItem lookupItem) { try { eu.eudat.data.entities.Dataset dataset = this.getApiContext().getOperationsContext().getDatabaseRepository().getDatasetDao().find(UUID.fromString(lookupItem.getCriteria().getProfileID())); eu.eudat.models.data.entities.xmlmodels.datasetprofiledefinition.Field modelfield = DatasetProfileManager.queryForField(dataset.getProfile().getDefinition(), lookupItem.getCriteria().getFieldID()); AutoCompleteData data = (AutoCompleteData) modelfield.getData(); List> items = DatasetProfileManager.getAutocomplete(data,lookupItem.getCriteria().getLike()); return ResponseEntity.status(HttpStatus.OK).body(items); } catch (Exception ex) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Serialization issue: " + ex.getMessage()); } } }