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
# Conflicts:
#	gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/cases/PageCase.java
  • Loading branch information
katkav committed Mar 25, 2020
2 parents 27e57f7 + 1773543 commit 920490e
Show file tree
Hide file tree
Showing 44 changed files with 3,893 additions and 3,281 deletions.
Expand Up @@ -45,6 +45,9 @@ public class ComponentConstants {
public static final QName UI_CASE_TAB_APPROVAL = new QName(NS_COMPONENTS_PREFIX, "caseTabApproval");
public static final String UI_CASE_TAB_APPROVAL_URL = QNameUtil.qNameToUri(UI_CASE_TAB_WORKITEMS);

public static final QName UI_CASE_TAB_MANUAL_OPERATION_DETAILS = new QName(NS_COMPONENTS_PREFIX, "caseTabManualOperationDetails");
public static final String UI_CASE_TAB_MANUAL_OPERATION_DETAILS_URL = QNameUtil.qNameToUri(UI_CASE_TAB_MANUAL_OPERATION_DETAILS);

public static final QName UI_CASE_TAB_EVENTS = new QName(NS_COMPONENTS_PREFIX, "caseTabEvents");
public static final String UI_CASE_TAB_EVENTS_URL = QNameUtil.qNameToUri(UI_CASE_TAB_EVENTS);

Expand Down
Expand Up @@ -2038,7 +2038,13 @@ private MainMenuItem createHomeItems() {
}
PageParameters pageParameters = new PageParameters();
pageParameters.add(OnePageParameterEncoder.PARAMETER, dashboard.getOid());
MenuItem menu = new MenuItem(label, "", PageDashboardConfigurable.class, pageParameters, null, null);
MenuItem menu = new MenuItem(label, "", PageDashboardConfigurable.class, pageParameters, null, null){
@Override
protected boolean isMenuActive() {
StringValue dashboardOid = getPageParameters().get(OnePageParameterEncoder.PARAMETER);
return dashboard.getOid().equals(dashboardOid.toString());
}
};
item.getItems().add(menu);
});

