changes to import workers to make sure authors, supervisors, co-supervisors and reviewers that exist in scipro but not in daisy is being removed.
This commit is contained in:
parent
2ba3fadd95
commit
9bdd50215a
src/main/java/se/su/dsv/scipro
@ -161,6 +161,18 @@ public class Project extends DomainObject implements Comparable<Project>, Iconiz
|
||||
this.projectFollowers.add(projectFollower);
|
||||
}
|
||||
|
||||
public void removeProjectFollower(ProjectFollower projectFollower) {
|
||||
this.projectFollowers.remove(projectFollower);
|
||||
}
|
||||
|
||||
public void removeAuthor(Student student){
|
||||
this.projectParticipants.remove(student);
|
||||
}
|
||||
|
||||
public void removeSupervisor(){
|
||||
this.headSupervisor = null;
|
||||
}
|
||||
|
||||
public Set<ProjectFollower> getProjectReviewers(){
|
||||
Iterator<ProjectFollower> iter = projectFollowers.iterator();
|
||||
Set<ProjectFollower> set = new TreeSet<ProjectFollower>();
|
||||
|
@ -4,7 +4,7 @@ package se.su.dsv.scipro.io.dto;
|
||||
public class PersonDTO {
|
||||
|
||||
public long id;
|
||||
public String firstName, lastName, email;
|
||||
public String firstName, lastName;
|
||||
|
||||
public String getFirstName() {
|
||||
return firstName;
|
||||
@ -18,10 +18,39 @@ public class PersonDTO {
|
||||
public void setLastName(String lastName) {
|
||||
this.lastName = lastName;
|
||||
}
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + (int) (id ^ (id >>> 32));
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
PersonDTO other = (PersonDTO) obj;
|
||||
if (id != other.id)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public String toString(){
|
||||
return getFirstName() + " " + getLastName();
|
||||
return "id: "+ getId()+" name: "+getFirstName() + " " + getLastName();
|
||||
}
|
||||
public PersonDTO() {
|
||||
|
||||
}
|
||||
|
||||
public PersonDTO(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
}
|
||||
|
@ -39,11 +39,53 @@ public class ProjectParticipantDTO {
|
||||
}};
|
||||
@Override
|
||||
public String toString(){
|
||||
return id+","+role+","+level+","+person;
|
||||
return role+","+level+","+person;
|
||||
}
|
||||
public long id;
|
||||
//public long id;
|
||||
public String role;
|
||||
@SerializedName("type")
|
||||
public String level;
|
||||
public PersonDTO person;
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
final int prime = 31;
|
||||
int result = 1;
|
||||
result = prime * result + ((person == null) ? 0 : person.hashCode());
|
||||
result = prime * result + ((role == null) ? 0 : role.hashCode());
|
||||
return result;
|
||||
}
|
||||
@Override
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj)
|
||||
return true;
|
||||
if (obj == null)
|
||||
return false;
|
||||
if (getClass() != obj.getClass())
|
||||
return false;
|
||||
ProjectParticipantDTO other = (ProjectParticipantDTO) obj;
|
||||
if (person == null) {
|
||||
if (other.person != null)
|
||||
return false;
|
||||
} else if (!person.equals(other.person))
|
||||
return false;
|
||||
if (role == null) {
|
||||
if (other.role != null)
|
||||
return false;
|
||||
} else if (!role.equals(other.role))
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
public String getRole() {
|
||||
return role;
|
||||
}
|
||||
public void setRole(String role) {
|
||||
this.role = role;
|
||||
}
|
||||
public PersonDTO getPerson() {
|
||||
return person;
|
||||
}
|
||||
public void setPerson(PersonDTO person) {
|
||||
this.person = person;
|
||||
}
|
||||
}
|
||||
|
@ -38,12 +38,12 @@ import se.su.dsv.scipro.data.dataobjects.interfaces.FinalSeminarParticipation;
|
||||
import se.su.dsv.scipro.data.enums.ProjectStatus;
|
||||
import se.su.dsv.scipro.data.enums.ProjectTeamMemberRoles;
|
||||
import se.su.dsv.scipro.io.ExternalImporter;
|
||||
import se.su.dsv.scipro.io.dto.PersonDTO;
|
||||
import se.su.dsv.scipro.io.dto.ProjectDTO;
|
||||
import se.su.dsv.scipro.io.dto.ProjectParticipantDTO;
|
||||
import se.su.dsv.scipro.io.dto.ProjectParticipantDTO.EXTERNAL_PROJECT_ROLE;
|
||||
import se.su.dsv.scipro.io.dto.ProjectParticipantDTO.LOCAL_PROJECT_ROLE;
|
||||
import se.su.dsv.scipro.io.dto.ResearchAreaDTO;
|
||||
import se.su.dsv.scipro.io.dto.PersonDTO;
|
||||
import se.su.dsv.scipro.io.dto.UnitDTO;
|
||||
import se.su.dsv.scipro.io.dto.UserDTO;
|
||||
import se.su.dsv.scipro.io.dto.UserRoleDTO;
|
||||
@ -205,11 +205,93 @@ public class ImporterFacade {
|
||||
project = projectDao.save(project);
|
||||
//Loop over all participants and assign roles
|
||||
if(mergeLinkedEntities){
|
||||
checkForRemovedMembers(project, projectDTO.participants);
|
||||
for(ProjectParticipantDTO projectParticipant:projectDTO.participants){
|
||||
projectParticipantFromDTO(project,projectParticipant);
|
||||
}
|
||||
}
|
||||
}
|
||||
private void checkForRemovedMembers(final Project project, final Set<ProjectParticipantDTO> participants) {
|
||||
final List<Member> currentMembers = project.getMembers();
|
||||
final Set<ProjectParticipantDTO> remoteMembers = new HashSet<ProjectParticipantDTO>(participants);
|
||||
final Set<Member> membersToRemove = new HashSet<Member>();
|
||||
//Check to see if some members of the projects have been removed from Daisy. If so, we need to remove from Scipro as well.
|
||||
for(Member m : currentMembers) {
|
||||
logger.debug("Translating member "+m+" to DTO to compare with remote participants.");
|
||||
ProjectParticipantDTO translated = participantDtoFromMember(m);
|
||||
if(remoteMembers.contains(translated)){
|
||||
logger.debug(m+" exists on remote system, skipping.");
|
||||
remoteMembers.remove(translated);
|
||||
} else {
|
||||
logger.info(m+" does not exist on remote system, removing from Scipro.");
|
||||
membersToRemove.add(m);
|
||||
}
|
||||
}
|
||||
//Removing member from Scipro.
|
||||
for(Member m : membersToRemove){
|
||||
switch(m.getType()){
|
||||
case AUTHOR: {
|
||||
Student student = roleDao.findStudentRole(m.getUser());
|
||||
project.removeAuthor(student);
|
||||
break;
|
||||
}
|
||||
case SUPERVISOR: {
|
||||
project.removeSupervisor();
|
||||
break;
|
||||
}
|
||||
case CO_SUPERVISOR: {
|
||||
Employee emp = supervisorDao.getFrom(m.getUser());
|
||||
ProjectFollower pf = new ProjectFollower();
|
||||
pf.setProjectRole(ProjectTeamMemberRoles.CO_SUPERVISOR);
|
||||
pf.setFollower(emp);
|
||||
if(project.getProjectCoSupervisors().contains(pf))
|
||||
project.removeProjectFollower(pf);
|
||||
else
|
||||
logger.debug("Can't find project follower to remove.");
|
||||
break;
|
||||
}
|
||||
case REVIEWER: {
|
||||
Employee emp = supervisorDao.getFrom(m.getUser());
|
||||
ProjectFollower pf = new ProjectFollower();
|
||||
pf.setProjectRole(ProjectTeamMemberRoles.REVIEWER);
|
||||
pf.setFollower(emp);
|
||||
if(project.getProjectReviewers().contains(pf))
|
||||
project.removeProjectFollower(pf);
|
||||
else
|
||||
logger.debug("Can't find project follower to remove.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
private ProjectParticipantDTO participantDtoFromMember(Member m) {
|
||||
ProjectParticipantDTO dto = new ProjectParticipantDTO();
|
||||
PersonDTO person = new PersonDTO(m.getUser().getIdentifier());
|
||||
dto.setPerson(person);
|
||||
switch(m.getType()){
|
||||
case AUTHOR:
|
||||
{
|
||||
dto.setRole(EXTERNAL_PROJECT_ROLE.PARTICIPANT.toLocal().name());
|
||||
break;
|
||||
}
|
||||
case SUPERVISOR:
|
||||
{
|
||||
dto.setRole(EXTERNAL_PROJECT_ROLE.SUPERVISOR.toLocal().name());
|
||||
break;
|
||||
}
|
||||
case REVIEWER:
|
||||
{
|
||||
dto.setRole(EXTERNAL_PROJECT_ROLE.EXAMINER.toLocal().name());
|
||||
break;
|
||||
}
|
||||
case CO_SUPERVISOR:
|
||||
{
|
||||
dto.setRole(EXTERNAL_PROJECT_ROLE.ASSISTANT_SUPERVISOR.toLocal().name());
|
||||
break;
|
||||
}
|
||||
}
|
||||
return dto;
|
||||
}
|
||||
private void projectParticipantFromDTO(final Project project, final ProjectParticipantDTO projectParticipant) {
|
||||
//Use existing members to avoid duplicated roles being assigned
|
||||
final List<Member> currentProjectMembers = project.getMembers();
|
||||
@ -373,6 +455,7 @@ public class ImporterFacade {
|
||||
dto.setRealm(name.getRealm().toUpperCase().trim());
|
||||
return dto;
|
||||
}
|
||||
|
||||
private ProjectClass toLocalClass(final ProjectDTO projectDTO){
|
||||
ProjectClass pClass = null;
|
||||
final String extractedType = extractProjectType(projectDTO);
|
||||
|
Loading…
x
Reference in New Issue
Block a user