Skip to content
Snippets Groups Projects
Commit b4056e53 authored by srosse's avatar srosse
Browse files

OO-3426: cascading delete of template assignments at binder level

parent 7a444dfe
No related branches found
No related tags found
No related merge requests found
......@@ -308,8 +308,21 @@ public class AssignmentDAO {
return query.getResultList();
}
public List<Assignment> loadAssignmentReferences(Assignment assignment) {
StringBuilder sb = new StringBuilder(512);
sb.append("select assignment from pfassignment as assignment")
.append(" left join fetch assignment.section as section")
.append(" left join fetch assignment.page as page")
.append(" left join fetch assignment.formEntry as formEntry")
.append(" where assignment.templateReference.key=:assignmentKey");
return dbInstance.getCurrentEntityManager()
.createQuery(sb.toString(), Assignment.class)
.setParameter("assignmentKey", assignment.getKey())
.getResultList();
}
public List<Assignment> loadAssignments(Page page, String searchString) {
StringBuilder sb = new StringBuilder();
StringBuilder sb = new StringBuilder(512);
sb.append("select assignment from pfassignment as assignment")
.append(" inner join fetch assignment.section as section")
.append(" inner join fetch assignment.page as page")
......
......@@ -424,18 +424,43 @@ public class PortfolioServiceImpl implements PortfolioService {
Assignment reloadedAssignment = assignmentDao.loadAssignmentByKey(assignment.getKey());
Section reloadedSection = reloadedAssignment.getSection();
Binder reloadedBinder = reloadedAssignment.getBinder();
boolean removedSection = false;
boolean removedBinder = false;
if(reloadedSection != null) {
removedSection = ((SectionImpl)reloadedSection).getAssignments().remove(reloadedAssignment);
((SectionImpl)reloadedSection).getAssignments().remove(reloadedAssignment);
assignmentDao.deleteAssignment(reloadedAssignment);
binderDao.updateSection(reloadedSection);
} else if(reloadedBinder != null) {
removedBinder = ((BinderImpl)reloadedBinder).getAssignments().remove(reloadedAssignment);
Set<Binder> bindersToUpdate = new HashSet<>();
List<Assignment> synchedBindersAssignments = assignmentDao.loadAssignmentReferences(reloadedAssignment);
for(Assignment synchedAssignment:synchedBindersAssignments) {
List<Assignment> instantiatedAssignments = assignmentDao.loadAssignmentReferences(synchedAssignment);
Set<Section> sectionsToUpdate = new HashSet<>();
for(Assignment instantiatedAssignment:instantiatedAssignments) {
if(instantiatedAssignment.getSection() != null) {
Section assignmentSection = instantiatedAssignment.getSection();
if(((SectionImpl)assignmentSection).getAssignments().remove(instantiatedAssignment)) {
sectionsToUpdate.add(assignmentSection);
}
assignmentDao.deleteAssignment(instantiatedAssignment);
}
}
for(Section section:sectionsToUpdate) {
binderDao.updateSection(section);
}
if(synchedAssignment.getBinder() != null) {
Binder synchedBinder = synchedAssignment.getBinder();
if(((BinderImpl)synchedBinder).getAssignments().remove(reloadedAssignment)) {
bindersToUpdate.add(synchedBinder);
}
assignmentDao.deleteAssignment(synchedAssignment);
}
}
}
assignmentDao.deleteAssignment(reloadedAssignment);
if(removedSection) {
binderDao.updateSection(reloadedSection);
} else if(removedBinder) {
for(Binder binder:bindersToUpdate) {
binderDao.updateBinder(binder);
}
assignmentDao.deleteAssignment(reloadedAssignment);
binderDao.updateBinder(reloadedBinder);
}
return true;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment