Skip to content

Commit

Permalink
MID-6056 Missing information about approval role / candidate actors
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Apr 23, 2020
1 parent f221661 commit 1ed3716
Show file tree
Hide file tree
Showing 4 changed files with 101 additions and 46 deletions.
Expand Up @@ -22,6 +22,7 @@
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.CaseTypeUtil;
import com.evolveum.midpoint.schema.util.CaseWorkItemUtil;
import com.evolveum.midpoint.schema.util.ShadowUtil;
import com.evolveum.midpoint.schema.util.ApprovalContextUtil;
import com.evolveum.midpoint.util.logging.Trace;
Expand Down Expand Up @@ -580,11 +581,33 @@ public void populateItem(Item<ICellPopulator<PrismContainerValueWrapper<CaseWork
@Override
public void populateItem(Item<ICellPopulator<PrismContainerValueWrapper<CaseWorkItemType>>> cellItem,
String componentId, IModel<PrismContainerValueWrapper<CaseWorkItemType>> rowModel) {

String assignee = WebComponentUtil.getReferencedObjectNames(unwrapRowModel(rowModel).getAssigneeRef(), false, true);
cellItem.add(new Label(componentId,
assignee != null ? assignee
: WebComponentUtil.getReferencedObjectNames(unwrapRowModel(rowModel).getCandidateRef(), true, true)));
RepeatingView actorLinks = new RepeatingView(componentId);
actorLinks.setOutputMarkupId(true);
List<ObjectReferenceType> assigneeRefs;
if (CaseWorkItemUtil.doesAssigneeExist(unwrapRowModel(rowModel))){
assigneeRefs = unwrapRowModel(rowModel).getAssigneeRef();
} else {
assigneeRefs = unwrapRowModel(rowModel).getCandidateRef();
}
if (assigneeRefs != null){
assigneeRefs.forEach(assigneeRef -> {
LinkPanel assigneeLinkPanel = new LinkPanel(actorLinks.newChildId(),
Model.of(WebModelServiceUtils.resolveReferenceName(assigneeRef, pageBase))) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
CaseWorkItemType caseWorkItemType = unwrapRowModel(rowModel);
CaseType caseType = CaseTypeUtil.getCase(caseWorkItemType);

dispatchToObjectDetailsPage(caseType.getObjectRef(), pageBase, false);
}
};
assigneeLinkPanel.setOutputMarkupId(true);
actorLinks.add(assigneeLinkPanel);
});
}
cellItem.add(actorLinks);
}

