private DocumentBasedRoles(ObservableElementList< ObservableAssignment, DocumentBasedAssignment.AssignmentInitializer> assignments) { this.assignments = assignments; this.assignmentListener = new ObservableAssignment.Listener() { @Override public void onChanged() { fireOnChanged(); } }; for (ObservableAssignment a : assignments.getValues()) { a.addListener(assignmentListener); } this.assignmentListListener = new ObservableElementList.Listener<ObservableAssignment>() { @Override public void onValueAdded(ObservableAssignment entry) { entry.addListener(assignmentListener); fireOnChanged(); } @Override public void onValueRemoved(ObservableAssignment entry) { entry.removeListener(assignmentListener); fireOnChanged(); } }; assignments.addListener(assignmentListListener); }
@Override public void assign(ParticipantId participant, Role role) { Role roleToSet = role.equals(Policies.DEFAULT_ROLE) ? null : role; ObservableAssignment assignment = null; for (ObservableAssignment candidate : assignments.getValues()) { if (candidate.getParticipant().equals(participant)) { assignment = candidate; } } if (assignment != null) { assignment.setRole(roleToSet); } else if (roleToSet != null) { assignments.add(new DocumentBasedAssignment.AssignmentInitializer( new BasicAssignment(participant, roleToSet))); } }