Skip to content

Commit

Permalink
MID-4767 Assignment table: identifier column
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Aug 19, 2018
1 parent ccf7d0e commit 3e9d35e
Show file tree
Hide file tree
Showing 2 changed files with 128 additions and 88 deletions.
Expand Up @@ -23,7 +23,9 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismContainerValue;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
Expand All @@ -32,6 +34,7 @@
import com.evolveum.midpoint.web.page.admin.users.component.AssignmentInfoDto;
import com.evolveum.midpoint.web.page.admin.users.component.AllAssignmentsPreviewDialog;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
Expand Down Expand Up @@ -66,16 +69,19 @@
*/
public class AbstractRoleAssignmentPanel extends AssignmentPanel {

private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;

private static final String ID_RELATION = "relation";
private static final String ID_RELATION_CONTAINER = "relationContainer";
private static final String ID_SHOW_ALL_ASSIGNMENTS_BUTTON = "showAllAssignmentsButton";

protected static final String DOT_CLASS = AbstractRoleAssignmentPanel.class.getName() + ".";
private static final String OPERATION_LOAD_TARGET_REF_OBJECT = DOT_CLASS + "loadAssignmentTargetRefObject";

private RelationTypes relationValue = null;

public AbstractRoleAssignmentPanel(String id, IModel<ContainerWrapper<AssignmentType>> assignmentContainerWrapperModel){
super(id, assignmentContainerWrapperModel);
super(id, assignmentContainerWrapperModel);
}

protected void initCustomLayout(WebMarkupContainer assignmentsContainer){
Expand All @@ -94,7 +100,7 @@ public boolean isVisible() {
});
assignmentsContainer.addOrReplace(relationContainer);

DropDownChoicePanel<RelationTypes> relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION,
DropDownChoicePanel<RelationTypes> relation = WebComponentUtil.createEnumPanel(RelationTypes.class, ID_RELATION,
WebComponentUtil.createReadonlyModelFromEnum(RelationTypes.class),
new IModel<RelationTypes>() {
@Override
Expand All @@ -118,7 +124,7 @@ public void detach() {

@Override
protected void onUpdate(AjaxRequestTarget target) {
refreshTable(target);
refreshTable(target);
}
});
relation.setOutputMarkupId(true);
Expand All @@ -128,9 +134,9 @@ protected void onUpdate(AjaxRequestTarget target) {
AjaxButton showAllAssignmentsButton = new AjaxButton(ID_SHOW_ALL_ASSIGNMENTS_BUTTON,
createStringResource("AssignmentTablePanel.menu.showAllAssignments")) {

private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;

@Override
@Override
public void onClick(AjaxRequestTarget ajaxRequestTarget) {
showAllAssignments(ajaxRequestTarget);
}
Expand All @@ -148,7 +154,7 @@ public boolean isVisible(){
}

private DropDownChoicePanel<RelationTypes> getRelationPanel() {
return (DropDownChoicePanel<RelationTypes>) getAssignmentContainer().get(ID_RELATION_CONTAINER).get(ID_RELATION);
return (DropDownChoicePanel<RelationTypes>) getAssignmentContainer().get(ID_RELATION_CONTAINER).get(ID_RELATION);
}


Expand All @@ -158,34 +164,34 @@ protected void showAllAssignments(AjaxRequestTarget target) {
if (pageBase instanceof PageAdminFocus) {
previewAssignmentsList = ((PageAdminFocus<?>) pageBase).showAllAssignmentsPerformed(target);
} else {
previewAssignmentsList = Collections.emptyList();
previewAssignmentsList = Collections.emptyList();
}
AllAssignmentsPreviewDialog assignmentsDialog = new AllAssignmentsPreviewDialog(pageBase.getMainPopupBodyId(), previewAssignmentsList,
pageBase);
pageBase);
pageBase.showMainPopup(assignmentsDialog, target);
}

@Override
@Override
protected void newAssignmentClickPerformed(AjaxRequestTarget target) {
TypedAssignablePanel panel = new TypedAssignablePanel(
getPageBase().getMainPopupBodyId(), getDefaultNewAssignmentFocusType()) {
TypedAssignablePanel panel = new TypedAssignablePanel(
getPageBase().getMainPopupBodyId(), getDefaultNewAssignmentFocusType()) {

private static final long serialVersionUID = 1L;
private static final long serialVersionUID = 1L;

@Override
protected void addPerformed(AjaxRequestTarget target, List selected, QName relation, ShadowKindType kind, String intent) {
super.addPerformed(target, selected, relation, kind, intent);
addSelectedAssignmentsPerformed(target, selected, relation, kind, intent);
}
@Override
protected void addPerformed(AjaxRequestTarget target, List selected, QName relation, ShadowKindType kind, String intent) {
super.addPerformed(target, selected, relation, kind, intent);
addSelectedAssignmentsPerformed(target, selected, relation, kind, intent);
}

@Override
protected List<ObjectTypes> getObjectTypesList(){
return AbstractRoleAssignmentPanel.this.getObjectTypesList();
}
@Override
protected List<ObjectTypes> getObjectTypesList(){
return AbstractRoleAssignmentPanel.this.getObjectTypesList();
}

};
panel.setOutputMarkupId(true);
getPageBase().showMainPopup(panel, target);
};
panel.setOutputMarkupId(true);
getPageBase().showMainPopup(panel, target);
}

protected Class getDefaultNewAssignmentFocusType(){
Expand All @@ -194,11 +200,11 @@ protected Class getDefaultNewAssignmentFocusType(){

protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList, QName relation,
ShadowKindType kind, String intent){
if (assignmentsList == null || assignmentsList.isEmpty()){
warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected"));
target.add(getPageBase().getFeedbackPanel());
return;
}
if (assignmentsList == null || assignmentsList.isEmpty()){
warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected"));
target.add(getPageBase().getFeedbackPanel());
return;
}

int assignmentsLimit = AssignmentsUtil.loadAssignmentsLimit(new OperationResult(OPERATION_LOAD_ASSIGNMENTS_LIMIT),
getPageBase());
Expand All @@ -210,34 +216,34 @@ protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxReques
}

for (T object : assignmentsList){
PrismContainerDefinition<AssignmentType> definition = getModelObject().getItem().getDefinition();
PrismContainerValue<AssignmentType> newAssignment;
try {
newAssignment = definition.instantiate().createNewValue();
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(object, relation);
AssignmentType assignmentType = newAssignment.asContainerable();
if (ResourceType.class.equals(object.getClass())) {
ConstructionType constructionType = new ConstructionType();
constructionType.setResourceRef(ref);
constructionType.setKind(kind);
constructionType.setIntent(intent);
assignmentType.setConstruction(constructionType);
} else {
assignmentType.setTargetRef(ref);
}
createNewAssignmentContainerValueWrapper(newAssignment);
refreshTable(target);
reloadSavePreviewButtons(target);
} catch (SchemaException e) {
getSession().error("Cannot create new assignment " + e.getMessage());
target.add(getPageBase().getFeedbackPanel());
target.add(this);
}

}


}
PrismContainerDefinition<AssignmentType> definition = getModelObject().getItem().getDefinition();
PrismContainerValue<AssignmentType> newAssignment;
try {
newAssignment = definition.instantiate().createNewValue();
ObjectReferenceType ref = ObjectTypeUtil.createObjectRef(object, relation);
AssignmentType assignmentType = newAssignment.asContainerable();
if (ResourceType.class.equals(object.getClass())) {
ConstructionType constructionType = new ConstructionType();
constructionType.setResourceRef(ref);
constructionType.setKind(kind);
constructionType.setIntent(intent);
assignmentType.setConstruction(constructionType);
} else {
assignmentType.setTargetRef(ref);
}
createNewAssignmentContainerValueWrapper(newAssignment);
refreshTable(target);
reloadSavePreviewButtons(target);
} catch (SchemaException e) {
getSession().error("Cannot create new assignment " + e.getMessage());
target.add(getPageBase().getFeedbackPanel());
target.add(this);
}

}


}
protected <T extends ObjectType> void addSelectedAssignmentsPerformed(AjaxRequestTarget target, List<T> assignmentsList, QName relation) {
if (assignmentsList == null || assignmentsList.isEmpty()) {
warn(getParentPage().getString("AssignmentTablePanel.message.noAssignmentSelected"));
Expand Down Expand Up @@ -300,6 +306,15 @@ public void populateItem(Item<ICellPopulator<ContainerValueWrapper<AssignmentTyp
item.add(new Label(componentId, getOrgRefLabelModel(rowModel.getObject())));
}
});
columns.add(new AbstractColumn<ContainerValueWrapper<AssignmentType>, String>(createStringResource("AbstractRoleAssignmentPanel.identifierLabel")){
private static final long serialVersionUID = 1L;

@Override
public void populateItem(Item<ICellPopulator<ContainerValueWrapper<AssignmentType>>> item, String componentId,
final IModel<ContainerValueWrapper<AssignmentType>> rowModel) {
item.add(new Label(componentId, getIdentifierLabelModel(rowModel.getObject())));
}
});

return columns;
}
Expand Down Expand Up @@ -332,17 +347,17 @@ protected void initPaging(){
getAssignmentsStorage().setPaging(ObjectPaging.createPaging(0, (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE)));
}