Expand Down
Expand Up @@ -4182,7 +4182,8 @@ public static SceneDto createSceneDto(CaseType caseObject, PageBase pageBase, St
OperationResult result = new OperationResult(operation);
Task task = pageBase.createSimpleTask(operation);
try {
Scene deltasScene = SceneUtil.visualizeObjectTreeDeltas(caseObject.getApprovalContext().getDeltasToApprove(), "pageWorkItem.delta",
Scene deltasScene = SceneUtil.visualizeObjectTreeDeltas(caseObject.getApprovalContext().getDeltasToApprove(),
CaseTypeUtil.isClosed(caseObject) ? "pageWorkItem.changesApplied" : "pageWorkItem.delta",
pageBase.getPrismContext(), pageBase.getModelInteractionService(), objectRef, task, result);
return new SceneDto(deltasScene);
} catch (SchemaException | ExpressionEvaluationException ex){
Expand All @@ -4191,6 +4192,24 @@ public static SceneDto createSceneDto(CaseType caseObject, PageBase pageBase, St
return null;
}

public static SceneDto createSceneDtoForManualCase(CaseType caseObject, PageBase pageBase, String operation){
if (caseObject == null || caseObject.getManualProvisioningContext() == null ||
caseObject.getManualProvisioningContext().getPendingOperation() == null) {
return null;
}
ObjectReferenceType objectRef = caseObject.getObjectRef();
OperationResult result = new OperationResult(operation);
Task task = pageBase.createSimpleTask(operation);
try {
Scene deltasScene = SceneUtil.visualizeObjectDeltaType(caseObject.getManualProvisioningContext().getPendingOperation().getDelta(),
CaseTypeUtil.isClosed(caseObject) ? "pageWorkItem.changesApplied" : "pageWorkItem.changesToBeApplied", pageBase.getPrismContext(), pageBase.getModelInteractionService(), objectRef, task, result);
return new SceneDto(deltasScene);
} catch (SchemaException | ExpressionEvaluationException ex){
LOGGER.error("Unable to create delta visualization for case {}: {}", caseObject, ex.getLocalizedMessage(), ex);
}
return null;
}

public static void workItemApproveActionPerformed(AjaxRequestTarget target, CaseWorkItemType workItem, AbstractWorkItemOutputType workItemOutput,
Component formPanel, PrismObject<UserType> powerDonor, boolean approved, OperationResult result, PageBase pageBase) {
if (workItem == null){
Expand Down
Expand Up @@ -192,6 +192,7 @@ public static AssignmentEditorDto createDtoFromObject(ObjectType object, UserDto
if (relation != null){
targetRef.setRelation(relation);
}
targetRef.asReferenceValue().setObject(object.asPrismObject());

AssignmentType assignment = new AssignmentType();
assignment.setTargetRef(targetRef);
Expand Down
Expand Up @@ -20,6 +20,7 @@
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectTreeDeltasType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ProjectionObjectDeltaType;
import com.evolveum.prism.xml.ns._public.types_3.ObjectDeltaType;

import java.util.ArrayList;
import java.util.List;
Expand All @@ -45,4 +46,15 @@ public static Scene visualizeObjectTreeDeltas(ObjectTreeDeltasType deltas, Strin
}
return new WrapperScene(scenes, displayNameKey);
}

public static Scene visualizeObjectDeltaType(ObjectDeltaType objectDeltaType, String displayNameKey,
PrismContext prismContext, ModelInteractionService modelInteractionService,
ObjectReferenceType objectRef, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException {
List<Scene> scenes = new ArrayList<>();
if (objectDeltaType != null) {
ObjectDelta<? extends ObjectType> delta = DeltaConvertor.createObjectDelta(objectDeltaType, prismContext);
scenes.add(modelInteractionService.visualizeDelta(delta, false, objectRef, task, result));
}
return new WrapperScene(scenes, displayNameKey);
}
}
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2010-2019 Evolveum
~
~ This work is dual-licensed under the Apache License 2.0
~ and European Union Public License. See LICENSE file for details.
-->

<wicket:panel xmlns:wicket="http://wicket.apache.org">
<div wicket:id="manualCaseDetailsPanel" />
</wicket:panel>
@@ -0,0 +1,69 @@
/*
* Copyright (c) 2010-2020 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.web.page.admin.cases;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.form.Form;
import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectTabPanel;
import com.evolveum.midpoint.web.component.prism.show.SceneDto;
import com.evolveum.midpoint.web.component.prism.show.ScenePanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType;

import org.apache.wicket.model.IModel;

/**
* Created by honchar
*/
public class ManualCaseTabPanel extends AbstractObjectTabPanel<CaseType> {
private static final long serialVersionUID = 1L;

private static final String DOT_CLASS = OperationRequestCaseTabPanel.class.getName() + ".";
private static final Trace LOGGER = TraceManager.getTrace(OperationRequestCaseTabPanel.class);
private static final String OPERATION_PREPARE_DELTA_VISUALIZATION = DOT_CLASS + "prepareDeltaVisualization";

private static final String ID_MANUAL_CASE_DETAILS_PANEL = "manualCaseDetailsPanel";
private IModel<SceneDto> sceneModel;

public ManualCaseTabPanel(String id, Form<PrismObjectWrapper<CaseType>> mainForm, LoadableModel<PrismObjectWrapper<CaseType>> objectWrapperModel, PageBase pageBase) {
super(id, mainForm, objectWrapperModel);
}

@Override
protected void onInitialize(){
super.onInitialize();
initModels();
initLayout();
}

private void initModels(){
sceneModel = new LoadableModel<SceneDto>(false) {
@Override
protected SceneDto load() {
PageBase pageBase = ManualCaseTabPanel.this.getPageBase();
try {
return WebComponentUtil.createSceneDtoForManualCase(ManualCaseTabPanel.this.getObjectWrapperModel().getObject().getObject().asObjectable(),
pageBase, OPERATION_PREPARE_DELTA_VISUALIZATION);
} catch (Exception ex){
LOGGER.error("Couldn't prepare delta visualization: {}", ex.getLocalizedMessage());
}
return null;
}
};
}

private void initLayout() {
ScenePanel scenePanel = new ScenePanel(ID_MANUAL_CASE_DETAILS_PANEL, sceneModel);
scenePanel.setOutputMarkupId(true);
add(scenePanel);
}

}
Expand Up @@ -9,15 +9,6 @@
import java.util.Collection;
import java.util.List;

import com.evolveum.midpoint.gui.api.component.tabs.PanelTab;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.util.CaseTypeUtil;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand All @@ -30,18 +21,26 @@

import com.evolveum.midpoint.gui.api.ComponentConstants;
import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab;
import com.evolveum.midpoint.gui.api.component.tabs.PanelTab;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.ObjectDeltaOperation;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.CaseTypeUtil;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.application.AuthorizationAction;
import com.evolveum.midpoint.web.application.PageDescriptor;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.ObjectSummaryPanel;
import com.evolveum.midpoint.web.component.objectdetails.AbstractObjectMainPanel;
import com.evolveum.midpoint.web.component.objectdetails.AssignmentHolderTypeMainPanel;
import com.evolveum.midpoint.web.page.admin.PageAdminObjectDetails;
import com.evolveum.midpoint.web.util.OnePageParameterEncoder;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

@PageDescriptor(url = "/admin/case", encoder = OnePageParameterEncoder.class, action = {
@AuthorizationAction(actionUri = AuthorizationConstants.AUTZ_UI_CASES_ALL_URL,
Expand Down Expand Up @@ -83,7 +82,7 @@ protected AbstractObjectMainPanel<CaseType> createMainPanel(String id) {
protected List<ITab> createTabs(final PageAdminObjectDetails<CaseType> parentPage) {
List<ITab> tabs = super.createTabs(parentPage);

if (matchCaseType(SystemObjectsType.ARCHETYPE_APPROVAL_CASE)
if (WebComponentUtil.hasArchetypeAssignment(getCase(), SystemObjectsType.ARCHETYPE_APPROVAL_CASE.value())
&& CaseTypeUtil.approvalSchemaExists(getObject() != null ? getObject().asObjectable() : null)) {
tabs.add(0,
new PanelTab(parentPage.createStringResource("PageCase.approvalTab"),
Expand All @@ -96,7 +95,7 @@ public WebMarkupContainer createPanel(String panelId) {
return new ApprovalCaseTabPanel(panelId, getMainForm(), getObjectModel(), parentPage);
}
});
} else if (matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)) {
} else if (WebComponentUtil.hasArchetypeAssignment(getCase(), SystemObjectsType.ARCHETYPE_OPERATION_REQUEST.value())) {
tabs.add(0,
new PanelTab(parentPage.createStringResource("PageCase.operationRequestTab"),
getTabVisibility(ComponentConstants.UI_CASE_TAB_APPROVAL_URL, true, parentPage)) {
Expand All @@ -109,10 +108,21 @@ public WebMarkupContainer createPanel(String panelId) {
}

});
} else if (matchCaseType(SystemObjectsType.ARCHETYPE_MANUAL_CASE)) {
//todo manual case tab
} else if (WebComponentUtil.hasArchetypeAssignment(getCase(), SystemObjectsType.ARCHETYPE_MANUAL_CASE.value())) {
tabs.add(0,
new PanelTab(parentPage.createStringResource("PageCase.manualOperationDetailsTab"),
getTabVisibility(ComponentConstants.UI_CASE_TAB_MANUAL_OPERATION_DETAILS_URL, true, parentPage)) {

private static final long serialVersionUID = 1L;

@Override
public WebMarkupContainer createPanel(String panelId) {
return new ManualCaseTabPanel(panelId, getMainForm(), getObjectModel(), parentPage);
}

});
}
if (!matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)) {
if (!WebComponentUtil.hasArchetypeAssignment(getCase(), SystemObjectsType.ARCHETYPE_OPERATION_REQUEST.value())) {

tabs.add(
new CountablePanelTab(parentPage.createStringResource("PageCase.workitemsTab"),
Expand All @@ -131,7 +141,7 @@ public String getCount() {
}
});
}
if (matchCaseType(SystemObjectsType.ARCHETYPE_OPERATION_REQUEST)){
if (WebComponentUtil.hasArchetypeAssignment(getCase(), SystemObjectsType.ARCHETYPE_OPERATION_REQUEST.value())){
tabs.add(
new CountablePanelTab(parentPage.createStringResource("PageCase.childCasesTab"),
getTabVisibility(ComponentConstants.UI_CASE_TAB_CHILD_CASES_URL, false, parentPage)) {
Expand Down Expand Up @@ -218,7 +228,6 @@ public void onClick(AjaxRequestTarget target) {

@Override
public void finishProcessing(AjaxRequestTarget target, Collection<ObjectDeltaOperation<? extends ObjectType>> executedDeltas, boolean returningFromAsync, OperationResult result) {

}

@Override
Expand All @@ -241,20 +250,6 @@ protected Class getRestartResponsePage() {
return PageCases.class;
}

private boolean matchCaseType(SystemObjectsType archetypeType){
CaseType caseObject = getObjectWrapper().getObject().asObjectable();
if (caseObject == null || caseObject.getAssignment() == null){
return false;
}
for (AssignmentType assignment : caseObject.getAssignment()){
ObjectReferenceType targetRef = assignment.getTargetRef();
if (targetRef != null && archetypeType.value().equals(targetRef.getOid())){
return true;
}
}
return false;
}

private int countWorkItems(){
List<CaseWorkItemType> workItemsList = getObjectModel().getObject().getObject().asObjectable().getWorkItem();
return workItemsList == null ? 0 : workItemsList.size();
Expand All @@ -272,4 +267,8 @@ private int countEvents(){
List<CaseEventType> eventsList = getObjectModel().getObject().getObject().asObjectable().getEvent();
return eventsList == null ? 0 : eventsList.size();
}

private CaseType getCase() {
return getObjectWrapper().getObject().asObjectable();
}
}
Expand Up @@ -34,6 +34,7 @@
import com.evolveum.midpoint.web.component.prism.show.ScenePanel;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.cases.ManualCaseTabPanel;
import com.evolveum.midpoint.web.page.admin.cases.PageCaseWorkItem;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
Expand Down Expand Up @@ -105,7 +106,12 @@ private void initModels(){
@Override
protected SceneDto load() {
PageBase pageBase = WorkItemDetailsPanel.this.getPageBase();
return WebComponentUtil.createSceneDto(WorkItemDetailsPanel.this.getModelObject(), pageBase, OPERATION_PREPARE_DELTA_VISUALIZATION);
CaseType parentCase = CaseTypeUtil.getCase(WorkItemDetailsPanel.this.getModelObject());
if (CaseTypeUtil.isManualProvisioningCase(parentCase)){
return WebComponentUtil.createSceneDtoForManualCase(parentCase, pageBase, OPERATION_PREPARE_DELTA_VISUALIZATION);
} else {
return WebComponentUtil.createSceneDto(WorkItemDetailsPanel.this.getModelObject(), pageBase, OPERATION_PREPARE_DELTA_VISUALIZATION);
}
}
};
evidenceFile = WorkItemTypeUtil.getEvidence(getModelObject());
Expand Down Expand Up @@ -180,10 +186,9 @@ private void initLayout(){
add(reasonPanel);


if (CaseTypeUtil.isApprovalCase(parentCase)){
if (CaseTypeUtil.isApprovalCase(parentCase) || CaseTypeUtil.isManualProvisioningCase(parentCase)){
ScenePanel scenePanel = new ScenePanel(ID_DELTAS_TO_APPROVE, sceneModel);
scenePanel.setOutputMarkupId(true);
scenePanel.add(new VisibleBehaviour(() -> CaseTypeUtil.isApprovalCase(parentCase)));
add(scenePanel);
} else {
add(new WebMarkupContainer(ID_DELTAS_TO_APPROVE));
Expand Down
Expand Up @@ -16,6 +16,8 @@
import org.apache.wicket.request.mapper.parameter.IPageParametersEncoder;
import org.apache.wicket.request.mapper.parameter.PageParametersEncoder;

import java.util.List;

/**
* Created by lazyman on 09/03/2017.
*/
Expand All @@ -41,6 +43,10 @@ protected boolean urlStartsWithMountedSegments(Url url) {
if (url == null) {
return false;
}
int segmentsSize = url.getSegments().size();
if (segmentsSize != 0 && StringUtils.isBlank(url.getSegments().get(segmentsSize-1))) {
url.getSegments().remove(segmentsSize-1);
}

if (!(pageParametersEncoder instanceof PageParametersEncoder)) {
LOG.trace("Matching using standard mounted mapper for '{}'", url);
Expand Down

0 comments on commit 920490e

Please sign in to comment.