2017-10-12 14:04:38 +02:00
package rest.entities ;
2017-10-06 19:20:05 +02:00
2017-11-07 13:20:13 +01:00
import java.util.Date ;
2017-10-27 12:52:12 +02:00
import java.util.HashMap ;
2017-10-23 18:06:24 +02:00
import java.util.HashSet ;
2017-10-06 19:20:05 +02:00
import java.util.List ;
2017-10-27 12:52:12 +02:00
import java.util.Map ;
2017-10-23 18:06:24 +02:00
import java.util.Set ;
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 ;
2017-10-23 18:06:24 +02:00
import org.springframework.security.core.context.SecurityContextHolder ;
2017-10-06 19:20:05 +02:00
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 ;
2017-10-20 17:11:40 +02:00
import com.fasterxml.jackson.annotation.JsonInclude.Include ;
2017-10-06 19:20:05 +02:00
import com.fasterxml.jackson.core.JsonProcessingException ;
2017-10-20 17:11:40 +02:00
import com.fasterxml.jackson.databind.DeserializationFeature ;
2017-10-06 19:20:05 +02:00
import com.fasterxml.jackson.databind.ObjectMapper ;
2017-10-20 17:11:40 +02:00
import com.fasterxml.jackson.datatype.hibernate5.Hibernate5Module ;
2017-10-06 19:20:05 +02:00
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 ;
2017-10-23 18:06:24 +02:00
import dao.entities.UserInfoDao ;
2017-10-06 19:20:05 +02:00
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-23 18:06:24 +02:00
import entities.UserInfo ;
2017-10-06 19:20:05 +02:00
import entities.responses.IDLabelPair ;
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 Projects {
@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-23 18:06:24 +02:00
@Autowired private UserInfoDao userInfoDao ;
2017-10-06 19:20:05 +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/projects " } , produces = " application/json " )
2017-11-22 10:50:47 +01:00
public @ResponseBody ResponseEntity < Object > listExternalProjects ( @RequestParam ( value = " query " , required = false ) String query ) {
try {
List < Map < String , String > > remoteRepos = remoteFetcher . getProjects ( 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-06 19:20:05 +02:00
// MANAGE PROJECT(S)
2017-10-24 18:33:51 +02:00
@RequestMapping ( method = RequestMethod . GET , value = { " /projects " } , produces = " application/json " )
2017-10-06 19:20:05 +02:00
public @ResponseBody ResponseEntity < Object > listProjects ( ) {
try {
List < UUID > allIDs = projectDao . 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-24 18:33:51 +02:00
@RequestMapping ( method = RequestMethod . GET , value = { " /projects/{id} " } , produces = " application/json " )
2017-10-06 19:20:05 +02:00
public @ResponseBody ResponseEntity < Object > getProject ( @PathVariable ( " id " ) String id ) {
try {
Project project = projectDao . read ( UUID . fromString ( id ) ) ;
2017-10-20 17:11:40 +02:00
System . out . println ( project . getId ( ) . toString ( ) ) ;
2017-10-27 12:52:12 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( project ) ) ;
2017-10-06 19:20:05 +02:00
}
catch ( Exception ex ) {
return ResponseEntity . status ( HttpStatus . BAD_REQUEST ) . body ( " Erroneous input: " + ex . getMessage ( ) ) ;
}
}
2017-10-24 18:33:51 +02:00
@RequestMapping ( method = RequestMethod . GET , value = { " /project/listAllLabelIDs " } , produces = " application/json " )
2017-10-06 19:20:05 +02:00
public @ResponseBody ResponseEntity < Object > listLabelIds ( ) {
try {
List < IDLabelPair > allIDs = projectDao . listAllIDsLabels ( ) ;
2017-10-24 18:33:51 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( 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 = { " /project/getAll " } , produces = " application/json " )
public @ResponseBody ResponseEntity < Object > getAllProjects ( ) {
2017-10-06 19:20:05 +02:00
try {
2017-10-12 14:02:41 +02:00
List < Project > allProjects = projectDao . getAll ( ) ;
2017-10-27 12:52:12 +02:00
return new ResponseEntity < Object > ( SerializerProvider . toJson ( allProjects ) , HttpStatus . OK ) ;
2017-10-12 14:02:41 +02:00
}
catch ( Exception ex ) {
return new ResponseEntity < > ( null , HttpStatus . INTERNAL_SERVER_ERROR ) ;
2017-10-06 19:20:05 +02:00
}
2017-10-12 14:02:41 +02:00
}
2017-10-18 15:12:25 +02:00
2017-10-12 14:02:41 +02:00
@Transactional
@RequestMapping ( method = RequestMethod . POST , value = { " /project/create " } , consumes = " application/json " , produces = " application/json " )
2017-11-07 13:20:13 +01:00
public @ResponseBody ResponseEntity < Object > createProject ( @RequestBody Project project ) {
Project createdProject = projectDao . update ( project ) ;
2017-11-20 18:01:19 +01:00
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( SerializerProvider . toJson ( createdProject ) ) ;
2017-11-07 13:20:13 +01:00
}
@RequestMapping ( method = RequestMethod . POST , value = { " /project/update " } , consumes = " application/json " , produces = " application/json " )
public @ResponseBody ResponseEntity < Object > updateProject ( @RequestBody Project project ) {
2017-11-20 18:01:19 +01:00
Project updatedProject = projectDao . update ( project ) ;
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( SerializerProvider . toJson ( updatedProject ) ) ;
2017-10-12 14:02:41 +02:00
}
2017-10-24 18:33:51 +02:00
@RequestMapping ( method = RequestMethod . POST , value = { " /project/delete " } , consumes = " application/json " , produces = " application/json " )
2017-10-12 14:02:41 +02:00
public @ResponseBody ResponseEntity < Object > delete ( @RequestBody Project project ) {
Project p = new Project ( ) ;
p . setId ( project . getId ( ) ) ;
try {
projectDao . delete ( p ) ;
2017-12-09 23:31:07 +01:00
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( " { \" msg \" : \" Deleted Researcher entity! \" } " ) ;
2017-10-12 14:02:41 +02:00
} catch ( Exception e ) {
2017-10-20 12:03:55 +02:00
e . printStackTrace ( ) ;
2017-12-09 23:31:07 +01:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " { \" msg \" : \" Could not Delete Researcher! \" } " ) ;
2017-10-06 19:20:05 +02:00
}
2017-10-12 14:02:41 +02:00
2017-10-06 19:20:05 +02:00
}
2017-10-23 18:06:24 +02:00
2017-11-07 13:20:13 +01:00
@RequestMapping ( method = RequestMethod . POST , value = { " /project/softdelete " } , consumes = " application/json " , produces = " application/json " )
public @ResponseBody ResponseEntity < Object > softDelete ( @RequestBody Project project ) {
project . setStatus ( new Short ( " -1 " ) ) ;
try {
projectDao . update ( project ) ;
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( " { \" msg \" : \" Deleted project! \" } " ) ;
} catch ( Exception e ) {
e . printStackTrace ( ) ;
2017-12-09 23:31:07 +01:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " { \" msg \" : \" Could not delete Researcher! \" } " ) ;
2017-11-07 13:20:13 +01:00
}
}
2017-10-23 18:06:24 +02:00
@Transactional
@RequestMapping ( method = RequestMethod . POST , value = { " /project/getdmps " } , consumes = " application/json " , produces = " application/json " )
public @ResponseBody ResponseEntity < Object > getProjectDmps ( @RequestBody Project project ) {
try {
Set < DMP > dmps = projectDao . read ( project . getId ( ) ) . getDmps ( ) ;
2017-10-27 12:52:12 +02:00
return ResponseEntity . status ( HttpStatus . CREATED ) . body ( SerializerProvider . toJson ( dmps ) ) ;
} catch ( Exception e ) {
2017-12-09 23:31:07 +01:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " { \" msg \" : \" Could not create Researcher! \" } " ) ;
2017-10-23 18:06:24 +02:00
}
}
////////////////////////////////
//// USER - RELATED ACTIONS ////
////////////////////////////////
@RequestMapping ( method = RequestMethod . GET , value = { " /project/getofuser " } , produces = " text/plain " )
public @ResponseBody ResponseEntity < Object > getProjectsOfUser ( ) {
String userID = null ;
try {
userID = SecurityContextHolder . getContext ( ) . getAuthentication ( ) . getPrincipal ( ) . toString ( ) ;
} catch ( NullPointerException ex ) {
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " You have not logged in. You shouldn't be here " ) ;
}
UserInfo userInfo = userInfoDao . read ( UUID . fromString ( userID ) ) ;
2017-10-27 12:52:12 +02:00
if ( userInfo = = null ) //this should normally never happen
2017-10-23 18:06:24 +02:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " There's no such a user on the system. You shouldn't be here " ) ;
2017-10-27 12:52:12 +02:00
2017-11-17 01:43:16 +01:00
try {
List < Project > userProjects = projectDao . getProjectsOfUser ( userID ) ;
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( userProjects ) ) ;
}
catch ( Exception ex ) {
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " Serialization issue: " + ex . getMessage ( ) ) ;
}
/ *
* OLD ONE
2017-12-09 23:31:07 +01:00
Map < UUID , Researcher > userProjects = new HashMap < UUID , Researcher > ( ) ;
2017-10-27 12:52:12 +02:00
userInfo . getDmps ( ) . forEach ( dmp - > {
2017-12-09 23:31:07 +01:00
Researcher proj = dmp . getProject ( ) ;
2017-10-27 12:52:12 +02:00
userProjects . put ( proj . getId ( ) , proj ) ;
} ) ;
2017-10-23 18:06:24 +02:00
try {
2017-10-27 12:52:12 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( userProjects . values ( ) ) ) ;
2017-10-23 18:06:24 +02:00
}
catch ( Exception ex ) {
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " Serialization issue: " + ex . getMessage ( ) ) ;
}
2017-11-17 01:43:16 +01:00
* /
2017-10-23 18:06:24 +02:00
}
@Transactional
2017-11-02 15:25:05 +01:00
@RequestMapping ( method = RequestMethod . POST , value = { " /project/createofuser " } , produces = " text/plain " , consumes = " application/json " )
2017-10-23 18:06:24 +02:00
public @ResponseBody ResponseEntity < Object > createProjectOfUser ( @RequestBody Project project ) {
2017-10-06 19:20:05 +02:00
2017-10-23 18:06:24 +02:00
String userID = null ;
try {
userID = SecurityContextHolder . getContext ( ) . getAuthentication ( ) . getPrincipal ( ) . toString ( ) ;
} catch ( NullPointerException ex ) {
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " You have not logged in. You shouldn't be here " ) ;
}
UserInfo userInfo = userInfoDao . read ( UUID . fromString ( userID ) ) ;
if ( userInfo = = null ) //this should normally never happer
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " There's no such a user on the system. You shouldn't be here " ) ;
try {
project . setId ( null ) ;
2017-11-07 13:20:13 +01:00
project . setStatus ( new Short ( " 0 " ) ) ;
2017-11-17 01:43:16 +01:00
project . setCreationUser ( userInfo ) ;
2017-11-07 13:20:13 +01:00
project . setCreated ( new Date ( ) ) ;
project . setModified ( new Date ( ) ) ;
2017-10-23 18:06:24 +02:00
Project newproj = projectDao . create ( project ) ;
2017-11-16 18:24:05 +01:00
// DMP newdmp = new DMP();
// newdmp.setId(null);
// newdmp.setLabel("Auto-Generated");
// newdmp.setCreated(new Date());
// newdmp.setVersion(1);
// newdmp.setStatus(new Short("0"));
// newdmp.setProject(newproj);
//
// Set<UserInfo> users = new HashSet<UserInfo>();
// users.add(userInfo);
// newdmp.setUsers(users);
//
// newdmp = dMPDao.create(newdmp);
2017-10-23 18:06:24 +02:00
2017-10-27 12:56:24 +02:00
return ResponseEntity . status ( HttpStatus . OK ) . body ( SerializerProvider . toJson ( newproj ) ) ;
2017-10-23 18:06:24 +02:00
}
catch ( Exception ex ) {
2017-11-07 13:20:13 +01:00
ex . printStackTrace ( ) ;
2017-10-23 18:06:24 +02:00
return ResponseEntity . status ( HttpStatus . INTERNAL_SERVER_ERROR ) . body ( " Serialization issue: " + ex . getMessage ( ) ) ;
}
}
2017-10-27 12:52:12 +02:00
// @Transactional
// @RequestMapping(method = RequestMethod.POST, value = { "/project/updateofuser" }, produces="text/plain")
2017-12-09 23:31:07 +01:00
// public @ResponseBody ResponseEntity<Object> updateProjectOfUser(@RequestBody Researcher project){
2017-10-27 12:52:12 +02:00
//
// if(project.getId()==null)
// return ResponseEntity.status(HttpStatus.NOT_MODIFIED).body("Cannot update, id was null");
// return setProject(project);
//
// }
2017-10-23 18:06:24 +02:00
2017-10-06 19:20:05 +02:00
}