Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
* 'master' of github.com:Evolveum/midpoint:
  more simulation navigation
  navigation between pages in simulation ui, almost ready
  Generate sample simulation results

# Conflicts:
#	gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/page/admin/simulation/ProcessedObjectsPanel.java
  • Loading branch information
katkav committed Jan 28, 2023
2 parents 069c2af + 6632b11 commit 664a137
Show file tree
Hide file tree
Showing 27 changed files with 673 additions and 174 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ public class AvailableTagItemWrapperFactory extends AbstractSearchItemWrapperFac

@Override
protected AvailableTagSearchItemWrapper createSearchWrapper(SearchItemContext ctx) {
return new AvailableTagSearchItemWrapper(
SimulationResultProcessedObjectType.F_EVENT_TAG_REF, (List) ctx.getAvailableValues());
return new AvailableTagSearchItemWrapper( (List) ctx.getAvailableValues());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,31 @@

import java.util.List;

import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.impl.component.search.wrapper.ChoicesSearchItemWrapper;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.expression.VariablesMap;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultProcessedObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TagType;

/**
* Created by Viliam Repan (lazyman).
*/
public class AvailableTagSearchItemWrapper extends ChoicesSearchItemWrapper<String> {

public AvailableTagSearchItemWrapper(ItemPath path, List<DisplayableValue<String>> availableValues) {
super(path, availableValues);
public AvailableTagSearchItemWrapper(List<DisplayableValue<String>> availableValues) {
super(SimulationResultProcessedObjectType.F_EVENT_TAG_REF, availableValues);
}

@Override
public ObjectFilter createFilter(Class type, PageBase pageBase, VariablesMap variables) {
if (getValue().getValue() == null) {
return null;
}

return PrismContext.get().queryFor(SimulationResultProcessedObjectType.class)
.item(getPath()).ref(getValue().getValue(), TagType.COMPLEX_TYPE).buildFilter();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,10 @@ <h5 class="mb-0">
</div>
</div>
</div>
<div class="col-7">
<div class="col-12 col-md-6 col-lg-3" wicket:id="widgets">
<div class="mb-4" wicket:id="widget"/>
</div>
<div class="col-9 row gap-3">
<wicket:container wicket:id="widgets">
<div class="col-2" wicket:id="widget"/>
</wicket:container>
</div>
</div>
</wicket:extend>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<html xmlns:wicket="http://wicket.apache.org">
<body>
<wicket:extend>
simulation result processed object details
<div wicket:id="navigation"/>
</wicket:extend>
</body>
</html>
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,28 @@

package com.evolveum.midpoint.gui.impl.page.admin.simulation;

import java.util.List;

import org.apache.wicket.RestartResponseException;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.LoadableDetachableModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.authentication.api.authorization.AuthorizationAction;
import com.evolveum.midpoint.authentication.api.authorization.PageDescriptor;
import com.evolveum.midpoint.authentication.api.authorization.Url;
import com.evolveum.midpoint.common.Utils;
import com.evolveum.midpoint.gui.api.component.wizard.NavigationPanel;
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.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.PageAdmin;
import com.evolveum.midpoint.web.page.error.PageError404;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultProcessedObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultType;

/**
Expand All @@ -45,7 +54,11 @@ public class PageSimulationResultObject extends PageAdmin implements SimulationP

private static final long serialVersionUID = 1L;

private static final String ID_TABLE = "table";
private static final String ID_NAVIGATION = "navigation";

private IModel<SimulationResultType> resultModel;

private IModel<SimulationResultProcessedObjectType> objectModel;

public PageSimulationResultObject() {
this(new PageParameters());
Expand All @@ -54,26 +67,83 @@ public PageSimulationResultObject() {
public PageSimulationResultObject(PageParameters parameters) {
super(parameters);

initModels();
initLayout();
}

private void initLayout() {
private void initModels() {
resultModel = new LoadableDetachableModel<>() {

@Override
protected SimulationResultType load() {
return loadSimulationResult(PageSimulationResultObject.this);
}
};

objectModel = new LoadableDetachableModel<>() {

@Override
protected SimulationResultProcessedObjectType load() {
Task task = getPageTask();

Long id = null;
try {
id = Long.parseLong(getPageParameterContainerId());
} catch (Exception ignored) {
}

if (id == null) {
throw new RestartResponseException(PageError404.class);
}

ObjectQuery query = getPrismContext().queryFor(SimulationResultProcessedObjectType.class)
.ownedBy(SimulationResultType.class, SimulationResultType.F_PROCESSED_OBJECT)
.ownerId(resultModel.getObject().getOid())
.and()
.id(id)
.build();

List<SimulationResultProcessedObjectType> result = WebModelServiceUtils.searchContainers(SimulationResultProcessedObjectType.class,
query, null, task.getResult(), PageSimulationResultObject.this);

if (result.isEmpty()) {
throw new RestartResponseException(PageError404.class);
}

return result.get(0);
}
};
}

@Override
protected IModel<String> createPageTitleModel() {
return () -> {
String oid = getPageParameterResultOid();
private void initLayout() {
NavigationPanel navigation = new NavigationPanel(ID_NAVIGATION) {

if (!Utils.isPrismObjectOidValid(oid)) {
throw new RestartResponseException(PageError404.class);
@Override
protected @NotNull VisibleEnableBehaviour getNextVisibilityBehaviour() {
return VisibleEnableBehaviour.ALWAYS_INVISIBLE;
}

String name = WebModelServiceUtils.resolveReferenceName(
new ObjectReferenceType().oid(oid).type(SimulationResultType.COMPLEX_TYPE), this);
@Override
protected IModel<String> createTitleModel() {
return () ->
WebComponentUtil.getOrigStringFromPoly(objectModel.getObject().getName())
+ "(" + WebComponentUtil.getDisplayNameOrName(resultModel.getObject().asPrismObject()) + ")";
}

return getString("PageSimulationResultObjects.title", name);
@Override
protected void onBackPerformed(AjaxRequestTarget target) {
PageSimulationResultObject.this.onBackPerformed(target);
}
};
add(navigation);
}

@Override
protected IModel<String> createPageTitleModel() {
return () -> null;
}

private void onBackPerformed(AjaxRequestTarget target) {
redirectBack();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,18 +25,16 @@
import com.evolveum.midpoint.gui.api.component.wizard.NavigationPanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.gui.impl.component.search.CollectionPanelType;
import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.gui.impl.component.search.SearchBuilder;
import com.evolveum.midpoint.gui.impl.component.search.SearchContext;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.impl.DisplayableValueImpl;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;
import com.evolveum.midpoint.web.page.admin.PageAdmin;
import com.evolveum.midpoint.web.page.error.PageError404;
import com.evolveum.midpoint.web.session.GenericPageStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultProcessedObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.TagType;
Expand Down Expand Up @@ -182,8 +180,17 @@ protected Search createSearch() {
AvailableTagSearchItemWrapper eventTagRefItem = (AvailableTagSearchItemWrapper)
search.findPropertySearchItem(SimulationResultProcessedObjectType.F_EVENT_TAG_REF);
if (eventTagRefItem != null) {
List<String> tagOids = resultModel.getObject().getMetric().stream()
.map(m -> m.getRef() != null ? m.getRef().getEventTagRef() : null)
.filter(ref -> ref != null)
.map(ref -> ref.getOid())
.filter(oid -> Utils.isPrismObjectOidValid(oid))
.distinct().collect(Collectors.toList());

ObjectQuery query = getPrismContext().queryFor(TagType.class).id(tagOids.toArray(new String[tagOids.size()])).build();

List<PrismObject<TagType>> tags = WebModelServiceUtils.searchObjects(
TagType.class, null, getPageTask().getResult(), PageSimulationResultObjects.this);
TagType.class, query, getPageTask().getResult(), PageSimulationResultObjects.this);

List<DisplayableValue<String>> values = tags.stream()
.map(o -> new DisplayableValueImpl<>(
Expand All @@ -202,7 +209,6 @@ protected Search createSearch() {
}

private void onBackPerformed(AjaxRequestTarget target) {
//todo implement
setResponsePage(PageSimulationResults.class);
redirectBack();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,10 +17,11 @@
import org.apache.wicket.request.resource.IResource;
import org.jetbrains.annotations.NotNull;

import com.evolveum.midpoint.gui.api.component.data.provider.ISelectableDataProvider;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.ContainerableListPanel;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.gui.api.component.data.provider.ISelectableDataProvider;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.web.component.data.column.AjaxLinkColumn;
import com.evolveum.midpoint.web.component.data.column.RoundedIconColumn;
import com.evolveum.midpoint.web.component.util.SelectableBean;
Expand Down Expand Up @@ -95,14 +96,21 @@ public void onClick(AjaxRequestTarget target, IModel<SelectableBean<SimulationRe
}

private void onObjectNameClicked(AjaxRequestTarget target, SelectableBean<SimulationResultProcessedObjectType> bean) {
// todo implement
SimulationResultProcessedObjectType object = bean.getValue();
if (object == null) {
// todo implement case where there was a problem loading object for row
return;
}

PageParameters params = new PageParameters();
params.set(PageSimulationResultObject.PAGE_PARAMETER_RESULT_OID, "123");
params.set(PageSimulationResultObject.PAGE_PARAMETER_TAG_OID, "456");
params.set(PageSimulationResultObject.PAGE_PARAMETER_CONTAINER_ID, "789");

setResponsePage(new PageSimulationResultObject(params));
params.set(PageSimulationResultObject.PAGE_PARAMETER_RESULT_OID, getSimulationResultOid());
String tagOid = getTagOid();
if (tagOid != null) {
params.set(PageSimulationResultObject.PAGE_PARAMETER_TAG_OID, tagOid);
}
params.set(PageSimulationResultObject.PAGE_PARAMETER_CONTAINER_ID, object.getId());

getPageBase().navigateToNext(PageSimulationResultObject.class, params);
}

@Override
Expand All @@ -118,6 +126,12 @@ protected ISelectableDataProvider<SelectableBean<SimulationResultProcessedObject
protected String getTagOid() {
return ProcessedObjectsPanel.this.getTagOid();
}

// todo remove
@Override
public ObjectQuery getQuery() {
return super.getQuery();
}
};
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@
import org.apache.wicket.request.component.IRequestablePage;
import org.apache.wicket.request.mapper.parameter.PageParameters;

import com.evolveum.midpoint.common.Utils;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.WebModelServiceUtils;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.web.page.error.PageError404;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SimulationResultType;
Expand All @@ -28,10 +28,6 @@ public interface SimulationPage extends IRequestablePage {
String PAGE_PARAMETER_TAG_OID = "TAG_OID";
String PAGE_PARAMETER_CONTAINER_ID = "CONTAINER_ID";

String DOT_CLASS = SimulationPage.class.getName() + ".";

String OPERATION_LOAD_RESULT = DOT_CLASS + "loadResult";

default String getPageParameterResultOid() {
PageParameters params = getPageParameters();
return params.get(PAGE_PARAMETER_RESULT_OID).toString();
Expand All @@ -50,15 +46,17 @@ default String getPageParameterContainerId() {
default SimulationResultType loadSimulationResult(PageBase page) {
String resultOid = getPageParameterResultOid();

if (!Utils.isPrismObjectOidValid(resultOid)) {
throw new RestartResponseException(PageError404.class);
}

Task task = page.getPageTask();
OperationResult result = task.getResult().createSubresult(OPERATION_LOAD_RESULT);

PrismObject<SimulationResultType> object = WebModelServiceUtils.loadObject(
SimulationResultType.class, resultOid, page, task, result);
SimulationResultType.class, resultOid, page, task, task.getResult());
if (object == null) {
throw new RestartResponseException(PageError404.class);
}
result.computeStatusIfUnknown();

return object.asObjectable();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.evolveum.midpoint.gui.api.component.Badge;
import com.evolveum.midpoint.gui.api.component.BadgePanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DashboardWidgetType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType;

Expand Down Expand Up @@ -90,6 +91,8 @@ public void onClick(AjaxRequestTarget target) {
onOpenPerformed(target);
}
};
open.add(new VisibleBehaviour(() -> true)); // todo visible only when it's event tag ref metric
add(open);

BadgePanel trendBadge = new BadgePanel(ID_TREND_BADGE, () -> {
Badge badge = new Badge();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -305,7 +305,7 @@
</xsd:appinfo>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="aggregationFunction" type="tns:SimulationMetricAggregationFunctionType" minOccurs="0">
<xsd:element name="aggregationFunction" type="tns:SimulationMetricAggregationFunctionType" minOccurs="0" default="selectionTotalValue">
<xsd:annotation>
<xsd:documentation>
An aggregation function used to compute the (aggregated) metric value.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7307,6 +7307,13 @@
</xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="updateLiveSyncTokenInPreviewMode" type="xsd:boolean" minOccurs="0" default="false">
<xsd:annotation>
<xsd:documentation>
Indicates if the LiveSync token should be updated when running in preview (simulation) mode.
</xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
</xsd:extension>
</xsd:complexContent>
Expand Down

0 comments on commit 664a137

Please sign in to comment.