Skip to content

Commit

Permalink
different fixes for All accesses, including fix for exporting data (M…
Browse files Browse the repository at this point in the history
…ID-8752)
  • Loading branch information
katkav committed Apr 4, 2023
1 parent 587a2aa commit 96b0054
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 33 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,16 @@ public SearchBoxConfigurationType create() {

private SearchBoxConfigurationType createDefaultSearchBoxConfig() {
SearchBoxConfigurationType searchBoxConfig = new SearchBoxConfigurationType();
searchBoxConfig.getAllowedMode().addAll(Arrays.asList(SearchBoxModeType.BASIC, SearchBoxModeType.ADVANCED, SearchBoxModeType.AXIOM_QUERY));
searchBoxConfig.setDefaultMode(SearchBoxModeType.BASIC);
if (additionalSearchContext != null && additionalSearchContext.getAvailableSearchBoxModes() != null) {
searchBoxConfig.getAllowedMode().addAll(additionalSearchContext.getAvailableSearchBoxModes());
} else {
searchBoxConfig.getAllowedMode().addAll(Arrays.asList(SearchBoxModeType.BASIC, SearchBoxModeType.ADVANCED, SearchBoxModeType.AXIOM_QUERY));
}
if (searchBoxConfig.getAllowedMode().size() == 1) {
searchBoxConfig.setDefaultMode(searchBoxConfig.getAllowedMode().iterator().next());
} else {
searchBoxConfig.setDefaultMode(SearchBoxModeType.BASIC);
}
return searchBoxConfig;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.evolveum.midpoint.util.DisplayableValue;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectCollectionReportEngineConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectProcessingStateType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SearchBoxModeType;

public class SearchContext {

Expand All @@ -33,6 +34,8 @@ public class SearchContext {

private ObjectProcessingStateType objectProcessingState;

private List<SearchBoxModeType> availableSearchBoxModes;

public ResourceObjectDefinition getResourceObjectDefinition() {
return resourceObjectDefinition;
}
Expand Down Expand Up @@ -99,4 +102,12 @@ public ObjectProcessingStateType getObjectProcessingState() {
public void setObjectProcessingState(ObjectProcessingStateType objectProcessingState) {
this.objectProcessingState = objectProcessingState;
}

public List<SearchBoxModeType> getAvailableSearchBoxModes() {
return availableSearchBoxModes;
}

public void setAvailableSearchBoxModes(List<SearchBoxModeType> availableSearchBoxModes) {
this.availableSearchBoxModes = availableSearchBoxModes;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,14 @@

package com.evolveum.midpoint.gui.impl.page.admin.user.component;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;

import org.apache.commons.collections4.CollectionUtils;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.export.AbstractExportableColumn;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
Expand Down Expand Up @@ -47,6 +46,8 @@
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import javax.xml.datatype.XMLGregorianCalendar;

@PanelType(name = "userAllAccesses")
@PanelInstance(identifier = "igaAccesses",
applicableForOperation = OperationTypeType.MODIFY,
Expand Down Expand Up @@ -92,7 +93,8 @@ public List<ObjectReferenceType> getSelectedRealObjects() {

@Override
protected IColumn<SelectableBean<ObjectReferenceType>, String> createNameColumn(IModel<String> displayModel, GuiObjectColumnType customColumn, ExpressionType expression) {
return createCustomExportableColumn(displayModel, customColumn, expression);
return createAccessNameColumn();
// return createCustomExportableColumn(displayModel, customColumn, expression);
}

@Override
Expand All @@ -109,6 +111,7 @@ protected List<IColumn<SelectableBean<ObjectReferenceType>, String>> createDefau
protected SearchContext createAdditionalSearchContext() {
SearchContext ctx = new SearchContext();
ctx.setDefinitionOverride(getContainerDefinitionForColumns());
ctx.setAvailableSearchBoxModes(Arrays.asList(SearchBoxModeType.AXIOM_QUERY));
return ctx;
}

Expand Down Expand Up @@ -139,15 +142,19 @@ protected void processVariables(VariablesMap variablesMap, ObjectReferenceType r
add(accessesTable);
}

private List<IColumn<SelectableBean<ObjectReferenceType>, String>> createAllAccessesColumns() {
List<IColumn<SelectableBean<ObjectReferenceType>, String>> columns = new ArrayList<>();
private ObjectReferenceColumn<SelectableBean<ObjectReferenceType>> createAccessNameColumn() {
ObjectReferenceColumn<SelectableBean<ObjectReferenceType>> accessColumn = new ObjectReferenceColumn<>(createStringResource("AllAccessListPanel.accessColumnTitle"), "value") {
@Override
public IModel<List<ObjectReferenceType>> extractDataModel(IModel<SelectableBean<ObjectReferenceType>> rowModel) {
return () -> Collections.singletonList(getReferenceWithResolvedName(rowModel.getObject().getValue()));
}
};
columns.add(accessColumn);
return accessColumn;
}

private List<IColumn<SelectableBean<ObjectReferenceType>, String>> createAllAccessesColumns() {
List<IColumn<SelectableBean<ObjectReferenceType>, String>> columns = new ArrayList<>();


AbstractExportableColumn<SelectableBean<ObjectReferenceType>, String> source = new AbstractExportableColumn<>(createStringResource("AllAccessListPanel.sourceColumnTitle")) {

Expand All @@ -162,6 +169,11 @@ public void populateItem(Item<ICellPopulator<SelectableBean<ObjectReferenceType>
assignmentPaths.add(metadataType.getAssignmentPath());
}

if (assignmentPaths.size() == 1) {
cellItem.add(new Label(componentId, createStringResource("DirectAndIndirectAssignmentPanel.type.direct")));
return;
}

AssignmentPathPanel panel = new AssignmentPathPanel(componentId, Model.ofList(assignmentPaths));
cellItem.add(panel);

Expand All @@ -188,7 +200,7 @@ public IModel<String> getDataModel(IModel<SelectableBean<ObjectReferenceType>> i
}
String chanel = metadataType.getCreateChannel();
if (chanel == null) {
return () -> "channel null, cannot deremine why";
return () -> "N/A";
}

return () -> {
Expand Down Expand Up @@ -230,29 +242,19 @@ public IModel<String> getDataModel(IModel<SelectableBean<ObjectReferenceType>> i
var since = new AbstractExportableColumn<SelectableBean<ObjectReferenceType>, String>(createStringResource("AllAccessListPanel.sinceColumnTitle")) {
@Override
public IModel<String> getDataModel(IModel<SelectableBean<ObjectReferenceType>> iModel) {
AssignmentType assignmentType = getAssignment(iModel.getObject().getValue());
if (assignmentType == null) {
return () -> "";
}
MetadataType metadataType = assignmentType.getMetadata();
if (metadataType == null) {
return null;
List<StorageMetadataType> storageMetadataTypes = collectStorageMetadata(iModel.getObject().getValue().asReferenceValue());
Optional<XMLGregorianCalendar> since = storageMetadataTypes.stream()
.map(m -> m.getCreateTimestamp())
.findFirst();
if (since.isPresent()) {
return () -> WebComponentUtil.formatDate(since.get());
}
return () -> WebComponentUtil.formatDate(metadataType.getCreateTimestamp());

return () -> "";
}

};
columns.add(since);

var activationColumn = new AbstractExportableColumn<SelectableBean<ObjectReferenceType>, String>(createStringResource("AllAccessListPanel.activationColumnTitle")) {
@Override
public IModel<?> getDataModel(IModel<SelectableBean<ObjectReferenceType>> iModel) {
return AssignmentsUtil.createActivationTitleModel(getActivation(iModel.getObject().getValue()), getPageBase());
}
};
columns.add(activationColumn);

return columns;
}

Expand Down Expand Up @@ -286,7 +288,7 @@ private List<String> resolvedPaths(SelectableBean<ObjectReferenceType> ref) {
for (AssignmentPathMetadataType assignmentPathType : assignmentPaths) {
List<AssignmentPathSegmentMetadataType> segments = assignmentPathType.getSegment();
if (CollectionUtils.isEmpty(segments) || segments.size() == 1) {
continue;
return Arrays.asList(getString("DirectAndIndirectAssignmentPanel.type.direct"));
}
String path = segments.stream()
.map(segment -> WebComponentUtil.getEffectiveName(segment.getTargetRef(), AbstractRoleType.F_DISPLAY_NAME, getPageBase(), "resolveName", true))
Expand Down Expand Up @@ -317,18 +319,34 @@ private ActivationType getActivation(ObjectReferenceType ref) {
}

private <PV extends PrismValue> List<ProvenanceMetadataType> collectProvenanceMetadata(PV rowValue) {
PrismContainer<ValueMetadataType> valueMetadataContainer = rowValue.getValueMetadataAsContainer();
if (valueMetadataContainer == null) {
List<ValueMetadataType> valueMetadataValues = collectValueMetadata(rowValue);
if (valueMetadataValues == null) {
return null;
}
List<ValueMetadataType> valueMetadataValues = (List<ValueMetadataType>) valueMetadataContainer.getRealValues();

return valueMetadataValues.stream()
.map(valueMetadata -> valueMetadata.getProvenance())
.collect(Collectors.toList());

}

private <PV extends PrismValue> List<StorageMetadataType> collectStorageMetadata(PV rowValue){
List<ValueMetadataType> valueMetadataValues = collectValueMetadata(rowValue);
if (valueMetadataValues == null) {
return null;
}

return valueMetadataValues.stream()
.map(valueMetadata -> valueMetadata.getProvenance())
.map(valueMetadataType -> valueMetadataType.getStorage())
.collect(Collectors.toList());
}

private <PV extends PrismValue> List<ValueMetadataType> collectValueMetadata(PV rowValue) {
PrismContainer<ValueMetadataType> valueMetadataContainer = rowValue.getValueMetadataAsContainer();
if (valueMetadataContainer == null) {
return null;
}
return (List<ValueMetadataType>) valueMetadataContainer.getRealValues();

}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
Expand All @@ -16,6 +17,7 @@

import javax.xml.namespace.QName;
import java.util.List;
import java.util.stream.Collectors;

public abstract class ObjectReferenceColumn<T> extends PropertyColumn<T, String> {

Expand All @@ -42,7 +44,14 @@ public void populateItem(Item<ICellPopulator<T>> item, String componentId, IMode

@Override
public IModel<?> getDataModel(IModel<T> rowModel) {
return extractDataModel(rowModel);
return () -> {
IModel<List<ObjectReferenceType>> extractedRefs = extractDataModel(rowModel);
List<ObjectReferenceType> referenceTypes = extractedRefs.getObject();

return referenceTypes.stream()
.map(r -> WebComponentUtil.getOrigStringFromPoly(r.getTargetName()))
.collect(Collectors.joining(" -> "));
};
}

public abstract IModel<List<ObjectReferenceType>> extractDataModel(IModel<T> rowModel);
Expand Down

0 comments on commit 96b0054

Please sign in to comment.