@Override
protected TableId getTableId() {
return UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE;
}
@Override
protected TableId getTableId() {
return UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE;
}

@Override
protected int getItemsPerPage() {
return (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE);
}
@Override
protected int getItemsPerPage() {
return (int) getParentPage().getItemsPerPage(UserProfileStorage.TableId.ASSIGNMENTS_TAB_TABLE);
}

protected ObjectQuery createObjectQuery() {
protected ObjectQuery createObjectQuery() {
QName relation = getRelation();
if (PrismConstants.Q_ANY.equals(relation)){
return QueryBuilder.queryFor(AssignmentType.class, getParentPage().getPrismContext())
Expand All @@ -357,7 +372,7 @@ protected ObjectQuery createObjectQuery() {
.item(new ItemPath(AssignmentType.F_TARGET_REF))
.ref(SchemaConstants.ORG_DEPUTY)
.endBlock()
.and()
.and()
.not()
.exists(AssignmentType.F_POLICY_RULE)
.build();
Expand All @@ -367,40 +382,64 @@ protected ObjectQuery createObjectQuery() {
.ref(relation)
.build();
}
}
}

private QName getRelation() {
return relationValue == null ? PrismConstants.Q_ANY : relationValue.getRelation();
}
private QName getRelation() {
return relationValue == null ? PrismConstants.Q_ANY : relationValue.getRelation();
}

@Override
protected AbstractAssignmentDetailsPanel createDetailsPanel(String idAssignmentDetails, Form<?> form, IModel<ContainerValueWrapper<AssignmentType>> model) {
return new AbstractRoleAssignmentDetailsPanel(ID_ASSIGNMENT_DETAILS, form, model);
}
@Override
protected AbstractAssignmentDetailsPanel createDetailsPanel(String idAssignmentDetails, Form<?> form, IModel<ContainerValueWrapper<AssignmentType>> model) {
return new AbstractRoleAssignmentDetailsPanel(ID_ASSIGNMENT_DETAILS, form, model);
}

private IModel<String> getTenantLabelModel(ContainerValueWrapper<AssignmentType> assignmentContainer){
if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){
return Model.of("");
if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){
return Model.of("");
}
AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable();
return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getTenantRef()), false));
AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable();
return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getTenantRef()), false));

}

