2017-10-12 14:04:38 +02:00
package rest.entities ;
2017-10-06 19:20:05 +02:00
import java.util.List ;
2017-11-22 10:50:47 +01:00
import java.util.Map ;
2017-10-06 19:20:05 +02:00
import java.util.UUID ;
2017-10-12 14:02:41 +02:00
import java.util.stream.Collectors ;
import javax.transaction.Transactional ;
2017-10-06 19:20:05 +02:00
import org.apache.commons.lang3.SerializationUtils ;
import org.springframework.beans.factory.annotation.Autowired ;
import org.springframework.http.HttpStatus ;
import org.springframework.http.MediaType ;
import org.springframework.http.ResponseEntity ;
import org.springframework.util.MultiValueMap ;
import org.springframework.web.bind.annotation.CrossOrigin ;
import org.springframework.web.bind.annotation.PathVariable ;
import org.springframework.web.bind.annotation.RequestBody ;
import org.springframework.web.bind.annotation.RequestMapping ;
import org.springframework.web.bind.annotation.RequestMethod ;
import org.springframework.web.bind.annotation.RequestParam ;
import org.springframework.web.bind.annotation.ResponseBody ;
import org.springframework.web.bind.annotation.RestController ;
import com.fasterxml.jackson.core.JsonProcessingException ;
import com.fasterxml.jackson.databind.ObjectMapper ;
import dao.entities.DMPDao ;
import dao.entities.DMPProfileDao ;
import dao.entities.DataRepositoryDao ;
import dao.entities.DatasetDao ;
import dao.entities.DatasetProfileDao ;
import dao.entities.DatasetProfileRulesetDao ;
import dao.entities.DatasetProfileViewstyleDao ;
import dao.entities.OrganisationDao ;
import dao.entities.ProjectDao ;
import dao.entities.RegistryDao ;
import dao.entities.ResearcherDao ;
import dao.entities.ServiceDao ;
import entities.DMP ;
import entities.DMPProfile ;
import entities.DataRepository ;
import entities.Dataset ;
import entities.DatasetProfile ;
import entities.DatasetProfileRuleset ;
import entities.Organisation ;
import entities.Project ;
import entities.Registry ;
import entities.Researcher ;
import entities.Service ;
2017-10-20 17:11:40 +02:00
import helpers.SerializerProvider ;
2017-10-06 19:20:05 +02:00
import helpers.Transformers ;
2017-11-22 10:50:47 +01:00
import proxy.config.exceptions.HugeResultSet ;
import proxy.config.exceptions.NoURLFound ;
import proxy.fetching.RemoteFetcher ;
2017-10-06 19:20:05 +02:00
import responses.RestResponse ;
@RestController
@CrossOrigin
public class Organisations {
@Autowired private DataRepositoryDao dataRepositoryDao ;
@Autowired private DatasetDao datasetDao ;
@Autowired private DatasetProfileDao datasetProfileDao ;
@Autowired private DatasetProfileRulesetDao datasetProfileRulesetDao ;
@Autowired private DatasetProfileViewstyleDao datasetProfileViewstyleDao ;
@Autowired private DMPDao dMPDao ;
@Autowired private DMPProfileDao dMPProfileDao ;
@Autowired private OrganisationDao organisationDao ;
@Autowired private ProjectDao projectDao ;
@Autowired private RegistryDao registryDao ;
@Autowired private ResearcherDao researcherDao ;
@Autowired private ServiceDao serviceDao ;
2017-10-12 14:02:41 +02:00
2017-11-22 10:50:47 +01:00
@Autowired private RemoteFetcher remoteFetcher ;
2017-11-22 11:14:10 +01:00
@RequestMapping ( method = RequestMethod . GET , value = { " /external/organisations " } , produces = " application/json " )
2017-11-22 10:50:47 +01:00
public @ResponseBody ResponseEntity < Object > listExternalOrganisations ( @RequestParam ( value = " query " , required = false ) String query ) {
try {
List < Map < String , String > > remoteRepos = remoteFetcher . getOrganisations ( query ) ;
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( remoteRepos ) ) ;
}
catch ( NoURLFound ex ) {
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " { \" reason \" : \" " + ex . getMessage ( ) + " \" } " ) ;
}
catch ( HugeResultSet ex ) {
return ResponseEntity . status ( HttpStatus . UNPROCESSABLE_ENTITY ) . body ( " { \" reason \" : \" " + ex . getMessage ( ) + " \" } " ) ; //the ex.getMessage has the appropriate text description
}
}
2017-10-12 14:02:41 +02:00
2017-10-06 19:20:05 +02:00
// MANAGE ORGANISATIONS(S)
2017-10-12 14:02:41 +02:00
@RequestMapping ( method = RequestMethod . GET , value = { " /organisations " } )
2017-10-06 19:20:05 +02:00
public @ResponseBody ResponseEntity < Object > listOrganisations ( ) {
try {
List < UUID > allIDs = organisationDao . listAllIDs ( ) ;
2017-10-27 12:52:12 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( allIDs ) ) ;
2017-10-06 19:20:05 +02:00
}
catch ( Exception ex ) {
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " Serialization issue: " + ex . getMessage ( ) ) ;
}
}
2017-10-12 14:02:41 +02:00
@RequestMapping ( method = RequestMethod . GET , value = { " /organisations/{id} " } )
2017-10-06 19:20:05 +02:00
public @ResponseBody ResponseEntity < Object > getOrganisations ( @PathVariable ( " id " ) String id ) {
try {
Organisation organisation = organisationDao . read ( UUID . fromString ( id ) ) ;
2017-10-27 12:52:12 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( organisation ) ) ;
2017-10-06 19:20:05 +02:00
}
catch ( Exception ex ) {
return ResponseEntity . status ( HttpStatus . BAD_REQUEST ) . body ( " Erroneous input: " + ex . getMessage ( ) ) ;
}
}
2017-10-12 14:02:41 +02:00
@RequestMapping ( method = RequestMethod . GET , value = { " /organisation/getAll " } , produces = " application/json " )
public @ResponseBody ResponseEntity < Object > getAllOrganisations ( ) {
2017-10-06 19:20:05 +02:00
try {
2017-10-12 14:02:41 +02:00
List < Organisation > allOrganisations = organisationDao . getAll ( ) ;
2017-10-27 12:52:12 +02:00
return new ResponseEntity < Object > ( SerializerProvider . toJson ( allOrganisations ) , HttpStatus . OK ) ;
2017-10-06 19:20:05 +02:00
}
2017-10-12 14:02:41 +02:00
catch ( Exception ex ) {
return new ResponseEntity < > ( null , HttpStatus . INTERNAL_SERVER_ERROR ) ;
}
}
@Transactional
@RequestMapping ( method = RequestMethod . POST , value = { " /organisation/create " } , consumes = " application/json " , produces = " application/json " )
public @ResponseBody ResponseEntity < Object > setOrganisation ( @RequestBody Organisation organisation ) {
try {
2017-10-27 12:52:12 +02:00
Organisation createdOrganisation = organisationDao . update ( organisation ) ;
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( SerializerProvider . toJson ( createdOrganisation ) ) ;
} catch ( Exception e ) {
2017-10-17 13:45:11 +02:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " { \" msg \" : \" Could not create organisation! \" } " ) ;
2017-10-12 14:02:41 +02:00
}
}
@RequestMapping ( method = RequestMethod . POST , value = { " /organisation/delete " } , consumes = " application/json " , produces = " text/plain " )
public @ResponseBody ResponseEntity < Object > delete ( @RequestBody Organisation organisation ) {
Organisation org = new Organisation ( ) ;
org . setId ( organisation . getId ( ) ) ;
try {
organisationDao . delete ( org ) ;
2017-10-17 13:45:11 +02:00
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( " { \" msg \" : \" Deleted organisation! \" } " ) ;
2017-10-12 14:02:41 +02:00
} catch ( Exception e ) {
2017-10-17 13:45:11 +02:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " { \" msg \" : \" Could not delete organisation! \" } " ) ;
2017-10-06 19:20:05 +02:00
}
2017-10-12 14:02:41 +02:00
2017-10-06 19:20:05 +02:00
}
}