Skip to content

Commit

Permalink
unify assignment collumns
Browse files Browse the repository at this point in the history
  • Loading branch information
Kateryna Honchar committed Aug 3, 2022
1 parent 728e16f commit da037a9
Show file tree
Hide file tree
Showing 6 changed files with 158 additions and 96 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2127,6 +2127,18 @@ public static String getRelationLabelValue(PrismContainerValueWrapper<Assignment
pageBase.createStringResource(relation.getLocalPart()).getString();
}

public static String getRelationLabelValue(AssignmentType assignment, PageBase pageBase) {
String relationDisplayName = null;
QName relation = null;
if (assignment != null || assignment.getTargetRef() != null) {
relation = assignment.getTargetRef().getRelation();
relationDisplayName = getRelationHeaderLabelKeyIfKnown(relation);
}
return StringUtils.isNotEmpty(relationDisplayName) ?
pageBase.createStringResource(relationDisplayName).getString() :
pageBase.createStringResource(relation.getLocalPart()).getString();
}

private static QName getRelation(PrismContainerValueWrapper<AssignmentType> assignmentWrapper) throws SchemaException {
if (assignmentWrapper == null) {
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@

import com.evolveum.midpoint.gui.impl.component.search.AbstractSearchItemWrapper;

import com.evolveum.midpoint.web.component.data.column.ColumnUtils;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -360,23 +362,7 @@ private InlineMenuItem.VisibilityChecker isViewTargetObjectMenuVisible() {
}

private IColumn<PrismContainerValueWrapper<AssignmentType>, String> createAssignmentIconColumn() {
return new CompositedIconColumn<>(Model.of("")) {

@Override
protected CompositedIcon getCompositedIcon(IModel<PrismContainerValueWrapper<AssignmentType>> rowModel) {
AssignmentType assignment = rowModel.getObject().getRealValue();
LOGGER.trace("Create icon for AssignmentType: " + assignment);
PrismObject<? extends FocusType> object = loadTargetObject(assignment);
if (object != null) {
return WebComponentUtil.createCompositeIconForObject(object.asObjectable(),
new OperationResult("create_assignment_composited_icon"), getPageBase());
}
String displayType = WebComponentUtil.createDefaultBlackIcon(AssignmentsUtil.getTargetType(assignment));
CompositedIconBuilder iconBuilder = new CompositedIconBuilder();
iconBuilder.setBasicIcon(displayType, IconCssStyle.IN_ROW_STYLE);
return iconBuilder.build();
}
};
return ColumnUtils.createAssignmentIconColumn(getPageBase());
}

protected <F extends FocusType> PrismObject<F> loadTargetObject(AssignmentType assignmentType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
import java.util.ArrayList;
import java.util.List;

import com.evolveum.midpoint.web.component.data.column.ColumnUtils;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
Expand All @@ -34,43 +36,27 @@ public AbstractRoleAssignmentPanel(String id, IModel<PrismObjectWrapper<AH>> mod
}

protected List<IColumn<PrismContainerValueWrapper<AssignmentType>, String>> initColumns() {
List<IColumn<PrismContainerValueWrapper<AssignmentType>, String>> columns = new ArrayList<>();

columns.add(new AbstractColumn<>(
createStringResource("AbstractRoleAssignmentPanel.relationLabel")) {
@Override
public void populateItem(Item<ICellPopulator<PrismContainerValueWrapper<AssignmentType>>> item, String componentId, IModel<PrismContainerValueWrapper<AssignmentType>> assignmentModel) {
item.add(new Label(componentId, WebComponentUtil.getRelationLabelValue(assignmentModel.getObject(), getPageBase())));
}
});

columns.add(new AbstractColumn<>(createStringResource("AbstractRoleAssignmentPanel.identifierLabel")) {
private static final long serialVersionUID = 1L;

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

return columns;
// List<IColumn<PrismContainerValueWrapper<AssignmentType>, String>> columns = new ArrayList<>();
//
// columns.add(new AbstractColumn<>(
// createStringResource("AbstractRoleAssignmentPanel.relationLabel")) {
// @Override
// public void populateItem(Item<ICellPopulator<PrismContainerValueWrapper<AssignmentType>>> item, String componentId, IModel<PrismContainerValueWrapper<AssignmentType>> assignmentModel) {
// item.add(new Label(componentId, WebComponentUtil.getRelationLabelValue(assignmentModel.getObject(), getPageBase())));
// }
// });
//
// columns.add(new AbstractColumn<>(createStringResource("AbstractRoleAssignmentPanel.identifierLabel")) {
// private static final long serialVersionUID = 1L;
//
// @Override
// public void populateItem(Item<ICellPopulator<PrismContainerValueWrapper<AssignmentType>>> item, String componentId,
// final IModel<PrismContainerValueWrapper<AssignmentType>> rowModel) {
// item.add(new Label(componentId, getIdentifierLabelModel(rowModel.getObject())));
// }
// });

return ColumnUtils.getDefaultAssignmentsColumns(AbstractRoleType.COMPLEX_TYPE, getPageBase());
}

private <AR extends AbstractRoleType> IModel<String> getIdentifierLabelModel(PrismContainerValueWrapper<AssignmentType> assignmentContainer) {
if (assignmentContainer == null || assignmentContainer.getRealValue() == null) {
return Model.of("");
}
PrismObject<AR> targetObject = loadTargetObject(assignmentContainer.getRealValue());
if (targetObject != null) {
AR targetRefObject = targetObject.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("");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,52 +72,16 @@ protected IColumn<SelectableBean<AssignmentType>, String> createCheckboxColumn()
return null;
}

// TODO coppied from assignment table panel, unify
@Override
protected IColumn<SelectableBean<AssignmentType>, String> createIconColumn() {
return new CompositedIconColumn<>(Model.of("")) {

@Override
protected CompositedIcon getCompositedIcon(IModel<SelectableBean<AssignmentType>> rowModel) {
AssignmentType assignment = rowModel.getObject().getValue();
// LOGGER.trace("Create icon for AssignmentType: " + assignment);
PrismObject<? extends FocusType> object = loadTargetObject(assignment);
if (object != null) {
return WebComponentUtil.createCompositeIconForObject(object.asObjectable(),
new OperationResult("create_assignment_composited_icon"), getPageBase());
}
String displayType = WebComponentUtil.createDefaultBlackIcon(AssignmentsUtil.getTargetType(assignment));
CompositedIconBuilder iconBuilder = new CompositedIconBuilder();
iconBuilder.setBasicIcon(displayType, IconCssStyle.IN_ROW_STYLE);
return iconBuilder.build();
}
};
return ColumnUtils.createAssignmentIconColumn(getPageBase());
}

protected <F extends FocusType> PrismObject<F> loadTargetObject(AssignmentType assignmentType) {
if (assignmentType == null) {
return null;
}

ObjectReferenceType targetRef = assignmentType.getTargetRef();
if (targetRef == null || targetRef.getOid() == null) {
return null;
}

PrismObject<F> targetObject = targetRef.getObject();
if (targetObject == null) {
Task task = getPageBase().createSimpleTask("load assignment targets");
OperationResult result = task.getResult();
targetObject = WebModelServiceUtils.loadObject(targetRef, getPageBase(), task, result);
result.recomputeStatus();
}
return targetObject;
}

//TODO default columns. what about other assignment tables? unify somehow
@Override
protected List<IColumn<SelectableBean<AssignmentType>, String>> createDefaultColumns() {
return ColumnUtils.getDefaultAssignmentsColumns();
return ColumnUtils.getDefaultAssignmentsColumns(getPageBase());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,11 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;

import com.evolveum.midpoint.task.api.Task;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
Expand Down Expand Up @@ -520,4 +523,41 @@ public static int loadAssignmentsLimit(OperationResult result, PageBase pageBase
return assignmentsLimit;
}

public static <AR extends AbstractRoleType> IModel<String> getIdentifierLabelModel(AssignmentType assignment, PageBase pageBase) {
if (assignment == null) {
return Model.of("");
}
PrismObject<AR> targetObject = loadTargetObject(assignment, pageBase);
if (targetObject != null) {
AR targetRefObject = targetObject.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("");
}

public static <F extends FocusType> PrismObject<F> loadTargetObject(AssignmentType assignmentType, PageBase pageBase) {
if (assignmentType == null) {
return null;
}

ObjectReferenceType targetRef = assignmentType.getTargetRef();
if (targetRef == null || targetRef.getOid() == null) {
return null;
}

PrismObject<F> targetObject = targetRef.getObject();
if (targetObject == null) {
Task task = pageBase.createSimpleTask("load assignment targets");
OperationResult result = task.getResult();
targetObject = WebModelServiceUtils.loadObject(targetRef, pageBase, task, result);
result.recomputeStatus();
}
return targetObject;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,13 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismValueWrapper;
import com.evolveum.midpoint.gui.impl.component.icon.IconCssStyle;
import com.evolveum.midpoint.util.QNameUtil;

import com.evolveum.midpoint.web.component.assignment.AssignmentsUtil;
import com.evolveum.midpoint.web.component.util.SelectableRow;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -135,8 +142,8 @@ public static <C extends ObjectType> List<IColumn<SelectableBean<C>, String>> ge
return getDefaultTaskColumns();
} else if (type.equals(ResourceType.class)) {
return getDefaultResourceColumns();
} else if (type.equals(AssignmentType.class)) {
return getDefaultAssignmentsColumns();
// } else if (type.equals(AssignmentType.class)) {
// return getDefaultAssignmentsColumns(pageBase);
} else {
return new ArrayList<>();
// throw new UnsupportedOperationException("Will be implemented eventually");
Expand Down Expand Up @@ -1069,6 +1076,23 @@ public static <C extends Containerable> C unwrapRowModel(IModel<PrismContainerVa
return rowModel.getObject().getRealValue();
}

private static <C extends Containerable, S extends SelectableRow<C>> C unwrapSelectableRowModel(IModel<S> rowModel) {
if (rowModel == null) {
return null;
}
S rowValue = rowModel.getObject();
if (rowValue == null) {
return null;
}
if (rowValue instanceof SelectableBean) {
return (C) ((SelectableBean<?>) rowValue).getValue();
} else if (rowValue instanceof PrismValueWrapper) {
return (C) ((PrismValueWrapper<?>) rowValue).getRealValue();
}

return null;
}

private static List<ObjectReferenceType> getActorsForCase(CaseType caseType) {
List<ObjectReferenceType> actorsList = new ArrayList<>();
if (caseType != null) {
Expand All @@ -1094,14 +1118,64 @@ private static List<ObjectReferenceType> getActorsForWorkitem(CaseWorkItemType w
}
}

public static <C extends Containerable> List<IColumn<SelectableBean<C>, String>> getDefaultAssignmentsColumns() {
public static <S extends SelectableRow<AssignmentType>> List<IColumn<S, String>> getDefaultAssignmentsColumns(PageBase pageBase) {
return getDefaultAssignmentsColumns(null, pageBase);
}

public static <S extends SelectableRow<AssignmentType>> List<IColumn<S, String>> getDefaultAssignmentsColumns(
QName assignmentTargetRetype, PageBase pageBase) {

List<ColumnTypeDto<String>> columnsDefs = Arrays.asList(
new ColumnTypeDto<>("AssignmentType.activation.effectiveStatus",
SelectableBeanImpl.F_VALUE + ".activation.effectiveStatus", null)

);

return new ArrayList<>(ColumnUtils.createColumns(columnsDefs));
List<IColumn<S, String>> assignmentColumns = new ArrayList<>(ColumnUtils.createColumns(columnsDefs));
if (assignmentTargetRetype == null) {
return assignmentColumns;
}
if (QNameUtil.matchAny(assignmentTargetRetype, Arrays.asList(RoleType.COMPLEX_TYPE, OrgType.COMPLEX_TYPE,
ServiceType.COMPLEX_TYPE, AbstractRoleType.COMPLEX_TYPE))) {
assignmentColumns.add(new AbstractColumn<>(
createStringResource("AbstractRoleAssignmentPanel.relationLabel")) {
@Override
public void populateItem(Item<ICellPopulator<S>> item, String componentId, IModel<S> assignmentModel) {
item.add(new Label(componentId, WebComponentUtil.getRelationLabelValue(unwrapSelectableRowModel(assignmentModel), pageBase)));
}
});

assignmentColumns.add(new AbstractColumn<>(createStringResource("AbstractRoleAssignmentPanel.identifierLabel")) {
private static final long serialVersionUID = 1L;

@Override
public void populateItem(Item<ICellPopulator<S>> item, String componentId,
final IModel<S> rowModel) {
item.add(new Label(componentId, AssignmentsUtil.getIdentifierLabelModel(unwrapSelectableRowModel(rowModel), pageBase)));
}
});


}
return assignmentColumns;
}

public static <S extends SelectableRow<AssignmentType>> CompositedIconColumn<S> createAssignmentIconColumn(PageBase pageBase) {
return new CompositedIconColumn<>(Model.of("")) {

@Override
protected CompositedIcon getCompositedIcon(IModel<S> rowModel) {
AssignmentType assignment = unwrapSelectableRowModel(rowModel);
PrismObject<? extends FocusType> object = AssignmentsUtil.loadTargetObject(assignment, pageBase);
if (object != null) {
return WebComponentUtil.createCompositeIconForObject(object.asObjectable(),
new OperationResult("create_assignment_composited_icon"), pageBase);
}
String displayType = WebComponentUtil.createDefaultBlackIcon(AssignmentsUtil.getTargetType(assignment));
CompositedIconBuilder iconBuilder = new CompositedIconBuilder();
iconBuilder.setBasicIcon(displayType, IconCssStyle.IN_ROW_STYLE);
return iconBuilder.build();
}
};
}
}

0 comments on commit da037a9

Please sign in to comment.