private IModel<String> getOrgRefLabelModel(ContainerValueWrapper<AssignmentType> assignmentContainer){
if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){
return Model.of("");
if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){
return Model.of("");
}
AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable();
return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getOrgRef()), false));
AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable();
return Model.of(WebComponentUtil.getReferencedObjectDisplayNamesAndNames(Arrays.asList(assignment.getOrgRef()), false));

}

protected boolean isRelationVisible() {
return true;
}
private <O extends ObjectType> IModel<String> getIdentifierLabelModel(ContainerValueWrapper<AssignmentType> assignmentContainer){
if (assignmentContainer == null || assignmentContainer.getContainerValue() == null){
return Model.of("");
}
AssignmentType assignment = assignmentContainer.getContainerValue().asContainerable();
if (assignment.getTargetRef() == null){
return Model.of("");
}

PrismObject<O> object = WebModelServiceUtils.loadObject(assignment.getTargetRef(), getPageBase(),
getPageBase().createSimpleTask(OPERATION_LOAD_TARGET_REF_OBJECT), new OperationResult(OPERATION_LOAD_TARGET_REF_OBJECT));
if (object == null || !(object.asObjectable() instanceof AbstractRoleType)){
return Model.of("");
}
AbstractRoleType targetRefObject = (AbstractRoleType) object.asObjectable();
if (StringUtils.isNotEmpty(targetRefObject.getIdentifier())){
return Model.of(targetRefObject.getIdentifier());
}
if (targetRefObject.getDisplayName() != null && !targetRefObject.getName().getOrig().equals(targetRefObject.getDisplayName().getOrig())){
return Model.of(targetRefObject.getName().getOrig());
}
return Model.of("");
}

protected boolean isRelationVisible() {
return true;
}

protected List<ObjectTypes> getObjectTypesList(){
protected List<ObjectTypes> getObjectTypesList(){
return WebComponentUtil.createAssignableTypesList();
}
}
Expand Up @@ -4023,6 +4023,7 @@ AssociationDetailsPanel.AssociationHeader=Association
RoleRelationSelectionPanel.select.relation=Select relations to process
operation.com.evolveum.midpoint.web.page.admin.workflow.PageWorkItem.delegateWorkItem=Delegate work item
AbstractRoleAssignmentPanel.relationLabel=Relation
AbstractRoleAssignmentPanel.identifierLabel=Identifier
AbstractRoleMainPanel.inducedEntitlements=Induced entitlements
CertCampaignStateFilter.ALL=All campaign states
CertCampaignStateFilter.NOT_CLOSED=Not closed
Expand Down

0 comments on commit 3e9d35e

Please sign in to comment.