Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Sep 19, 2023
2 parents 415cff6 + d1c1563 commit 9b929df
Show file tree
Hide file tree
Showing 13 changed files with 234 additions and 62 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright (c) 2023 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.gui.api.util;

import com.evolveum.midpoint.gui.api.component.Badge;

import org.apache.commons.lang3.StringUtils;

public enum DisplayForLifecycleState {

ACTIVE("SimulationModePanel.option.active", "colored-form-success"),
DRAFT("SimulationModePanel.option.draft", "colored-form-secondary"),
SUSPENDED(null, "colored-form-secondary"),
FAILED(null, "colored-form-danger"),
PROPOSED("SimulationModePanel.option.proposed", "colored-form-warning"),
DEFAULT(null, "colored-form-info");

private final String label;
private final String cssClass;

DisplayForLifecycleState(String label, String cssClass) {
this.label = label;
this.cssClass = cssClass;
}

public static DisplayForLifecycleState valueOfOrDefault(String name) {
if (StringUtils.isEmpty(name)) {
return DisplayForLifecycleState.DEFAULT;
}

DisplayForLifecycleState value;
try {
value = valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
return DisplayForLifecycleState.DEFAULT;
}

if (value == null) {
return DisplayForLifecycleState.DEFAULT;
}

return value;
}

public String getLabel() {
return label;
}

public String getCssClass() {
return cssClass;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2455,15 +2455,19 @@ public static <O extends ObjectType> CompositedIcon createCompositeIconForObject
}
//TODO trigger

IconType lifecycleStateIcon = IconAndStylesUtil.getIconForLifecycleState(obj);
IconType activationStatusIcon = IconAndStylesUtil.getIconForActivationStatus(obj);

String iconColor = GuiDisplayTypeUtil.getIconColor(basicIconDisplayType);

CompositedIconBuilder builder = iconBuilder.setBasicIcon(
GuiDisplayTypeUtil.getIconCssClass(basicIconDisplayType), IconCssStyle.IN_ROW_STYLE)
.appendColorHtmlValue(StringUtils.isNotEmpty(iconColor) ? iconColor : "");

if (obj instanceof ResourceType) {
return builder.build();
}

IconType lifecycleStateIcon = IconAndStylesUtil.getIconForLifecycleState(obj);
IconType activationStatusIcon = IconAndStylesUtil.getIconForActivationStatus(obj);

StringBuilder title = new StringBuilder(getOrigStringFromPolyOrEmpty(basicIconDisplayType.getTooltip()));
if (lifecycleStateIcon != null) {
builder.appendLayerIcon(lifecycleStateIcon, IconCssStyle.BOTTOM_LEFT_FOR_COLUMN_STYLE); // TODO: do we really want to expect not null icon for layerIcon?
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
/*
* Copyright (C) 2023 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.gui.impl.component.data.column;

import com.evolveum.midpoint.gui.api.component.Badge;
import com.evolveum.midpoint.gui.api.component.BadgeListPanel;
import com.evolveum.midpoint.gui.api.component.BadgePanel;
import com.evolveum.midpoint.gui.api.page.PageBase;
import com.evolveum.midpoint.gui.api.util.DisplayForLifecycleState;
import com.evolveum.midpoint.gui.api.util.LocalizationUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.Containerable;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismProperty;
import com.evolveum.midpoint.schema.constants.SchemaConstants;
import com.evolveum.midpoint.web.component.util.SelectableBean;

import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableRowType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.LookupTableType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;

import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemObjectsType;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.Component;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.extensions.markup.html.repeater.data.grid.ICellPopulator;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.repeater.Item;
import org.apache.wicket.model.IModel;

import java.util.List;
import java.util.Optional;

public class LifecycleStateBadgeColumn<C extends Containerable> extends AbstractColumn<SelectableBean<C>, String> {

private final IModel<? extends PrismContainerDefinition<C>> mainModel;
private final PageBase pageBase;

public LifecycleStateBadgeColumn(IModel<? extends PrismContainerDefinition<C>> mainModel, PageBase pageBase) {
super(null);
this.mainModel = mainModel;
this.pageBase = pageBase;
}

@Override
public Component getHeader(String componentId) {
LifecycleStateColumn column = new LifecycleStateColumn<>(mainModel, pageBase);
return column.getHeader(componentId);
}

@Override
public void populateItem(Item<ICellPopulator<SelectableBean<C>>> item, String componentId, IModel<SelectableBean<C>> iModel) {
if (iModel.getObject() == null) {
addEmptyComponent(item, componentId);
return;
}
if (iModel.getObject().getValue() == null) {
addEmptyComponent(item, componentId);
return;
}
C containerValue = iModel.getObject().getValue();
PrismProperty<String> lifecycle = containerValue.asPrismContainerValue().findProperty(ObjectType.F_LIFECYCLE_STATE);

String value;
if (lifecycle == null || StringUtils.isEmpty(lifecycle.getRealValue())) {
value = SchemaConstants.LIFECYCLE_ACTIVE;
} else {
value = lifecycle.getRealValue();
}

LookupTableType lookupTable =
WebComponentUtil.loadLookupTable(SystemObjectsType.LOOKUP_LIFECYCLE_STATES.value(), pageBase);
if (lookupTable == null) {
addEmptyComponent(item, componentId);
return;
}

String finalValue = value;
Optional<LookupTableRowType> rowOp =
lookupTable.getRow().stream().filter(row -> finalValue.equals(row.getKey())).findFirst();
if (rowOp.isEmpty()) {
addEmptyComponent(item, componentId);
return;
}

LookupTableRowType rowBean = rowOp.get();
DisplayForLifecycleState state = DisplayForLifecycleState.valueOfOrDefault(rowBean.getKey());
item.add(
new BadgeListPanel(
componentId,
() -> List.of(new Badge(
state.getCssClass() + " alert px-1 py-0 m-0",
LocalizationUtil.translatePolyString(rowBean.getLabel())))));

item.add(AttributeAppender.remove("class"));
}

private void addEmptyComponent(Item<ICellPopulator<SelectableBean<C>>> item, String componentId) {
item.add(new Label(componentId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

package com.evolveum.midpoint.gui.impl.component.input;

import com.evolveum.midpoint.gui.api.component.Badge;
import com.evolveum.midpoint.gui.api.util.DisplayForLifecycleState;
import com.evolveum.midpoint.gui.api.util.DisplayableChoiceRenderer;
import com.evolveum.midpoint.gui.api.util.LocalizationUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
Expand Down Expand Up @@ -52,41 +54,6 @@ public class LifecycleStatePanel extends InputPanel {

private final IModel<PrismPropertyWrapper<String>> model;

enum DisplayForOption {

ACTIVE("SimulationModePanel.option.active", "colored-form-success"),
DRAFT("SimulationModePanel.option.draft", "colored-form-secondary"),
PROPOSED("SimulationModePanel.option.proposed", "colored-form-warning"),
DEFAULT(null, "colored-form-info");

private final String label;
private final String cssClass;

DisplayForOption(String label, String cssClass) {
this.label = label;
this.cssClass = cssClass;
}

private static DisplayForOption valueOfOrDefault(String name) {
if (StringUtils.isEmpty(name)) {
return DisplayForOption.DEFAULT;
}

DisplayForOption value;
try {
value = valueOf(name.toUpperCase());
} catch (IllegalArgumentException e) {
return DisplayForOption.DEFAULT;
}

if (value == null) {
return DisplayForOption.DEFAULT;
}

return value;
}
}

public LifecycleStatePanel(String id, IModel<PrismPropertyWrapper<String>> model) {
super(id);
this.model = model;
Expand Down Expand Up @@ -180,9 +147,9 @@ protected CharSequence getDefaultChoice(String selectedValue) {
@Override
protected void appendOptionHtml(AppendingStringBuffer buffer, T choice, int index, String selected) {
DisplayableValue<String> displayValue = (DisplayableValue<String>) choice;
DisplayForOption display = DisplayForOption.valueOfOrDefault(displayValue.getValue());
DisplayForLifecycleState display = DisplayForLifecycleState.valueOfOrDefault(displayValue.getValue());
String label = new DisplayableValueChoiceRenderer<>(null).getDisplayValue(displayValue);
if (display.label == null) {
if (display.getLabel() == null) {
buffer.append("\n<option ");
setOptionAttributes(buffer, choice, index, selected);
buffer.append(">");
Expand All @@ -195,7 +162,7 @@ protected void appendOptionHtml(AppendingStringBuffer buffer, T choice, int inde
buffer.append(label);
buffer.append("</option>");

String advancedLabel = LocalizationUtil.translate(display.label);
String advancedLabel = LocalizationUtil.translate(display.getLabel());
buffer.append("\n<option ");
setOptionAttributes(buffer, choice, index, null);
buffer.append(">");
Expand Down Expand Up @@ -231,8 +198,8 @@ protected void onUpdate(AjaxRequestTarget target) {
} else {
name = value.getValue();
}
DisplayForOption display = DisplayForOption.valueOfOrDefault(name);
return display.cssClass + " form-control form-control-sm resizing-select " + customCssClassForInputField();
DisplayForLifecycleState display = DisplayForLifecycleState.valueOfOrDefault(name);
return display.getCssClass() + " form-control form-control-sm resizing-select " + customCssClassForInputField();
}));

add(input);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ public class ReferenceSearchItemWrapperFactory extends AbstractSearchItemWrapper

@Override
protected ReferenceSearchItemWrapper createSearchWrapper(SearchItemContext ctx) {
return new ReferenceSearchItemWrapper((PrismReferenceDefinition)ctx.getItemDef(), ctx.getParameterTargetType(), ctx.getContainerClassType());
return new ReferenceSearchItemWrapper(
(PrismReferenceDefinition)ctx.getItemDef(),
ctx.getPath(),
ctx.getParameterTargetType(),
ctx.getContainerClassType());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import com.evolveum.midpoint.prism.PrismContext;
import com.evolveum.midpoint.prism.PrismReferenceDefinition;
import com.evolveum.midpoint.prism.PrismReferenceValue;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.prism.query.ObjectFilter;
import com.evolveum.midpoint.prism.query.RefFilter;
import com.evolveum.midpoint.schema.expression.VariablesMap;
Expand All @@ -32,8 +33,9 @@ public class ReferenceSearchItemWrapper extends PropertySearchItemWrapper<Object
private QName targetType;
// List<T> availableValues = new ArrayList<>();

public ReferenceSearchItemWrapper(PrismReferenceDefinition def, QName targetType, Class<?> searchType) {
super(def.getItemName());
public ReferenceSearchItemWrapper(
PrismReferenceDefinition def, ItemPath pathFromSearchableObjects, QName targetType, Class<?> searchType) {
super(pathFromSearchableObjects);
this.def = def;
this.targetType = targetType;
this.searchType = searchType;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,13 @@
import java.util.Collections;
import java.util.List;

import com.evolveum.midpoint.gui.impl.component.data.column.LifecycleStateBadgeColumn;
import com.evolveum.midpoint.gui.impl.error.ErrorPanel;

import com.evolveum.midpoint.gui.impl.util.ProvisioningObjectsUtil;
import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
Expand Down Expand Up @@ -288,6 +292,10 @@ private List<IColumn<SelectableBean<ResourceType>, String>> initResourceColumns(
SelectableBeanImpl.F_VALUE + ".connectorRef.objectable.connectorType"));
columns.add(new PropertyColumn<>(createStringResource("pageResources.version"),
SelectableBeanImpl.F_VALUE + ".connectorRef.objectable.connectorVersion"));

IModel<PrismContainerDefinition<ResourceType>> def =
() -> PrismContext.get().getSchemaRegistry().findObjectDefinitionByCompileTimeClass(ResourceType.class);
columns.add(new LifecycleStateBadgeColumn<>(def, PageResourceTemplates.this));
return columns;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,19 @@
import java.util.Collections;
import java.util.List;

import com.evolveum.midpoint.gui.impl.component.data.column.AbstractItemWrapperColumn;
import com.evolveum.midpoint.gui.impl.component.data.column.LifecycleStateBadgeColumn;
import com.evolveum.midpoint.gui.impl.component.data.column.LifecycleStateColumn;

import com.evolveum.midpoint.prism.PrismContainerDefinition;
import com.evolveum.midpoint.prism.PrismContext;

import com.evolveum.midpoint.prism.PrismObjectDefinition;

import org.apache.commons.lang3.StringUtils;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.extensions.markup.html.repeater.data.sort.SortOrder;
import org.apache.wicket.extensions.markup.html.repeater.data.table.AbstractColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.IColumn;
import org.apache.wicket.extensions.markup.html.repeater.data.table.PropertyColumn;
import org.apache.wicket.markup.html.form.Form;
Expand Down Expand Up @@ -59,6 +69,10 @@
import com.evolveum.midpoint.web.session.UserProfileStorage;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ResourceType;

import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;

/**
* @author lazyman
*/
Expand Down Expand Up @@ -354,6 +368,10 @@ private List<IColumn<SelectableBean<ResourceType>, String>> initResourceColumns(
columns.add(new PropertyColumn<>(createStringResource("pageResources.version"),
SelectableBeanImpl.F_VALUE + ".connectorRef.objectable.connectorVersion"));

IModel<PrismContainerDefinition<ResourceType>> def =
() -> PrismContext.get().getSchemaRegistry().findObjectDefinitionByCompileTimeClass(ResourceType.class);
columns.add(new LifecycleStateBadgeColumn<>(def, PageResources.this));

return columns;
}

Expand Down

0 comments on commit 9b929df

Please sign in to comment.