@Override
Expand Down Expand Up @@ -707,18 +730,7 @@ public String getObject() {
columns.add(column);

if (!isDashboard) {
column = new AbstractColumn<SelectableBean<CaseType>, String>(createStringResource("pageCases.table.actors")){
@Override
public void populateItem(Item<ICellPopulator<SelectableBean<CaseType>>> item, String componentId, IModel<SelectableBean<CaseType>> rowModel) {
item.add(new Label(componentId, new IModel<String>() {
@Override
public String getObject() {
return getActorsForCase(rowModel, pageBase);
}
}));
}
};
columns.add(column);
columns.add(createCaseActorsColumn(pageBase));
}

column = new AbstractColumn<SelectableBean<CaseType>, String>(
Expand Down Expand Up @@ -821,28 +833,55 @@ public IModel<String> getDataModel(IModel<SelectableBean<CaseType>> rowModel) {
return columns;
}

public static AbstractColumn<SelectableBean<CaseType>, String> createCaseActorsColumn(PageBase pageBase){
return new AbstractColumn<SelectableBean<CaseType>, String>(createStringResource("pageCases.table.actors")){
@Override
public void populateItem(Item<ICellPopulator<SelectableBean<CaseType>>> item, String componentId, IModel<SelectableBean<CaseType>> rowModel) {
CaseType caseInstance = rowModel != null ? rowModel.getObject().getValue() : null;
item.add(getMultilineLinkPanel(componentId, getActorsForCase(rowModel != null ? rowModel.getObject().getValue() : null),
caseInstance, pageBase));
}
};
}

public static RepeatingView getMultilineLinkPanel(String componentId, List<ObjectReferenceType> referencesList,
CaseType caseType, PageBase pageBase){
RepeatingView multilineLinkPanel = new RepeatingView(componentId);
multilineLinkPanel.setOutputMarkupId(true);
if (referencesList != null){
referencesList.forEach(reference -> {
LinkPanel assigneeLinkPanel = new LinkPanel(multilineLinkPanel.newChildId(),
Model.of(WebModelServiceUtils.resolveReferenceName(reference, pageBase))) {
private static final long serialVersionUID = 1L;

@Override
public void onClick(AjaxRequestTarget target) {
dispatchToObjectDetailsPage(caseType.getObjectRef(), pageBase, false);
}
};
assigneeLinkPanel.setOutputMarkupId(true);
multilineLinkPanel.add(assigneeLinkPanel);
});
}
return multilineLinkPanel;
}

public static <C extends Containerable> C unwrapRowModel(IModel<PrismContainerValueWrapper<C>> rowModel){
return rowModel.getObject().getRealValue();
}

public static String getActorsForCase(IModel<SelectableBean<CaseType>> rowModel, PageBase pageBase) {
String actors = null;
SelectableBean<CaseType> caseModel = rowModel.getObject();
if (caseModel != null) {
CaseType caseIntance = caseModel.getValue();
if (caseIntance != null) {
List<CaseWorkItemType> caseWorkItemTypes = caseIntance.getWorkItem();
List<String> actorsList = new ArrayList<String>();
for (CaseWorkItemType caseWorkItem : caseWorkItemTypes) {
List<ObjectReferenceType> assignees = caseWorkItem.getAssigneeRef();
for (ObjectReferenceType actor : assignees) {
actorsList.add(WebComponentUtil.getEffectiveName(actor, AbstractRoleType.F_DISPLAY_NAME, pageBase,
pageBase.getClass().getSimpleName() + "." + "loadCaseActorsNames"));
}
public static List<ObjectReferenceType> getActorsForCase(CaseType caseType) {
List<ObjectReferenceType> actorsList = new ArrayList<>();
if (caseType != null) {
List<CaseWorkItemType> caseWorkItemTypes = caseType.getWorkItem();
for (CaseWorkItemType caseWorkItem : caseWorkItemTypes) {
if (caseWorkItem.getAssigneeRef() != null && !caseWorkItem.getAssigneeRef().isEmpty()) {
actorsList.addAll(caseWorkItem.getAssigneeRef());
} else {
actorsList.addAll(caseWorkItem.getCandidateRef());
}
actors = String.join(", ", actorsList);
}
}
return actors;
return actorsList;
}
}
Expand Up @@ -80,18 +80,7 @@ protected List<IColumn<SelectableBean<CaseType>, String>> createColumns() {
IColumn column = new PropertyColumn(createStringResource("pageCases.table.description"), "value.description");
columns.add(column);

column = new AbstractColumn<SelectableBean<CaseType>, String>(createStringResource("pageCases.table.actors")){
@Override
public void populateItem(Item<ICellPopulator<SelectableBean<CaseType>>> item, String componentId, IModel<SelectableBean<CaseType>> rowModel) {
item.add(new Label(componentId, new IModel<String>() {
@Override
public String getObject() {
return ColumnUtils.getActorsForCase(rowModel, getPageBase());
}
}));
}
};
columns.add(column);
columns.add(ColumnUtils.createCaseActorsColumn(ChildCasesTabPanel.this.getPageBase()));

column = new PropertyColumn<SelectableBeanImpl<CaseType>, String>(createStringResource("pageCases.table.state"), CaseType.F_STATE.getLocalPart(), "value.state"){
@Override
Expand Down
Expand Up @@ -36,6 +36,12 @@
</td>
<td class="col-md-9"><span wicket:id="approver"/></td>
</tr>
<tr wicket:id="candidateContainer">
<td class="col-md-3">
<wicket:message key="workItemPanel.candidateActors"/>
</td>
<td class="col-md-9"><span wicket:id="candidate"/></td>
</tr>
<tr wicket:id="parentCaseContainer">
<td class="col-md-3">
<wicket:message key="workItemPanel.parentCase"/>
Expand Down
Expand Up @@ -22,6 +22,7 @@
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.ApprovalContextUtil;
import com.evolveum.midpoint.schema.util.CaseTypeUtil;
import com.evolveum.midpoint.schema.util.CaseWorkItemUtil;
import com.evolveum.midpoint.schema.util.WorkItemTypeUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.SchemaException;
Expand All @@ -45,12 +46,14 @@
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.Form;
import org.apache.wicket.markup.html.form.TextArea;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;

/**
* Created by honchar
Expand All @@ -69,6 +72,8 @@ public class WorkItemDetailsPanel extends BasePanel<CaseWorkItemType> {
private static final String ID_REQUESTED_BY = "requestedBy";
private static final String ID_REQUESTED_FOR = "requestedFor";
private static final String ID_APPROVER = "approver";
private static final String ID_CANDIDATE_CONTAINER = "candidateContainer";
private static final String ID_CANDIDATE = "candidate";
private static final String ID_PARENT_CASE_CONTAINER = "parentCaseContainer";
private static final String ID_PARENT_CASE = "parentCase";
private static final String ID_TARGET = "target";
Expand Down Expand Up @@ -143,13 +148,29 @@ private void initLayout(){
requestedFor.setOutputMarkupId(true);
add(requestedFor);


LinkedReferencePanel approver = new LinkedReferencePanel(ID_APPROVER,
getModelObject() != null && getModelObject().getAssigneeRef() != null && getModelObject().getAssigneeRef().size() > 0 ?
Model.of(getModelObject().getAssigneeRef().get(0)) : Model.of());
approver.setOutputMarkupId(true);
add(approver);

WebMarkupContainer candidateContainer = new WebMarkupContainer(ID_CANDIDATE_CONTAINER);
candidateContainer.setOutputMarkupId(true);
candidateContainer.add(new VisibleBehaviour(() -> CaseWorkItemUtil.isWorkItemClaimable(getModelObject())));
add(candidateContainer);

RepeatingView candidateLinksPanel = new RepeatingView(ID_CANDIDATE);
candidateLinksPanel.setOutputMarkupId(true);
List<ObjectReferenceType> candidates = getModelObject() != null ? getModelObject().getCandidateRef() : null;
if (candidates != null){
candidates.forEach(candidate -> {
LinkedReferencePanel candidatePanel = new LinkedReferencePanel(candidateLinksPanel.newChildId(), Model.of(candidate));
candidatePanel.setOutputMarkupId(true);
candidateLinksPanel.add(candidatePanel);
});
}
candidateContainer.add(candidateLinksPanel);

WebMarkupContainer parentCaseContainer = new WebMarkupContainer(ID_PARENT_CASE_CONTAINER);
parentCaseContainer.add(new VisibleBehaviour(() -> getPageBase() instanceof PageCaseWorkItem));
parentCaseContainer.setOutputMarkupId(true);
Expand Down

0 comments on commit 1ed3716

Please sign in to comment.