Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Feb 3, 2023
2 parents e0199bf + 7fa2d3c commit ffdca43
Show file tree
Hide file tree
Showing 45 changed files with 1,053 additions and 593 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -332,36 +332,6 @@ private boolean isImportObjectButtonVisible() {
return false;
}

private CsvDownloadButtonPanel createDownloadButton(String buttonId) {
boolean canCountBeforeExporting = getType() == null || !ShadowType.class.isAssignableFrom(getType()) ||
isRawOrNoFetchOption(getOptions());
CsvDownloadButtonPanel exportDataLink = new CsvDownloadButtonPanel(buttonId, canCountBeforeExporting) {

private static final long serialVersionUID = 1L;

@Override
protected DataTable<?, ?> getDataTable() {
return getTable().getDataTable();
}

@Override
protected String getFilename() {
return getType().getSimpleName() +
"_" + createStringResource("MainObjectListPanel.exportFileName").getString();
}

};
exportDataLink.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ADMIN_CSV_EXPORT_ACTION_URI);
}
});
return exportDataLink;
}

private AjaxCompositedIconButton createCreateReportButton(String buttonId) {
final CompositedIconBuilder builder = new CompositedIconBuilder();
builder.setBasicIcon(WebComponentUtil.createReportIcon(), IconCssStyle.IN_ROW_STYLE);
Expand Down Expand Up @@ -437,20 +407,6 @@ private IModel<String> getRefreshPausePlayButtonTitleModel() {
return createStringResource("MainObjectListPanel.refresh.start").getString();
};
}

private boolean isRawOrNoFetchOption(Collection<SelectorOptions<GetOperationOptions>> options) {
if (options == null) {
return false;
}
for (SelectorOptions<GetOperationOptions> option : options) {
if (Boolean.TRUE.equals(option.getOptions().getRaw()) ||
Boolean.TRUE.equals(option.getOptions().getNoFetch())) {
return true;
}
}
return false;
}

