Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Dec 5, 2016
2 parents acccd08 + a06e329 commit bb3ac5a
Show file tree
Hide file tree
Showing 17 changed files with 310 additions and 74 deletions.
Expand Up @@ -98,8 +98,13 @@ public class AssignmentEditorDto extends SelectableBean implements Comparable<As
private AssignmentType newAssignment;
private List<ACAttributeDto> attributes;
private PageBase pageBase;
private UserType delegationOwner;

public AssignmentEditorDto(UserDtoStatus status, AssignmentType assignment, PageBase pageBase) {
this(status, assignment, pageBase, null);
}

public AssignmentEditorDto(UserDtoStatus status, AssignmentType assignment, PageBase pageBase, UserType delegationOwner) {
Validate.notNull(status, "User dto status must not be null.");
Validate.notNull(assignment, "Assignment must not be null.");

Expand All @@ -108,6 +113,7 @@ public AssignmentEditorDto(UserDtoStatus status, AssignmentType assignment, Page
this.status = status;
this.oldAssignment = assignment;
this.pageBase = pageBase;
this.delegationOwner = delegationOwner;

PrismContainerValue value = oldAssignment.asPrismContainerValue();

Expand Down Expand Up @@ -147,7 +153,12 @@ public static AssignmentEditorDto createDtoAddFromSelectedObject(ObjectType obje

public static AssignmentEditorDto createDtoAddFromSelectedObject(ObjectType object,
QName relation, PageBase pageBase) {
return createDtoAddFromSelectedObject(object, relation, pageBase, null);
}
public static AssignmentEditorDto createDtoAddFromSelectedObject(ObjectType object, QName relation,
PageBase pageBase, UserType delegationOwner) {
AssignmentEditorDto dto = createDtoFromObject(object, UserDtoStatus.ADD, relation, pageBase);
dto.setDelegationOwner(delegationOwner);
if (SchemaConstants.ORG_DEPUTY.equals(relation)){
dto.setMinimized(false);
} else {
Expand Down Expand Up @@ -675,10 +686,14 @@ public void setPrivilegeLimitationList(List<AssignmentsPreviewDto> privilegeLimi
this.privilegeLimitationList = privilegeLimitationList;
}

// private List<AssignmentSelectorType> getAssignmentPrivileges(AssignmentType assignment){
//
//
// }
public UserType getDelegationOwner() {
return delegationOwner;
}

public void setDelegationOwner(UserType delegationOwner) {
this.delegationOwner = delegationOwner;
}

@Override
public boolean equals(Object o) {
if (this == o)
Expand Down
Expand Up @@ -132,15 +132,13 @@ public class AssignmentEditorPanel extends BasePanel<AssignmentEditorDto> {
protected WebMarkupContainer headerRow;
protected PageBase pageBase;
protected List<AssignmentsPreviewDto> privilegesList;
protected UserType delegationUser;
protected boolean delegatedToMe;

public AssignmentEditorPanel(String id, IModel<AssignmentEditorDto> model, boolean delegatedToMe,
List<AssignmentsPreviewDto> privilegesList,
UserType delegationUser, PageBase pageBase) {
PageBase pageBase) {
super(id, model);
this.pageBase = pageBase;
this.delegationUser = delegationUser;
this.privilegesList = privilegesList;
this.delegatedToMe = delegatedToMe;

Expand Down
Expand Up @@ -150,12 +150,17 @@ protected void onUpdate(AjaxRequestTarget target) {
checkAll.add(new VisibleEnableBehaviour(){
@Override
public boolean isVisible(){
int count = 0;
for (AssignmentEditorDto dto : getModelObject()){
if (dto.isEditable()){
return true;
if (dto.isSimpleView()){
count++;
}
}
return false;
if (count == getModelObject().size()){
return false;
} else {
return true;
}
}
});
assignments.add(checkAll);
Expand Down Expand Up @@ -303,15 +308,19 @@ protected String getNoAssignmentsSelectedMessage(){
return getString("AssignmentTablePanel.message.noAssignmentSelected");
}

protected String getAssignmentsDeleteMessage(int size){
return createStringResource("AssignmentTablePanel.modal.message.delete",
size).getString();
}

private Popupable getDeleteAssignmentPopupContent() {
return new ConfirmationPanel(getPageBase().getMainPopupBodyId(), new AbstractReadOnlyModel<String>() {

private static final long serialVersionUID = 1L;

@Override
public String getObject() {
return createStringResource("AssignmentTablePanel.modal.message.delete",
getSelectedAssignments().size()).getString();
return getAssignmentsDeleteMessage(getSelectedAssignments().size());
}
}) {

Expand Down
Expand Up @@ -71,9 +71,9 @@ public class DelegationEditorPanel extends AssignmentEditorPanel {
private List<UserType> usersToUpdate;

public DelegationEditorPanel(String id, IModel<AssignmentEditorDto> delegationTargetObjectModel, boolean delegatedToMe,
List<AssignmentsPreviewDto> privilegesList, UserType user, PageBase pageBase) {
super(id, delegationTargetObjectModel, delegatedToMe, privilegesList, user, pageBase);
}
List<AssignmentsPreviewDto> privilegesList, PageBase pageBase) {
super(id, delegationTargetObjectModel, delegatedToMe, privilegesList, pageBase);
}

@Override
protected void initHeaderRow(){
Expand Down Expand Up @@ -164,11 +164,13 @@ protected void initBodyLayout(WebMarkupContainer body) {
DateInput validFrom = new DateInput(ID_DELEGATION_VALID_FROM,
createDateModel(new PropertyModel<XMLGregorianCalendar>(getModel(),
AssignmentEditorDto.F_ACTIVATION + ".validFrom")));
validFrom.setEnabled(getModel().getObject().isEditable());
body.add(validFrom);

DateInput validTo = new DateInput(ID_DELEGATION_VALID_TO,
createDateModel(new PropertyModel<XMLGregorianCalendar>(getModel(),
AssignmentEditorDto.F_ACTIVATION + ".validTo")));
validTo.setEnabled(getModel().getObject().isEditable());
body.add(validTo);

TextArea<String> description = new TextArea<>(ID_DESCRIPTION,
Expand Down Expand Up @@ -237,7 +239,8 @@ private void reloadBodyComponent(AjaxRequestTarget target){

private String getUserDisplayName(){
String displayName = "";
if (delegationUser != null) {
UserType delegationUser = getModelObject().getDelegationOwner();
if (getModelObject().getDelegationOwner() != null) {
if (delegationUser.getFullName() != null && StringUtils.isNotEmpty(delegationUser.getFullName().getOrig())) {
displayName = delegationUser.getFullName().getOrig() + " (" + delegationUser.getName().getOrig() + ")";
} else {
Expand Down
Expand Up @@ -429,7 +429,7 @@ public void previewPerformed(AjaxRequestTarget target) {
}

public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult result, boolean previewOnly) {
processDeputyAssignments();
boolean isAnythingChanged = processDeputyAssignments();

ObjectWrapper<O> objectWrapper = getObjectWrapper();
LOGGER.debug("Saving object {}", objectWrapper);
Expand Down Expand Up @@ -537,8 +537,10 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res
} else {
progressReporter.clearProgressPanel(); // from previous attempts (useful only if we would call finishProcessing at the end, but that's not the case now)
if (!previewOnly) {
result.recordWarning(getString("PageAdminObjectDetails.noChangesSave"));
showResult(result);
if (!isAnythingChanged) {
result.recordWarning(getString("PageAdminObjectDetails.noChangesSave"));
showResult(result);
}
redirectBack();
} else {
warn(getString("PageAdminObjectDetails.noChangesPreview"));
Expand Down Expand Up @@ -571,7 +573,8 @@ public void saveOrPreviewPerformed(AjaxRequestTarget target, OperationResult res
LOGGER.trace("returning from saveOrPreviewPerformed");
}

protected void processDeputyAssignments(){
protected boolean processDeputyAssignments(){
return false;
}

protected boolean checkValidationErrors(AjaxRequestTarget target, Collection<SimpleValidationError> validationErrors) {
Expand Down
Expand Up @@ -90,11 +90,8 @@ public class PageUser extends PageAdminFocus<UserType> {
private static final String ID_TASK_TABLE = "taskTable";
private static final String ID_TASKS = "tasks";
private LoadableModel<List<AssignmentEditorDto>> delegationsModel;
private Map<AssignmentEditorDto, UserType> assignmentUserMap = new HashMap();
private List<AssignmentsPreviewDto> privilegesList = new ArrayList<>();

private HashMap<UserType, AssignmentEditorDto> usersToUpdateMap = new HashMap<>();
private boolean isNewDtoAdded = false;
private static final Trace LOGGER = TraceManager.getTrace(PageUser.class);

public PageUser() {
Expand Down Expand Up @@ -202,7 +199,7 @@ public WebMarkupContainer createPanel(String panelId) {
public void populateItem(ListItem<AssignmentEditorDto> item) {
privilegesList = getItemPrivilegesList(item.getModelObject());
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), false,
privilegesList, assignmentUserMap.get(item.getModelObject()), PageUser.this);
privilegesList, PageUser.this);
item.add(editor);
}

Expand All @@ -223,6 +220,12 @@ protected List<InlineMenuItem> createAssignmentMenu() {

@Override
public void onClick(AjaxRequestTarget target) {
if (getUserPrivilegesList() == null ||
getUserPrivilegesList().size() == 0){
warn(getString("AssignmentTablePanel.modal.message.noDelegationWarning"));
target.add(getPageBase().getFeedbackPanel());
return;
}
List<QName> supportedTypes = new ArrayList<>();
supportedTypes.add(UserType.COMPLEX_TYPE);
ObjectFilter filter = InOidFilter.createInOid(getObjectWrapper().getOid());
Expand Down Expand Up @@ -269,6 +272,12 @@ protected String getNoAssignmentsSelectedMessage(){
return getString("AssignmentTablePanel.message.noDelegationsSelected");
}

@Override
protected String getAssignmentsDeleteMessage(int size){
return createStringResource("AssignmentTablePanel.modal.message.deleteDelegation",
size).getString();
}

@Override
protected void addSelectedAssignablePerformed(AjaxRequestTarget target, List<ObjectType> newAssignments,
String popupId) {
Expand All @@ -288,11 +297,9 @@ protected void addSelectedAssignablePerformed(AjaxRequestTarget target, List<Obj
try {
AssignmentEditorDto dto = AssignmentEditorDto.createDtoAddFromSelectedObject(
PageUser.this.getObjectWrapper().getObject().asObjectable(),
SchemaConstants.ORG_DEPUTY, getPageBase());
SchemaConstants.ORG_DEPUTY, getPageBase(), (UserType) object);
dto.setPrivilegeLimitationList(privilegesList);
delegationsModel.getObject().add(dto);
usersToUpdateMap.put((UserType) object, dto);
assignmentUserMap.put(dto, (UserType) object);
} catch (Exception e) {
error(getString("AssignmentTablePanel.message.couldntAssignObject", object.getName(),
e.getMessage()));
Expand Down Expand Up @@ -327,7 +334,7 @@ public WebMarkupContainer createPanel(String panelId) {
@Override
public void populateItem(ListItem<AssignmentEditorDto> item) {
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), true,
privilegesList, null, PageUser.this);
privilegesList, PageUser.this);
item.add(editor);
}

Expand Down Expand Up @@ -385,9 +392,10 @@ private List<AssignmentEditorDto> loadDelegatedByMeAssignments() {
if (assignment.getTargetRef() != null &&
StringUtils.isNotEmpty(assignment.getTargetRef().getOid()) &&
assignment.getTargetRef().getOid().equals(getObjectWrapper().getOid())) {
AssignmentEditorDto dto = new AssignmentEditorDto(UserDtoStatus.MODIFY, assignment, this);
AssignmentEditorDto dto = new AssignmentEditorDto(UserDtoStatus.MODIFY, assignment, this,
user.asObjectable());
dto.setEditable(false);
list.add(dto);
assignmentUserMap.put(dto, user.asObjectable());
}
}
processedUsersOid.add(user.getOid());
Expand Down Expand Up @@ -421,27 +429,18 @@ private List<AssignmentsPreviewDto> getUserPrivilegesList(){
}

@Override
protected void processDeputyAssignments(){
for (UserType user : usersToUpdateMap.keySet()){
List<AssignmentType> userAssignments = user.getAssignment();
List<AssignmentEditorDto> userAssignmentsDtos = new ArrayList<>();
// for (AssignmentType assignment : userAssignments) {
// userAssignmentsDtos.add(new AssignmentEditorDto(UserDtoStatus.MODIFY, assignment, this));
// }
userAssignmentsDtos.add(usersToUpdateMap.get(user));
saveDelegationToUser(user, userAssignmentsDtos);
}
Set<AssignmentEditorDto> assignmentEditorDtos = assignmentUserMap.keySet();
List<UserType> list = new ArrayList<UserType>(assignmentUserMap.values());
int index = 0;
for (AssignmentEditorDto dto : assignmentEditorDtos){
if (UserDtoStatus.DELETE.equals(dto.getStatus())){
List<AssignmentEditorDto> assignmentsToDelete = new ArrayList<>();
assignmentsToDelete.add(dto);
saveDelegationToUser(list.get(index), assignmentsToDelete);
protected boolean processDeputyAssignments(){
boolean isAnythingChanged = false;
for (AssignmentEditorDto dto : delegationsModel.getObject()){
if (!UserDtoStatus.MODIFY.equals(dto.getStatus())) {
UserType user = dto.getDelegationOwner();
List<AssignmentEditorDto> userAssignmentsDtos = new ArrayList<>();
userAssignmentsDtos.add(dto);
saveDelegationToUser(user, userAssignmentsDtos);
isAnythingChanged = true;
}
index++;
}
return isAnythingChanged;
}

private void saveDelegationToUser(UserType user, List<AssignmentEditorDto> assignmentEditorDtos) {
Expand Down
Expand Up @@ -217,7 +217,7 @@ public WebMarkupContainer createPanel(String panelId) {
@Override
public void populateItem(ListItem<AssignmentEditorDto> item) {
DelegationEditorPanel editor = new DelegationEditorPanel(ID_ROW, item.getModel(), true,
new ArrayList<AssignmentsPreviewDto>(), null, PageUserHistory.this);
new ArrayList<AssignmentsPreviewDto>(), PageUserHistory.this);
item.add(editor);
}

Expand Down
Expand Up @@ -102,6 +102,8 @@ AssignmentTablePanel.message.illegalAssignmentState=Illegal assignment state '{0
AssignmentTablePanel.message.noAssignmentSelected=No assignment selected.
AssignmentTablePanel.message.noDelegationsSelected=No delegation selected.
AssignmentTablePanel.modal.message.delete=Do you really want to delete {0} assignment(s)?
AssignmentTablePanel.modal.message.deleteDelegation=Do you really want to delete {0} delegation(s)?
AssignmentTablePanel.modal.message.noDelegationWarning=User doesn't have any delegable item
AssignmentTablePanel.modal.title.confirmDeletion=Confirm deletion
AssignmentTablePanel.modal.title.selectAssignment=Select object(s)
associationAttribute.nullValid=Choose One
Expand Down
Expand Up @@ -748,6 +748,10 @@ protected void modifyAccountChangePassword(String accountOid, String newPassword
modifyAccountShadowReplace(accountOid, PASSWORD_VALUE_PATH, task, result, userPasswordPs);
}

protected <O extends ObjectType> void renameObject(Class<O> type, String oid, String newName, Task task, OperationResult result) throws ObjectNotFoundException, SchemaException, ExpressionEvaluationException, CommunicationException, ConfigurationException, ObjectAlreadyExistsException, PolicyViolationException, SecurityViolationException {
modifyObjectReplaceProperty(type, oid, ObjectType.F_NAME, task, result, createPolyString(newName));
}

protected void recomputeUser(String userOid, Task task, OperationResult result) throws SchemaException, PolicyViolationException, ExpressionEvaluationException, ObjectNotFoundException, ObjectAlreadyExistsException, CommunicationException, ConfigurationException, SecurityViolationException {
modelService.recompute(UserType.class, userOid, task, result);
}
Expand Down
Expand Up @@ -492,7 +492,7 @@ public boolean handle(PrismObject<ShadowType> entitlementShadow) {
attributeDelta = assocAttrDef.createEmptyDelta(new ItemPath(ShadowType.F_ATTRIBUTES, assocAttrName));
PropertyModificationOperation attributeModification = new PropertyModificationOperation(attributeDelta);
attributeModification.setMatchingRuleQName(assocDefType.getMatchingRule());
operations.getOperations().add(attributeModification);
operations.add(attributeModification);
}

attributeDelta.addValuesToDelete(valueAttr.getClonedValues());
Expand Down Expand Up @@ -752,7 +752,7 @@ private <TV,TA> PrismObject<ShadowType> collectEntitlementAsObjectOperation(Prov
PropertyModificationOperation attributeModification = new PropertyModificationOperation(attributeDelta);
attributeModification.setMatchingRuleQName(assocDefType.getMatchingRule());
LOGGER.trace("Collecting entitlement object operations ({}) association {}: {}", modificationType, associationName.getLocalPart(), attributeModification);
operations.getOperations().add(attributeModification);
operations.add(attributeModification);
}

}
Expand Down
Expand Up @@ -1030,7 +1030,7 @@ private void executeEntitlements(ProvisioningContext subjectCtx,
Collection<Operation> operations = resourceObjectOperations.getOperations();

if (LOGGER.isTraceEnabled()) {
LOGGER.trace("Excuting entitlement change identifiers={}:", allIdentifiers, DebugUtil.debugDump(operations, 1));
LOGGER.trace("Excuting entitlement change identifiers={}:\n{}", allIdentifiers, DebugUtil.debugDump(operations, 1));
}

OperationResult result = parentResult.createMinorSubresult(OPERATION_MODIFY_ENTITLEMENT);
Expand Down

0 comments on commit bb3ac5a

Please sign in to comment.