Skip to content

Commit

Permalink
Merge branch 'master' into feature/outbound-multiaccounts
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed May 19, 2020
2 parents ed65b7b + d65b454 commit dfecf6b
Show file tree
Hide file tree
Showing 640 changed files with 26,061 additions and 31,675 deletions.
7 changes: 7 additions & 0 deletions gui/admin-gui/pom.xml
Expand Up @@ -321,6 +321,7 @@
<artifactId>system-init</artifactId>
<version>4.2-SNAPSHOT</version>
</dependency>

<!-- MIDPOINT RUNTIME DEPENDENCIES -->
<dependency>
<groupId>com.evolveum.midpoint.repo</groupId>
Expand All @@ -334,6 +335,12 @@
<version>${project.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.evolveum.midpoint.model</groupId>
<artifactId>rest-impl</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
Expand Down
Expand Up @@ -25,7 +25,7 @@
import com.evolveum.midpoint.gui.api.component.tabs.CountablePanelTab;
import com.evolveum.midpoint.gui.api.component.tabs.PanelTab;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
Expand Down
Expand Up @@ -7,7 +7,7 @@
package com.evolveum.midpoint.gui.api.component;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.impl.prism.PrismContainerValueWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerValueWrapper;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectPaging;
Expand Down
Expand Up @@ -16,8 +16,8 @@
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.panel.Fragment;

import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.wrapper.PrismObjectWrapper;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.PrismObject;
import com.evolveum.midpoint.prism.query.ObjectFilter;
Expand Down
Expand Up @@ -76,8 +76,8 @@ protected IColumn<SelectableBean<O>, String> createCheckboxColumn() {
}

@Override
protected IColumn<SelectableBean<O>, String> createNameColumn(IModel<String> columnNameModel, String itemPath) {
if (StringUtils.isEmpty(itemPath)) {
protected IColumn<SelectableBean<O>, String> createNameColumn(IModel<String> columnNameModel, String itemPath, ExpressionType expression) {
if (StringUtils.isEmpty(itemPath) && expression == null) {
return new ObjectNameColumn<O>(columnNameModel == null ? createStringResource("ObjectType.name") : columnNameModel) {
private static final long serialVersionUID = 1L;

Expand All @@ -94,7 +94,7 @@ public boolean isClickable(IModel<SelectableBean<O>> rowModel) {
};
} else {
return new ObjectNameColumn<O>(columnNameModel == null ? createStringResource("ObjectType.name") : columnNameModel,
itemPath) {
itemPath, expression, getPageBase()) {
private static final long serialVersionUID = 1L;

@Override
Expand Down
Expand Up @@ -7,6 +7,7 @@

<wicket:panel xmlns:wicket="http://wicket.apache.org">

<div wicket:id="warningMessage"/>
<div class="form-inline search-form">

<div wicket:id="typePanel" class="form-group">
Expand Down
Expand Up @@ -12,12 +12,15 @@

import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.component.result.MessagePanel;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.ObjectQuery;

import com.evolveum.midpoint.schema.GetOperationOptions;
import com.evolveum.midpoint.schema.SelectorOptions;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;

import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
Expand All @@ -41,6 +44,7 @@ public class ObjectBrowserPanel<O extends ObjectType> extends BasePanel<O> imple
private static final String ID_TYPE = "type";
private static final String ID_TYPE_PANEL = "typePanel";
private static final String ID_TABLE = "table";
private static final String ID_WARNING_MESSAGE = "warningMessage";

private static final String ID_BUTTON_ADD = "addButton";

Expand Down Expand Up @@ -100,6 +104,11 @@ protected void onInitialize(){
}

private void initLayout() {
MessagePanel warningMessage = new MessagePanel(ID_WARNING_MESSAGE, MessagePanel.MessagePanelType.WARN, getWarningMessageModel());
warningMessage.setOutputMarkupId(true);
warningMessage.add(new VisibleBehaviour(() -> getWarningMessageModel() != null));
add(warningMessage);

List<ObjectTypes> supported = new ArrayList<>();
for (QName qname : supportedTypes) {
supported.add(ObjectTypes.getObjectTypeFromTypeQName(qname));
Expand Down Expand Up @@ -218,6 +227,10 @@ private Collection<SelectorOptions<GetOperationOptions>> getOptions() {
return null;
}

protected IModel<String> getWarningMessageModel(){
return null;
}

@Override
public int getWidth() {
return 900;
Expand Down
Expand Up @@ -14,14 +14,20 @@
import com.evolveum.midpoint.model.api.authentication.CompiledObjectCollectionView;
import com.evolveum.midpoint.prism.*;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.repo.common.expression.ExpressionUtil;
import com.evolveum.midpoint.repo.common.expression.ExpressionVariables;
import com.evolveum.midpoint.schema.constants.ExpressionConstants;
import com.evolveum.midpoint.schema.constants.ObjectTypes;
import com.evolveum.midpoint.schema.result.OperationResult;
import com.evolveum.midpoint.schema.util.MiscSchemaUtil;
import com.evolveum.midpoint.task.api.Task;
import com.evolveum.midpoint.util.exception.*;
import com.evolveum.midpoint.web.component.data.column.InlineMenuButtonColumn;
import com.evolveum.midpoint.web.component.search.*;
import com.evolveum.midpoint.web.component.util.SelectableBean;
import com.evolveum.midpoint.web.component.util.SerializableSupplier;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.page.admin.server.dto.OperationResultStatusPresentationProperties;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
Expand Down Expand Up @@ -336,27 +342,31 @@ protected List<IColumn<SelectableBean<O>, String>> getCustomColumnsTransformed(L
}
IColumn<SelectableBean<O>, String> column;
for (GuiObjectColumnType customColumn : customColumns) {
if (customColumn.getPath() == null) {
if (customColumn.getPath() == null && customColumn.getExpression() == null) {
continue;
}
ItemPath columnPath = customColumn.getPath().getItemPath();
ItemPath columnPath = customColumn.getPath() == null ? null : customColumn.getPath().getItemPath();
// TODO this throws an exception for some kinds of invalid paths like e.g. fullName/norm (but we probably should fix prisms in that case!)
ItemDefinition itemDefinition = getPageBase().getPrismContext().getSchemaRegistry()
.findObjectDefinitionByCompileTimeClass(type.getClassDefinition())
.findItemDefinition(columnPath);
if (itemDefinition == null) {
LOGGER.warn("Unknown path '{}' in a definition of column '{}'", columnPath, customColumn.getName());
continue;
ExpressionType expression = customColumn.getExpression();
if (columnPath != null) {
ItemDefinition itemDefinition = getPageBase().getPrismContext().getSchemaRegistry()
.findObjectDefinitionByCompileTimeClass(type.getClassDefinition())
.findItemDefinition(columnPath);
if (itemDefinition == null && expression == null) {
LOGGER.warn("Unknown path '{}' in a definition of column '{}'", columnPath, customColumn.getName());
continue;
}
}

if (WebComponentUtil.getElementVisibility(customColumn.getVisibility())) {
IModel<String> columnDisplayModel =
customColumn.getDisplay() != null && customColumn.getDisplay().getLabel() != null ?
Model.of(customColumn.getDisplay().getLabel().getOrig()) :
createStringResource(getItemDisplayName(customColumn));
(customColumn.getPath() != null ? createStringResource(getItemDisplayName(customColumn)) :
Model.of(customColumn.getName()));
if (customColumns.indexOf(customColumn) == 0) {
// TODO what if a complex path is provided here?
column = createNameColumn(columnDisplayModel, customColumn.getPath().toString());
column = createNameColumn(columnDisplayModel, customColumn.getPath() == null ? "" : customColumn.getPath().toString(), expression);
} else {
column = new AbstractExportableColumn<SelectableBean<O>, String>(columnDisplayModel, null) {
private static final long serialVersionUID = 1L;
Expand All @@ -373,7 +383,31 @@ public IModel<?> getDataModel(IModel<SelectableBean<O>> rowModel) {
if (value == null) {
return Model.of("");
}
Item<?, ?> item = value.asPrismContainerValue().findItem(columnPath);
Item<?, ?> item = null;
if (columnPath != null) {
item = value.asPrismContainerValue().findItem(columnPath);
}
Item object = value.asPrismObject();
if (item != null) {
object = item;
}
if (expression != null) {
Task task = getPageBase().createSimpleTask("evaluate column expression");
try {
ExpressionVariables expressionVariables = new ExpressionVariables();
expressionVariables.put(ExpressionConstants.VAR_OBJECT, object, object.getClass());
String stringValue = ExpressionUtil.evaluateStringExpression(expressionVariables, getPageBase().getPrismContext(), expression,
MiscSchemaUtil.getExpressionProfile(), getPageBase().getExpressionFactory(), "evaluate column expression",
task, task.getResult()).iterator().next();
return Model.of(stringValue);
} catch (SchemaException | ExpressionEvaluationException | ObjectNotFoundException | CommunicationException
| ConfigurationException | SecurityViolationException e) {
LOGGER.error("Couldn't execute expression for name column");
OperationResult result = task.getResult();
OperationResultStatusPresentationProperties props = OperationResultStatusPresentationProperties.parseOperationalResultStatus(result.getStatus());
return getPageBase().createStringResource(props.getStatusLabelKey());
}
}
if (item != null) {
if (item.getDefinition() != null && item.getDefinition().getValueEnumerationRef() != null &&
item.getDefinition().getValueEnumerationRef().getOid() != null){
Expand Down Expand Up @@ -439,7 +473,7 @@ protected List<IColumn<SelectableBean<O>, String>> initColumns() {
IColumn<SelectableBean<O>, String> iconColumn = (IColumn) ColumnUtils.createIconColumn(getPageBase());
columns.add(iconColumn);

IColumn<SelectableBean<O>, String> nameColumn = createNameColumn(null, null);
IColumn<SelectableBean<O>, String> nameColumn = createNameColumn(null, null, null);
columns.add(nameColumn);

List<IColumn<SelectableBean<O>, String>> others = createColumns();
Expand Down Expand Up @@ -854,7 +888,8 @@ protected IColumn<SelectableBean<O>, String> createIconColumn(){
return (IColumn) ColumnUtils.createIconColumn(getPageBase());
}

protected abstract IColumn<SelectableBean<O>, String> createNameColumn(IModel<String> columnNameModel, String itemPath);
protected abstract IColumn<SelectableBean<O>, String> createNameColumn(IModel<String> columnNameModel, String itemPath,
ExpressionType expression);

protected abstract List<IColumn<SelectableBean<O>, String>> createColumns();

Expand Down

0 comments on commit dfecf6b

Please sign in to comment.