protected boolean isCreateNewObjectEnabled() {
return !isCollectionViewPanel() || !getNewObjectInfluencesList().isEmpty();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,20 @@
import java.util.*;
import java.util.concurrent.atomic.AtomicReference;

import com.evolveum.midpoint.gui.api.component.button.CsvDownloadButtonPanel;
import com.evolveum.midpoint.gui.impl.component.data.provider.BaseSortableDataProvider;
import com.evolveum.midpoint.gui.api.component.data.provider.ISelectableDataProvider;
import com.evolveum.midpoint.gui.impl.component.data.provider.SelectableBeanContainerDataProvider;

import com.evolveum.midpoint.security.api.AuthorizationConstants;
import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour;

import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.DataTable;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider;
Expand Down Expand Up @@ -735,9 +740,55 @@ public void setAdditionalBoxCssClasses(String boxCssClasses) {
}

protected List<Component> createToolbarButtonsList(String idButton) {
return new ArrayList<>();
List<Component> buttonsList = new ArrayList<>();
buttonsList.add(createDownloadButton(idButton));
return buttonsList;
}

protected CsvDownloadButtonPanel createDownloadButton(String buttonId) {
boolean canCountBeforeExporting = getType() == null || !ShadowType.class.isAssignableFrom(getType()) ||
isRawOrNoFetchOption(getOptions());
CsvDownloadButtonPanel exportDataLink = new CsvDownloadButtonPanel(buttonId, canCountBeforeExporting) {

private static final long serialVersionUID = 1L;

@Override
protected DataTable<?, ?> getDataTable() {
return getTable().getDataTable();
}

@Override
protected String getFilename() {
return getType().getSimpleName() +
"_" + createStringResource("MainObjectListPanel.exportFileName").getString();
}

};
exportDataLink.add(new VisibleEnableBehaviour() {
private static final long serialVersionUID = 1L;

@Override
public boolean isVisible() {
return WebComponentUtil.isAuthorized(AuthorizationConstants.AUTZ_UI_ADMIN_CSV_EXPORT_ACTION_URI);
}
});
return exportDataLink;
}

private boolean isRawOrNoFetchOption(Collection<SelectorOptions<GetOperationOptions>> options) {
if (options == null) {
return false;
}
for (SelectorOptions<GetOperationOptions> option : options) {
if (Boolean.TRUE.equals(option.getOptions().getRaw()) ||
Boolean.TRUE.equals(option.getOptions().getNoFetch())) {
return true;
}
}
return false;
}


protected String getStorageKey() {
if (isCollectionViewPanelForCompiledView()) {
StringValue collectionName = WebComponentUtil.getCollectionNameParameterValue(getPageBase());
Expand Down Expand Up @@ -978,7 +1029,12 @@ private String getItemDisplayName(GuiObjectColumnType column) {
return "";
}
PrismContainerDefinition<? extends Containerable> containerDefinition = (PrismContainerDefinition<? extends Containerable>) getContainerDefinitionForColumns();
ItemDefinition def = containerDefinition.findItemDefinition(column.getPath().getItemPath());
ItemPath path = WebComponentUtil.getPath(column);
if (path == null) {
LOGGER.warn("Cannot get displayName for column {} because path is not defined", column);
return "";
}
ItemDefinition def = containerDefinition.findItemDefinition(path);
if (def == null) {
return "";
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,7 @@ public ObjectQuery createObjectQuery(VariablesMap variables, PageBase pageBase,
try {
query = queryWrapper.createQuery(getTypeClass(), pageBase, variables);
} catch (Exception e) {
LOGGER.warn("Cannot create query: {}", e.getMessage(), e);
queryWrapper.setAdvancedError(createErrorMessage(e));
}
// if (query == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,11 @@
import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.gui.impl.page.admin.AbstractObjectMainPanel;
import com.evolveum.midpoint.gui.impl.page.admin.user.UserDetailsModel;
import com.evolveum.midpoint.model.api.context.AssignmentPathSegment;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.query.ObjectQuery;
import com.evolveum.midpoint.schema.constants.Channel;
import com.evolveum.midpoint.schema.expression.VariablesMap;
import com.evolveum.midpoint.schema.util.AssignmentUtil;
import com.evolveum.midpoint.util.MiscUtil;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.web.application.PanelDisplay;
import com.evolveum.midpoint.web.application.PanelInstance;
Expand All @@ -41,9 +40,10 @@
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;

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

Expand Down Expand Up @@ -104,7 +104,7 @@ protected IColumn<SelectableBean<ObjectReferenceType>, String> createCustomExpor
@Override
protected void processVariables(VariablesMap variablesMap, ObjectReferenceType rowValue) {
super.processVariables(variablesMap,rowValue);
variablesMap.put("metadata", getMetadata(rowValue), ProvenanceMetadataType.class);
variablesMap.put("metadata", collectProvenanceMetadata(rowValue.asReferenceValue()), ProvenanceMetadataType.class);
variablesMap.put("activation", getActivation(rowValue), ProvenanceMetadataType.class);
variablesMap.put("assignment", getAssignment(rowValue), ProvenanceMetadataType.class);
variablesMap.put("owner", getObjectDetailsModels().getObjectType(), UserType.class);
Expand All @@ -121,38 +121,44 @@ private List<IColumn<SelectableBean<ObjectReferenceType>, String>> createAllAcce
List<IColumn<SelectableBean<ObjectReferenceType>, String>> columns = new ArrayList<>();
ObjectReferenceColumn<SelectableBean<ObjectReferenceType>> accessColumn = new ObjectReferenceColumn<>(createStringResource("Access"), "value") {
@Override
public IModel<ObjectReferenceType> extractDataModel(IModel<SelectableBean<ObjectReferenceType>> rowModel) {
return () -> getReferenceWithResolvedName(rowModel.getObject().getValue());
public IModel<List<ObjectReferenceType>> extractDataModel(IModel<SelectableBean<ObjectReferenceType>> rowModel) {
return () -> Collections.singletonList(getReferenceWithResolvedName(rowModel.getObject().getValue()));
}
};
columns.add(accessColumn);

ObjectReferenceColumn<SelectableBean<ObjectReferenceType>> sourceColumns = new ObjectReferenceColumn<>(createStringResource("Source"), "value") {
@Override
public IModel<ObjectReferenceType> extractDataModel(IModel<SelectableBean<ObjectReferenceType>> rowModel) {
ProvenanceMetadataType metadata = getMetadata(rowModel.getObject().getValue());
if (metadata == null) {
return null;
}
List<AssignmentPathType> assignmentPaths = metadata.getAssignmentPath();
public IModel<List<ObjectReferenceType>> extractDataModel(IModel<SelectableBean<ObjectReferenceType>> rowModel) {
return () -> {
List<ProvenanceMetadataType> metadataValues = collectProvenanceMetadata(rowModel.getObject().getValue().asReferenceValue());
if (metadataValues == null) {
return null;
}
List<AssignmentPathType> assignmentPaths = new ArrayList<>();
for (ProvenanceMetadataType metadataType : metadataValues) {
assignmentPaths.addAll(metadataType.getAssignmentPath());
}

for (AssignmentPathType assignmentPathType : assignmentPaths) {
List<AssignmentPathSegmentType> segments = assignmentPathType.getSegment();
if (CollectionUtils.isEmpty(segments) || segments.size() == 1) {
continue;
List<ObjectReferenceType> refs = new ArrayList<>();
for (AssignmentPathType assignmentPathType : assignmentPaths) {
List<AssignmentPathSegmentType> segments = assignmentPathType.getSegment();
if (CollectionUtils.isEmpty(segments) || segments.size() == 1) {
continue;
}
AssignmentPathSegmentType sourceSegment = segments.get(0);
refs.add(getReferenceWithResolvedName(sourceSegment.getTargetRef()));
}
AssignmentPathSegmentType sourceSegment = segments.get(0);
return Model.of(getReferenceWithResolvedName(sourceSegment.getTargetRef()));
}
return null;
return refs;
};
}
};
columns.add(sourceColumns);

// ObjectReferenceColumn<SelectableBean<ObjectReferenceType>> immediateParent = new ObjectReferenceColumn<>(createStringResource("Immediate parent"), "value") {
// @Override
// public IModel<ObjectReferenceType> extractDataModel(IModel<SelectableBean<ObjectReferenceType>> rowModel) {
// ProvenanceMetadataType metadata = getMetadata(rowModel.getObject().getValue());
// ProvenanceMetadataType metadata = collectProvenanceMetadata(rowModel.getObject().getValue());
// if (metadata == null) {
// return null;
// }
Expand Down Expand Up @@ -245,6 +251,25 @@ public IModel<String> getDataModel(IModel<SelectableBean<ObjectReferenceType>> i
};
columns.add(why);


var since = new AbstractExportableColumn<SelectableBean<ObjectReferenceType>, String>(createStringResource("Since")) {
@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;
}
return () -> WebComponentUtil.formatDate(metadataType.getCreateTimestamp());

};

};
columns.add(since);

var activationColumn = new AbstractExportableColumn<SelectableBean<ObjectReferenceType>, String>(createStringResource("Activation")) {
@Override
public IModel<?> getDataModel(IModel<SelectableBean<ObjectReferenceType>> iModel) {
Expand Down Expand Up @@ -273,11 +298,16 @@ private ObjectReferenceType getReferenceWithResolvedName(ObjectReferenceType ref
}

private List<String> resolvedPaths(SelectableBean<ObjectReferenceType> ref) {
ProvenanceMetadataType metadata = getMetadata(ref.getValue());
if (metadata == null) {
List<ProvenanceMetadataType> metadataValues = collectProvenanceMetadata(ref.getValue().asReferenceValue());
if (metadataValues == null) {
return null;
}
List<AssignmentPathType> assignmentPaths = metadata.getAssignmentPath();
List<AssignmentPathType> assignmentPaths = new ArrayList<>();
for (ProvenanceMetadataType metadataType : metadataValues) {
assignmentPaths.addAll(metadataType.getAssignmentPath());
}


List<String> resolvedPaths = new ArrayList<>();
for (int i = 0; i < assignmentPaths.size(); i++) {
AssignmentPathType assignmentPathType = assignmentPaths.get(i);
Expand All @@ -286,7 +316,6 @@ private List<String> resolvedPaths(SelectableBean<ObjectReferenceType> ref) {
continue;
}
String path = segments.stream()
// .map(segment -> getResolvedTarget(segment.getTargetRef()))
.map(segment -> WebComponentUtil.getEffectiveName(segment.getTargetRef(), AbstractRoleType.F_DISPLAY_NAME, getPageBase(), "resolveName", true))
.collect(Collectors.joining(" -> "));
resolvedPaths.add(path);
Expand Down Expand Up @@ -314,23 +343,20 @@ private ActivationType getActivation(ObjectReferenceType ref) {
return new ActivationType().effectiveStatus(ActivationStatusType.ENABLED);
}

private ProvenanceMetadataType getMetadata(ObjectReferenceType rowValue) {
// UserType user = getObjectDetailsModels().getObjectType();
// Optional<ObjectReferenceType> ref = user.getRoleMembershipRef().stream().filter(r -> r.equals(rowValue)).findFirst();

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

PrismContainer<ProvenanceMetadataType> provenance = rowValue.asReferenceValue().getValueMetadataAsContainer().getAnyValue().findContainer(ValueMetadataType.F_PROVENANCE);
ProvenanceMetadataType provenanceMetadataType = provenance.getRealValue();
List<AssignmentPathSegmentType> paths = provenanceMetadataType.getAssignmentPath().get(0).getSegment();
int sergments = paths.size();
List<String> rolePaths = new ArrayList<>();
for (int i = 0; i < sergments - 2; i++) {
return valueMetadataValues.stream()
.map(valueMetadata -> valueMetadata.getProvenance())
.collect(Collectors.toList());

String name = WebModelServiceUtils.resolveReferenceName(paths.get(i).getTargetRef(), getPageBase(), true);
rolePaths.add(name);
}
rolePaths.stream().collect(Collectors.joining(" -> "));
return provenanceMetadataType;
}
private <R extends AbstractRoleType> R getResolvedTarget(ObjectReferenceType rowValue) {
if (rowValue.getObject() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,6 @@
import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismPropertyWrapper;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
Expand Down Expand Up @@ -84,10 +81,10 @@ public static AssignmentTypeType getAssignmentType(AssignmentType assignment) {

public static IModel<String> createActivationTitleModel(ActivationType activationType,
PageBase basePanel) {
return () -> createAssignemntActivationKey(activationType, basePanel);
return () -> createAssignmentActivationKey(activationType, basePanel);
}

private static String createAssignemntActivationKey(ActivationType activation, PageBase basePanel) {
private static String createAssignmentActivationKey(ActivationType activation, PageBase basePanel) {
if (activation == null) {
return "";
}
Expand Down

0 comments on commit ffdca43

Please sign in to comment.