Skip to content

Commit

Permalink
manual case operational tab + diff backports
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Jul 9, 2021
1 parent 38d33bb commit dc2086a
Show file tree
Hide file tree
Showing 11 changed files with 180 additions and 8 deletions.
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
Expand Up @@ -3934,6 +3934,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
Original file line number Diff line number Diff line change
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 @@ -36,7 +37,7 @@ public static Scene visualizeObjectTreeDeltas(ObjectTreeDeltasType deltas, Strin
if (deltas != null) {
if (deltas.getFocusPrimaryDelta() != null) {
ObjectDelta<? extends ObjectType> delta = DeltaConvertor.createObjectDelta(deltas.getFocusPrimaryDelta(), prismContext);
scenes.add(modelInteractionService.visualizeDelta(delta, objectRef, task, result));
scenes.add(modelInteractionService.visualizeDelta(delta, false, objectRef, task, result));
}
for (ProjectionObjectDeltaType projectionObjectDelta : deltas.getProjectionPrimaryDelta()) {
ObjectDelta<? extends ObjectType> delta = DeltaConvertor.createObjectDelta(projectionObjectDelta.getPrimaryDelta(), prismContext);
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);
}
}
Original file line number Diff line number Diff line change
@@ -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>
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,18 @@ public WebMarkupContainer createPanel(String panelId) {

});
} else if (matchCaseType(SystemObjectsType.ARCHETYPE_MANUAL_CASE)) {
//todo manual case tab
}
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)) {

tabs.add(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,16 @@
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="manualProvisioningContext" type="tns:ManualProvisioningContextType" minOccurs="0">
<xsd:annotation>
<xsd:documentation>
Information related to manual resource provisioning request that is to be executed.
</xsd:documentation>
<xsd:appinfo>
<a:since>4.1</a:since>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
<xsd:element name="taskRef" type="tns:ObjectReferenceType" minOccurs="0" maxOccurs="1">
<xsd:annotation>
<xsd:documentation>
Expand Down Expand Up @@ -1241,4 +1251,20 @@
</xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="ManualProvisioningContextType">
<xsd:annotation>
<xsd:documentation>
Describes the context of the manual provisioning request that is represented by a case.
</xsd:documentation>
<xsd:appinfo>
<a:container/>
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="pendingOperation" type="tns:PendingOperationType" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="id" type="xsd:long"/>
</xsd:complexType>
<xsd:element name="manualProvisioningContext" type="tns:ManualProvisioningContextType" />

</xsd:schema>
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,10 @@ AccessCertificationConfigurationType getCertificationConfiguration(OperationResu
Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException;

@NotNull
Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, ObjectReferenceType objectRef, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException;
Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, boolean includeOperationalItems, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException;

@NotNull
Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, boolean includeOperationalItems, ObjectReferenceType objectRef, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException;

List<ConnectorOperationalStatus> getConnectorOperationalStatus(String resourceOid, Task task, OperationResult parentResult)
throws SchemaException, ObjectNotFoundException, CommunicationException, ConfigurationException, ExpressionEvaluationException;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -790,7 +790,13 @@ public Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, Task task,

@Override
@NotNull
public Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, ObjectReferenceType objectRef, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException {
public Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, boolean includeOperationalItems, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException{
return visualizer.visualizeDelta(delta, null, includeOperationalItems, task, result);
}

@Override
@NotNull
public Scene visualizeDelta(ObjectDelta<? extends ObjectType> delta, boolean includeOperationalItems, ObjectReferenceType objectRef, Task task, OperationResult result) throws SchemaException, ExpressionEvaluationException {
return visualizer.visualizeDelta(delta, objectRef, task, result);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,10 +158,20 @@ public SceneImpl visualizeDelta(ObjectDelta<? extends ObjectType> objectDelta, T

@NotNull
public SceneImpl visualizeDelta(ObjectDelta<? extends ObjectType> objectDelta, ObjectReferenceType objectRef, Task task, OperationResult parentResult) throws SchemaException, ExpressionEvaluationException {
return visualizeDelta(objectDelta, objectRef, false, task, parentResult);
}

@NotNull
public SceneImpl visualizeDelta(ObjectDelta<? extends ObjectType> objectDelta, ObjectReferenceType objectRef,
boolean includeOperationalItems, Task task, OperationResult parentResult) throws SchemaException, ExpressionEvaluationException {
OperationResult result = parentResult.createSubresult(CLASS_DOT + "visualizeDelta");
try {
resolver.resolve(objectDelta, task, result);
return visualizeDelta(objectDelta, null, objectRef, new VisualizationContext(), task, result);
VisualizationContext visualizationContext = new VisualizationContext();
if (includeOperationalItems){
visualizationContext.setIncludeOperationalItems(includeOperationalItems);
}
return visualizeDelta(objectDelta, null, objectRef, visualizationContext, task, result);
} catch (RuntimeException | Error | SchemaException | ExpressionEvaluationException e) {
result.recordFatalError("Couldn't visualize the data structure: " + e.getMessage(), e);
throw e;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -258,8 +258,12 @@ private PrismObject<CaseType> addCase(String operation, String description, Stri

caseType.setTargetRef(new ObjectReferenceType().oid(shadowOid).targetName(shadowName).type(ShadowType.COMPLEX_TYPE));

// deprecated "objectChange" element was removed in midPoint 4.0.
// TODO: record operation as pending operation delta
caseType.beginManualProvisioningContext()
.beginPendingOperation()
.type(PendingOperationTypeType.MANUAL)
.delta(objectDelta)
.<ManualProvisioningContextType>end()
.end();

ObjectReferenceType archetypeRef = ObjectTypeUtil
.createObjectRef(SystemObjectsType.ARCHETYPE_MANUAL_CASE.value(), ObjectTypes.ARCHETYPE);
Expand Down

0 comments on commit dc2086a

Please sign in to comment.