diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java index 282302d8a23..c68f644f5f4 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/GuiStyleConstants.java @@ -185,6 +185,7 @@ public class GuiStyleConstants { public static final String EVO_CROW_ICON = "fe fe-crown-object"; public static final String EVO_RIGHT_TOP_ARROW_ICON = "fe fe-arrow"; public static final String EVO_ASSIGNMENT_ICON = "fe fe-assignment"; + public static final String EVO_ASSIGNMENT_ARROW_ICON = "fe fe-action-assign"; public static final String EVO_ASSIGNMENT_ICON_A_PIECE = "fe fe-assign_horizontal_A_piece"; public static final String EVO_ASSIGNMENT_ICON_B_PIECE = "fe fe-assign_horizontal_B_piece"; public static final String EVO_OFFICER_CAP_ICON = "fe fe-officer-cap-object"; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java index b65418d4be5..23ba69269db 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/util/WebComponentUtil.java @@ -3293,35 +3293,62 @@ public static DisplayType createDisplayType(String iconCssClass, String iconColo return displayType; } - public static CompositedIconBuilder getAssignmentRelationIconBuilder(PageBase pageBase, AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType){ + + public static IconType createIconType(String iconStyle){ + return createIconType(iconStyle, ""); + } + + public static IconType createIconType(String iconStyle, String color){ + IconType icon = new IconType(); + icon.setCssClass(iconStyle); + icon.setColor(color); + return icon; + } + + + public static CompositedIconBuilder getAssignmentRelationIconBuilder(PageBase pageBase, AssignmentObjectRelation relationSpec, + IconType relationIcon, IconType actionButtonIcon){ + CompositedIconBuilder builder = new CompositedIconBuilder(); if (relationSpec == null){ - return null; + if (actionButtonIcon == null){ + return null; + } + builder.setBasicIcon(actionButtonIcon, IconCssStyle.CENTER_STYLE_WITH_RIGHT_SHIFT) + .appendColorHtmlValue(actionButtonIcon.getColor()); + return builder; } - CompositedIconBuilder builder = new CompositedIconBuilder(); - String typeIconStyle = ""; - if (org.apache.commons.collections.CollectionUtils.isNotEmpty(relationSpec.getArchetypeRefs())){ + DisplayType objectTypeDisplay = null; + if (CollectionUtils.isNotEmpty(relationSpec.getArchetypeRefs())){ try { String operation = pageBase.getClass().getSimpleName() + "." + "loadArchetypeObject"; ArchetypeType archetype = pageBase.getModelObjectResolver().resolve(relationSpec.getArchetypeRefs().get(0), ArchetypeType.class, null, null, pageBase.createSimpleTask(operation), new OperationResult(operation)); if (archetype != null && archetype.getArchetypePolicy() != null){ - DisplayType archetypeDisplayType = archetype.getArchetypePolicy().getDisplay(); - typeIconStyle = WebComponentUtil.getIconCssClass(archetypeDisplayType); + objectTypeDisplay = archetype.getArchetypePolicy().getDisplay(); } } catch (Exception ex){ LOGGER.error("Couldn't load archetype object, " + ex.getLocalizedMessage()); } } - QName objectType = org.apache.commons.collections.CollectionUtils.isNotEmpty(relationSpec.getObjectTypes()) ? relationSpec.getObjectTypes().get(0) : null; - if (StringUtils.isEmpty(typeIconStyle) && objectType != null){ - typeIconStyle = WebComponentUtil.createDefaultBlackIcon(objectType); + if (objectTypeDisplay == null){ + objectTypeDisplay = new DisplayType(); } - builder.setBasicIcon(WebComponentUtil.getIconCssClass(additionalButtonDisplayType), IconCssStyle.IN_ROW_STYLE) - .appendColorHtmlValue(WebComponentUtil.getIconColor(additionalButtonDisplayType)) - .appendLayerIcon(GuiStyleConstants.CLASS_PLUS_CIRCLE, IconCssStyle.BOTTOM_RIGHT_STYLE, GuiStyleConstants.GREEN_COLOR); - if (StringUtils.isNotEmpty(typeIconStyle)){ - builder.appendLayerIcon(typeIconStyle, IconCssStyle.BOTTOM_LEFT_STYLE); + if (objectTypeDisplay.getIcon() == null){ + objectTypeDisplay.setIcon(new IconType()); + } + QName objectType = org.apache.commons.collections.CollectionUtils.isNotEmpty(relationSpec.getObjectTypes()) ? relationSpec.getObjectTypes().get(0) : null; + if (StringUtils.isEmpty(WebComponentUtil.getIconCssClass(objectTypeDisplay)) && objectType != null){ + objectTypeDisplay.getIcon().setCssClass(WebComponentUtil.createDefaultBlackIcon(objectType)); + } + if (StringUtils.isNotEmpty(WebComponentUtil.getIconCssClass(objectTypeDisplay))) { + builder.setBasicIcon(objectTypeDisplay.getIcon(), IconCssStyle.CENTER_STYLE_WITH_RIGHT_SHIFT) + .appendColorHtmlValue(WebComponentUtil.getIconColor(objectTypeDisplay)) + .appendLayerIcon(actionButtonIcon, IconCssStyle.BOTTOM_RIGHT_STYLE) + .appendLayerIcon(relationIcon, IconCssStyle.TOP_RIGHT_STYLE); + } else { + builder.setBasicIcon(actionButtonIcon, IconCssStyle.CENTER_STYLE_WITH_RIGHT_SHIFT) + .appendColorHtmlValue(actionButtonIcon.getColor()); } return builder; } @@ -3520,16 +3547,23 @@ public static DisplayType getAssignmentObjectRelationDisplayType(PageBase pageBa if (relation != null){ RelationDefinitionType def = WebComponentUtil.getRelationDefinition(relation); if (def != null){ - DisplayType displayType = def.getDisplay(); - if (displayType == null){ + DisplayType displayType = null; + if (def.getDisplay() == null){ displayType = new DisplayType(); + } else { + displayType = createDisplayType(def.getDisplay().getCssClass()); + if (def.getDisplay().getIcon() != null){ + displayType.setIcon(new IconType()); + displayType.getIcon().setCssClass(def.getDisplay().getIcon().getCssClass()); + displayType.getIcon().setColor(def.getDisplay().getIcon().getColor()); + } } if (displayType.getLabel() != null && StringUtils.isNotEmpty(displayType.getLabel().getOrig())){ relationValue = pageBase.createStringResource(displayType.getLabel().getOrig()).getString(); } else { String relationKey = "RelationTypes." + RelationTypes.getRelationTypeByRelationValue(relation); relationValue = pageBase.createStringResource(relationValue).getString(); - if (relationKey.equals(relationValue)){ + if (StringUtils.isEmpty(relationValue) || relationKey.equals(relationValue)){ relationValue = relation.getLocalPart(); } } @@ -3537,9 +3571,8 @@ public static DisplayType getAssignmentObjectRelationDisplayType(PageBase pageBa relationTitle = pageBase.createStringResource("abstractRoleMemberPanel.withRelation", relationValue).getString(); - if (displayType.getIcon() == null){ - displayType = createDisplayType(GuiStyleConstants.EVO_ASSIGNMENT_ICON, "green", - pageBase.createStringResource(defaultTitleKey, typeTitle, relationTitle).getString()); + if (displayType.getIcon() == null || StringUtils.isEmpty(displayType.getIcon().getCssClass())){ + displayType.setIcon(createIconType("")); } displayType.setTooltip(createPolyFromOrigString(pageBase.createStringResource(defaultTitleKey, typeTitle, relationTitle).getString())); return displayType; diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AjaxCompositedIconButton.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AjaxCompositedIconButton.java index 012f96a3525..6ffe0e1236b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AjaxCompositedIconButton.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/AjaxCompositedIconButton.java @@ -18,6 +18,7 @@ import java.util.Map.Entry; +import com.evolveum.midpoint.xml.ns._public.common.common_3.IconType; import org.apache.commons.lang.StringUtils; import org.apache.wicket.AttributeModifier; import org.apache.wicket.ajax.markup.html.AjaxLink; @@ -91,9 +92,15 @@ public void onComponentTagBody(final MarkupStream markupStream, final ComponentT } if(icon.hasLayerIcons()) { - for(String entry : icon.getLayerIcons()) { - if (StringUtils.isNotEmpty(entry)) { - sb.append(" "); } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CenterWithRightShiftCssStyle.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CenterWithRightShiftCssStyle.java new file mode 100644 index 00000000000..303898c90cc --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CenterWithRightShiftCssStyle.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2010-2019 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.evolveum.midpoint.gui.impl.component.icon; + +/** + * Created by honchar + */ +public class CenterWithRightShiftCssStyle implements LayeredIconCssStyle { + + @Override + public String getBasicCssClass() { + return "icon-basic-transparent"; + } + + @Override + public String getBasicLayerCssClass() { + return "center-with-right-shift-layer"; + } + + @Override + public String getLayerCssClass() { + return "center-layer"; + } + + @Override + public String getStrokeLayerCssClass() { + return "center-icon-stroke-layer"; + } + +} + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIcon.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIcon.java index d106cb30ea9..4a23c4fa1cf 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIcon.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIcon.java @@ -19,6 +19,7 @@ import java.io.Serializable; import java.util.List; +import com.evolveum.midpoint.xml.ns._public.common.common_3.IconType; import org.apache.commons.lang.StringUtils; /** @@ -29,11 +30,11 @@ public class CompositedIcon implements Serializable { private static final long serialVersionUID = 1L; private String basicIcon; - private List layerIcons; + private List layerIcons; private String basicIconHtmlColor = ""; - public CompositedIcon(String basicIcon, List layerIcons, String basicIconHtmlColor){ + public CompositedIcon(String basicIcon, List layerIcons, String basicIconHtmlColor){ this.basicIcon = basicIcon; this.layerIcons = layerIcons; this.basicIconHtmlColor = basicIconHtmlColor; @@ -43,7 +44,7 @@ public String getBasicIcon() { return basicIcon; } - public List getLayerIcons() { + public List getLayerIcons() { return layerIcons; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIconBuilder.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIconBuilder.java index 63dbcb15a0c..116c4d4ddb0 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIconBuilder.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/CompositedIconBuilder.java @@ -20,6 +20,9 @@ import java.util.List; import java.util.Map.Entry; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.xml.ns._public.common.common_3.DisplayType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.IconType; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.Validate; @@ -31,7 +34,7 @@ public class CompositedIconBuilder { private String basicIcon = ""; - private List layerIcons = new ArrayList(); + private List layerIcons = new ArrayList(); private String colorHtmlValue = ""; public CompositedIcon build() { @@ -47,11 +50,11 @@ private void setBasicIcon(String icon, String style) { basicIcon = sb.toString(); } - private void appendLayerIcon(String icon) { + private void appendLayerIcon(IconType icon) { layerIcons.add(icon); } - private void appendLayerIcon(int index, String icon) { + private void appendLayerIcon(int index, IconType icon) { layerIcons.add(index, icon); } @@ -81,7 +84,19 @@ public CompositedIconBuilder setBasicIcon(String icon, LayeredIconCssStyle style if(StringUtils.isNotEmpty(additionalCssClass)) { sb.append(" ").append(additionalCssClass); } - appendLayerIcon(0, sb.toString()); + appendLayerIcon(0, WebComponentUtil.createIconType(sb.toString())); + return this; + } + + public CompositedIconBuilder setBasicIcon(IconType icon, LayeredIconCssStyle style) { + Validate.notNull(icon, "no icon object"); + Validate.notNull(icon.getCssClass(), "no icon class"); + Validate.notNull(style, "no icon style"); + + setBasicIcon(icon.getCssClass(), style.getBasicCssClass()); + StringBuilder sb = new StringBuilder(icon.getCssClass()); + sb.append(" ").append(style.getBasicLayerCssClass()); + appendLayerIcon(0, WebComponentUtil.createIconType(sb.toString(), icon.getColor())); return this; } @@ -106,40 +121,38 @@ public CompositedIconBuilder appendLayerIcon(String icon, CompositedIconCssStyle if(StringUtils.isNotEmpty(additionalCssClass)) { sb.append(" ").append(additionalCssClass); } - appendLayerIcon(sb.toString()); + appendLayerIcon(WebComponentUtil.createIconType(sb.toString())); return this; } - - public CompositedIconBuilder appendLayerIcon(String icon, LayeredIconCssStyle style) { - return appendLayerIcon(icon, style, ""); - } - - public CompositedIconBuilder appendLayerIcon(String icon, LayeredIconCssStyle style, String additionalCssClass) { - additionalCssClass = additionalCssClass + " " + validateInput(icon, style, false); - StringBuilder sb = new StringBuilder(icon); + + public CompositedIconBuilder appendLayerIcon(IconType icon, LayeredIconCssStyle style) { + Validate.notNull(icon, "no icon object"); + Validate.notNull(icon.getCssClass(), "no icon class"); + Validate.notNull(style, "no icon style"); + + StringBuilder sb = new StringBuilder(icon.getCssClass()); sb.append(" ").append(style.getLayerCssClass()); - if(StringUtils.isNotEmpty(additionalCssClass)) { - sb.append(" ").append(additionalCssClass); + if(StringUtils.isNotEmpty(icon.getColor())) { + sb.append(" ").append(icon.getColor()).append(" "); } String layerIconClass = sb.toString(); sb.append(" ").append(style.getStrokeLayerCssClass()); - appendLayerIcon(sb.toString()); - appendLayerIcon(layerIconClass); + appendLayerIcon(WebComponentUtil.createIconType(sb.toString(), icon.getColor())); + appendLayerIcon(WebComponentUtil.createIconType(layerIconClass, icon.getColor())); return this; } - - public CompositedIconBuilder appendLayerIcon(String icon, IconCssStyle style) { - return appendLayerIcon(icon, style, ""); - } - - public CompositedIconBuilder appendLayerIcon(String icon, IconCssStyle style, String additionalCssClass) { - additionalCssClass = additionalCssClass + " " + validateInput(icon, style, false); - StringBuilder sb = new StringBuilder(icon); + + public CompositedIconBuilder appendLayerIcon(IconType icon, IconCssStyle style) { + Validate.notNull(icon, "no icon object"); + Validate.notNull(icon.getCssClass(), "no icon class"); + Validate.notNull(style, "no icon style"); + + StringBuilder sb = new StringBuilder(icon.getCssClass()); sb.append(" ").append(style.getLayerCssClass()); - if(StringUtils.isNotEmpty(additionalCssClass)) { - sb.append(" ").append(additionalCssClass); + if(StringUtils.isNotEmpty(icon.getColor())) { + sb.append(" ").append(icon.getColor()); } - appendLayerIcon(sb.toString()); + appendLayerIcon(WebComponentUtil.createIconType(sb.toString(), icon.getColor())); return this; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/IconCssStyle.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/IconCssStyle.java index d621a7b7cd3..48a54bea6eb 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/IconCssStyle.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/IconCssStyle.java @@ -24,8 +24,10 @@ public interface IconCssStyle { public static final BottomLeftIconCssStyle BOTTOM_LEFT_STYLE = new BottomLeftIconCssStyle(); public static final BottomRightIconCssStyle BOTTOM_RIGHT_STYLE = new BottomRightIconCssStyle(); public static final CenterIconCssStyle CENTER_STYLE = new CenterIconCssStyle(); + public static final CenterWithRightShiftCssStyle CENTER_STYLE_WITH_RIGHT_SHIFT = new CenterWithRightShiftCssStyle(); public static final InRowIconCssStyle IN_ROW_STYLE = new InRowIconCssStyle(); public static final TopLeftIconCssStyle TOP_LEFT_STYLE = new TopLeftIconCssStyle(); + public static final TopRightIconCssStyle TOP_RIGHT_STYLE = new TopRightIconCssStyle(); public String getBasicCssClass(); diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/TopRightIconCssStyle.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/TopRightIconCssStyle.java new file mode 100644 index 00000000000..87ae9835aef --- /dev/null +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/component/icon/TopRightIconCssStyle.java @@ -0,0 +1,44 @@ +/* + * Copyright (c) 2010-2019 Evolveum + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.evolveum.midpoint.gui.impl.component.icon; + +/** + * Created by honchar + */ +public class TopRightIconCssStyle implements LayeredIconCssStyle { + + @Override + public String getBasicCssClass() { + return "icon-basic-transparent"; + } + + @Override + public String getBasicLayerCssClass() { + return "icon-basic-layer"; + } + + @Override + public String getLayerCssClass() { + return "top-right-layer"; + } + + @Override + public String getStrokeLayerCssClass() { + return "icon-stroke-layer"; + } + +} + diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultifunctionalButton.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultifunctionalButton.java index c0814e0dc25..b33f9ccf6d3 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultifunctionalButton.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/MultifunctionalButton.java @@ -91,9 +91,9 @@ public void onClick(AjaxRequestTarget target) { additionalButtons.forEach(additionalButtonObject -> { DisplayType additionalButtonDisplayType = validateDisplayType(getAdditionalButtonDisplayType(additionalButtonObject)); //we set default button icon class if no other is defined - if (StringUtils.isEmpty(additionalButtonDisplayType.getIcon().getCssClass())){ - additionalButtonDisplayType.getIcon().setCssClass(defaultObjectButtonDisplayType.getIcon().getCssClass()); - } +// if (StringUtils.isEmpty(additionalButtonDisplayType.getIcon().getCssClass())){ +// additionalButtonDisplayType.getIcon().setCssClass(defaultObjectButtonDisplayType.getIcon().getCssClass()); +// } CompositedIconBuilder additionalButtonBuilder = getAdditionalIconBuilder(additionalButtonObject, additionalButtonDisplayType); AjaxCompositedIconButton additionalButton = new AjaxCompositedIconButton(buttonsPanel.newChildId(), additionalButtonBuilder.build(), @@ -114,13 +114,13 @@ public void onClick(AjaxRequestTarget target) { if (StringUtils.isEmpty(defaultObjectButtonDisplayType.getIcon().getCssClass())){ defaultObjectButtonDisplayType.getIcon().setCssClass(mainButtonDisplayType.getIcon().getCssClass()); } - CompositedIconBuilder defaultObjectButtonBuilder = new CompositedIconBuilder(); - defaultObjectButtonBuilder.setBasicIcon(WebComponentUtil.getIconCssClass(defaultObjectButtonDisplayType), IconCssStyle.IN_ROW_STYLE) - .appendColorHtmlValue(WebComponentUtil.getIconColor(defaultObjectButtonDisplayType)) - .appendLayerIcon(GuiStyleConstants.CLASS_PLUS_CIRCLE, IconCssStyle.BOTTOM_RIGHT_STYLE, GuiStyleConstants.GREEN_COLOR); +// CompositedIconBuilder defaultObjectButtonBuilder = new CompositedIconBuilder(); +// defaultObjectButtonBuilder.setBasicIcon(WebComponentUtil.getIconCssClass(defaultObjectButtonDisplayType), IconCssStyle.IN_ROW_STYLE) +// .appendColorHtmlValue(WebComponentUtil.getIconColor(defaultObjectButtonDisplayType)) +// .appendLayerIcon(WebComponentUtil.createIconType(GuiStyleConstants.CLASS_PLUS_CIRCLE, "green"), IconCssStyle.BOTTOM_RIGHT_STYLE); AjaxCompositedIconButton defaultButton = new AjaxCompositedIconButton(buttonsPanel.newChildId(), - defaultObjectButtonBuilder.build(), + getAdditionalIconBuilder(null, defaultObjectButtonDisplayType).build(), Model.of(WebComponentUtil.getDisplayTypeTitle(defaultObjectButtonDisplayType))){ private static final long serialVersionUID = 1L; @@ -150,7 +150,7 @@ protected CompositedIconBuilder getAdditionalIconBuilder(S additionalButtonObjec CompositedIconBuilder builder = new CompositedIconBuilder(); builder.setBasicIcon(WebComponentUtil.getIconCssClass(additionalButtonDisplayType), IconCssStyle.IN_ROW_STYLE) .appendColorHtmlValue(WebComponentUtil.getIconColor(additionalButtonDisplayType)) - .appendLayerIcon(GuiStyleConstants.CLASS_PLUS_CIRCLE, IconCssStyle.BOTTOM_RIGHT_STYLE, GuiStyleConstants.GREEN_COLOR); + .appendLayerIcon(WebComponentUtil.createIconType(GuiStyleConstants.CLASS_PLUS_CIRCLE, "green"), IconCssStyle.BOTTOM_RIGHT_STYLE); return builder; } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java index 89c1fb68894..3c3e097e119 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/assignment/AssignmentPanel.java @@ -169,7 +169,8 @@ protected List getNewObjectInfluencesList() { @Override protected CompositedIconBuilder getAdditionalIconBuilder(AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType) { - return WebComponentUtil.getAssignmentRelationIconBuilder(AssignmentPanel.this.getPageBase(), relationSpec, additionalButtonDisplayType); + return WebComponentUtil.getAssignmentRelationIconBuilder(AssignmentPanel.this.getPageBase(), relationSpec, + additionalButtonDisplayType.getIcon(), WebComponentUtil.createIconType(GuiStyleConstants.EVO_ASSIGNMENT_ICON, "green")); } @Override diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java index 7c1dc9c2580..f9108ba271e 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/roles/AbstractRoleMemberPanel.java @@ -243,7 +243,8 @@ protected DisplayType getNewObjectButtonStandardDisplayType(){ @Override protected CompositedIconBuilder getNewObjectButtonAdditionalIconBuilder(AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType){ - return WebComponentUtil.getAssignmentRelationIconBuilder(AbstractRoleMemberPanel.this.getPageBase(), relationSpec, additionalButtonDisplayType); + return WebComponentUtil.getAssignmentRelationIconBuilder(AbstractRoleMemberPanel.this.getPageBase(), relationSpec, + additionalButtonDisplayType.getIcon(), WebComponentUtil.createIconType(GuiStyleConstants.CLASS_ADD_NEW_OBJECT, "green")); } @Override @@ -290,8 +291,8 @@ protected DisplayType getDefaultObjectButtonDisplayType(){ @Override protected CompositedIconBuilder getAdditionalIconBuilder(AssignmentObjectRelation relationSpec, DisplayType additionalButtonDisplayType){ - return WebComponentUtil.getAssignmentRelationIconBuilder(AbstractRoleMemberPanel.this.getPageBase(), - relationSpec, additionalButtonDisplayType); + return WebComponentUtil.getAssignmentRelationIconBuilder(AbstractRoleMemberPanel.this.getPageBase(), relationSpec, + additionalButtonDisplayType.getIcon(), WebComponentUtil.createIconType(GuiStyleConstants.EVO_ASSIGNMENT_ICON, "green")); } }; assignButton.add(AttributeAppender.append("class", "btn-margin-right")); diff --git a/gui/admin-gui/src/main/resources/static/less/midpoint/icon-style.less b/gui/admin-gui/src/main/resources/static/less/midpoint/icon-style.less index 7cd3cf93803..45be29dfb1d 100644 --- a/gui/admin-gui/src/main/resources/static/less/midpoint/icon-style.less +++ b/gui/admin-gui/src/main/resources/static/less/midpoint/icon-style.less @@ -150,26 +150,39 @@ } i.bottom-right-layer { - font-size: 85%; + font-size: 85% !important; position: absolute; - right: 13%; - bottom: 7%; + right: 5%; + bottom: 5%; } + i.center-with-right-shift-layer { + font-size: 125%; + padding-right: 30%; + bottom: 20%; + } + i.bottom-left-layer { - font-size: 100%; + font-size: 85% !important; position: absolute; left: 10%; bottom: 5%; } i.top-left-layer { - font-size: 100%; + font-size: 85% !important; position: absolute; left: 10%; - top: 15%; + top: 5%; } - + + i.top-right-layer { + font-size: 85% !important; + position: absolute; + right: 5%; + top: 5%; + } + i.center-layer { font-size: 70% !important; position: absolute; diff --git a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/dom/DomLexicalProcessor.java b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/dom/DomLexicalProcessor.java index 02c63eef955..e5178d6c426 100644 --- a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/dom/DomLexicalProcessor.java +++ b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/dom/DomLexicalProcessor.java @@ -627,7 +627,7 @@ private Element serializeToElement(XNodeImpl xnode, QName elementName) throws Sc return serializeToElement(xlist.get(0), elementName); } } else { - throw new IllegalArgumentException("Cannot serialized "+xnode+" to element"); + throw new IllegalArgumentException("Cannot serialize "+xnode+" to element"); } } diff --git a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/json/AbstractJsonLexicalProcessor.java b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/json/AbstractJsonLexicalProcessor.java index a77d8c5ae25..018ea744abc 100644 --- a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/json/AbstractJsonLexicalProcessor.java +++ b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/lex/json/AbstractJsonLexicalProcessor.java @@ -410,7 +410,9 @@ private XNodeImpl parseJsonObject(JsonParsingContext ctx, IterativeParsingContex wrappedValue = valueXNode; } } else { - Map.Entry entry = map.putReturningEntry(currentFieldNameInfo.name, valueXNode); + // We must NOT remove previous values because of potential unqualified value conflict (see MID-5326). + // TODO However, we should do something to deduplicate keys in maps - probably. (Current behavior is that their values are being merged.) + Map.Entry entry = map.putReturningEntry(currentFieldNameInfo.name, valueXNode, true); if (currentFieldNameInfo.explicitEmptyNamespace) { ctx.noNamespaceEntries.put(entry, null); } diff --git a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/MapXNodeImpl.java b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/MapXNodeImpl.java index d8bd92c236b..750054543e8 100644 --- a/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/MapXNodeImpl.java +++ b/infra/prism-impl/src/main/java/com/evolveum/midpoint/prism/impl/xnode/MapXNodeImpl.java @@ -91,8 +91,10 @@ public XNodeImpl put(QName key, XNodeImpl value) { return previous; } - public Entry putReturningEntry(QName key, XNodeImpl value) { - removeEntry(key); + public Entry putReturningEntry(QName key, XNodeImpl value, boolean doNotRemovePrevious) { + if (!doNotRemovePrevious) { + removeEntry(key); + } Entry e = new Entry(key, value); subnodes.add(e); return e; @@ -115,6 +117,7 @@ public void clear() { subnodes.clear(); } + @NotNull public Set keySet() { Set keySet = new HashSet<>(); for (Entry entry: subnodes) { @@ -123,6 +126,7 @@ public Set keySet() { return keySet; } + @NotNull public Collection values() { Collection values = new ArrayList<>(subnodes.size()); for (Entry entry: subnodes) { diff --git a/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java b/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java index c327d3605c4..d58f0d4dce1 100644 --- a/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java +++ b/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/PrismInternalTestUtil.java @@ -106,6 +106,8 @@ public class PrismInternalTestUtil implements PrismContextFactory { public static final String USER_WILL_FILE_BASENAME = "user-will"; public static final File USER_WILL_FILE = new File(COMMON_DIR_XML, "user-will.xml"); + public static final String ACCOUNT_BARBOSSA_FILE_BASENAME = "account-barbossa"; + public static final String USER_ELISABETH_FILE_BASENAME = "user-elisabeth"; public static final String RESOURCE_RUM_FILE_BASENAME = "resource-rum"; diff --git a/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/TestPrismParsing.java b/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/TestPrismParsing.java index 0a8b9e9d2e2..005565f173a 100644 --- a/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/TestPrismParsing.java +++ b/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/TestPrismParsing.java @@ -24,13 +24,19 @@ import java.io.File; import java.io.IOException; import java.math.BigInteger; +import java.util.Arrays; import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; import javax.xml.datatype.Duration; import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; +import com.evolveum.midpoint.prism.foo.AccountType; import com.evolveum.midpoint.prism.impl.PrismReferenceValueImpl; +import com.evolveum.midpoint.prism.path.ItemName; import com.evolveum.midpoint.prism.path.ItemPath; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; @@ -410,6 +416,37 @@ public void test500UserElisabethRoundTrip() throws Exception { } + // MID-5326 + @Test + public void test600AccountBarbossa() throws Exception { + final String TEST_NAME = "test600AccountBarbossa"; + PrismInternalTestUtil.displayTestTitle(TEST_NAME); + + // GIVEN + PrismContext prismContext = constructInitializedPrismContext(); + + // WHEN + PrismObject account = prismContext.parseObject(getFile(ACCOUNT_BARBOSSA_FILE_BASENAME)); + + // THEN + assertNotNull(account); + System.out.println("Account:"); + System.out.println(account.debugDump()); + + PrismContainer attributes = account.findContainer(AccountType.F_ATTRIBUTES); + assertNotNull(attributes); + PrismContainerValue attributesValue = attributes.getValue(); + assertNotNull(attributesValue); + assertEquals("Wrong # of attributes", 3, attributesValue.getItems().size()); + Set names = attributesValue.getItems().stream().map(a -> a.getElementName()).collect(Collectors.toSet()); + assertEquals("Wrong attribute names", new HashSet<>(Arrays.asList( + new ItemName("http://midpoint.evolveum.com/xml/ns/public/resource/instance/10000000-0000-0000-0000-000000000003", "uid"), + new ItemName("http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3", "uid"), + new ItemName("http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3", "name") + )), names); + } + + protected void assertUserAdhoc(PrismObject user, boolean expectRawInConstructions) throws SchemaException { user.checkConsistence(); assertUserJackContent(user, expectRawInConstructions, true); diff --git a/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/foo/AccountType.java b/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/foo/AccountType.java index 0c25838609a..2133b5c04ae 100644 --- a/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/foo/AccountType.java +++ b/infra/prism-impl/src/test/java/com/evolveum/midpoint/prism/foo/AccountType.java @@ -24,6 +24,8 @@ package com.evolveum.midpoint.prism.foo; +import com.evolveum.midpoint.prism.path.ItemName; + import java.io.Serializable; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -58,6 +60,7 @@ public class AccountType implements Serializable { + public final static ItemName F_ATTRIBUTES = new ItemName(NS_FOO, "attributes"); private final static long serialVersionUID = 201202081233L; protected AttributesType attributes; diff --git a/infra/prism-impl/src/test/resources/common/json/account-barbossa.json b/infra/prism-impl/src/test/resources/common/json/account-barbossa.json new file mode 100644 index 00000000000..a6d9654048f --- /dev/null +++ b/infra/prism-impl/src/test/resources/common/json/account-barbossa.json @@ -0,0 +1,13 @@ +{ + "@ns" : "http://midpoint.evolveum.com/xml/ns/test/foo-1.xsd", + "account" : { + "oid" : "94a0ee25-262f-4c49-ad5c-567418a5f5f3", + "name" : "hbarbossa", + "attributes" : { + "@ns" : "http://midpoint.evolveum.com/xml/ns/public/resource/instance/10000000-0000-0000-0000-000000000003", + "http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3#name" : "uid=hbarbossa,ou=people,dc=example,dc=com", + "uid" : "hbarbossa", + "http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3#uid" : "8daaeeae-f0c7-41c9-b258-2a3351aa8876" + } + } +} diff --git a/infra/prism-impl/src/test/resources/common/xml/account-barbossa.xml b/infra/prism-impl/src/test/resources/common/xml/account-barbossa.xml new file mode 100644 index 00000000000..47bf6e4eb3f --- /dev/null +++ b/infra/prism-impl/src/test/resources/common/xml/account-barbossa.xml @@ -0,0 +1,26 @@ + + + + hbarbossa + + uid=hbarbossa,ou=people,dc=example,dc=com + hbarbossa + 8daaeeae-f0c7-41c9-b258-2a3351aa8876 + + diff --git a/infra/prism-impl/src/test/resources/common/yaml/account-barbossa.yaml b/infra/prism-impl/src/test/resources/common/yaml/account-barbossa.yaml new file mode 100644 index 00000000000..78db9612251 --- /dev/null +++ b/infra/prism-impl/src/test/resources/common/yaml/account-barbossa.yaml @@ -0,0 +1,10 @@ +--- +'@ns': "http://midpoint.evolveum.com/xml/ns/test/foo-1.xsd" +account: + oid: "94a0ee25-262f-4c49-ad5c-567418a5f5f3" + name: "hbarbossa" + attributes: + '@ns': "http://midpoint.evolveum.com/xml/ns/public/connector/icf-1/resource-schema-3" + name: "uid=hbarbossa,ou=people,dc=example,dc=com" + http://midpoint.evolveum.com/xml/ns/public/resource/instance/10000000-0000-0000-0000-000000000003#uid: "hbarbossa" + uid: "8daaeeae-f0c7-41c9-b258-2a3351aa8876" diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/RelationTypes.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/RelationTypes.java index a9fba7c622b..76fcb8e2c48 100755 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/RelationTypes.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/constants/RelationTypes.java @@ -35,13 +35,13 @@ */ public enum RelationTypes { - MEMBER(SchemaConstants.ORG_DEFAULT, "", "fe fe-action-assign", RelationKindType.MEMBER, null, ADMINISTRATION, ORGANIZATION, SELF_SERVICE), - MANAGER(SchemaConstants.ORG_MANAGER, "Manager", "fe fe-manager-tie-object", RelationKindType.MANAGER, singletonList(RelationKindType.MEMBER), ADMINISTRATION, GOVERNANCE, ORGANIZATION, SELF_SERVICE), - META(SchemaConstants.ORG_META, "Meta", "", RelationKindType.META, null, POLICY), - DEPUTY(SchemaConstants.ORG_DEPUTY, "Deputy", "", RelationKindType.DELEGATION, null /* no values */), - APPROVER(SchemaConstants.ORG_APPROVER, "Approver", "fe fe-approver-object", RelationKindType.APPROVER, null, ADMINISTRATION, GOVERNANCE, ORGANIZATION, SELF_SERVICE), - OWNER(SchemaConstants.ORG_OWNER, "Owner", "fe fe-crown-object", RelationKindType.OWNER, null, ADMINISTRATION, GOVERNANCE, ORGANIZATION, SELF_SERVICE), - CONSENT(SchemaConstants.ORG_CONSENT, "Consent", "", RelationKindType.CONSENT, null, DATA_PROTECTION); + MEMBER(SchemaConstants.ORG_DEFAULT, "", "", "", RelationKindType.MEMBER, null, ADMINISTRATION, ORGANIZATION, SELF_SERVICE), + MANAGER(SchemaConstants.ORG_MANAGER, "Manager", "fe fe-manager-tie-object", "darkblue", RelationKindType.MANAGER, singletonList(RelationKindType.MEMBER), ADMINISTRATION, GOVERNANCE, ORGANIZATION, SELF_SERVICE), + META(SchemaConstants.ORG_META, "Meta", "", "", RelationKindType.META, null, POLICY), + DEPUTY(SchemaConstants.ORG_DEPUTY, "Deputy", "", "", RelationKindType.DELEGATION, null /* no values */), + APPROVER(SchemaConstants.ORG_APPROVER, "Approver", "fe fe-approver-object", "green", RelationKindType.APPROVER, null, ADMINISTRATION, GOVERNANCE, ORGANIZATION, SELF_SERVICE), + OWNER(SchemaConstants.ORG_OWNER, "Owner", "fe fe-crown-object", "darkorange", RelationKindType.OWNER, null, ADMINISTRATION, GOVERNANCE, ORGANIZATION, SELF_SERVICE), + CONSENT(SchemaConstants.ORG_CONSENT, "Consent", "", "", RelationKindType.CONSENT, null, DATA_PROTECTION); private final QName relation; private final String headerLabel; @@ -49,11 +49,13 @@ public enum RelationTypes { @NotNull private final Collection kinds; private final AreaCategoryType[] categories; private final String defaultIconStyle; + private final String defaultIconColor; - RelationTypes(QName relation, String headerLabel, String defaultIconStyle, RelationKindType defaultFor, Collection additionalKinds, AreaCategoryType... categories) { + RelationTypes(QName relation, String headerLabel, String defaultIconStyle, String defaultIconColor, RelationKindType defaultFor, Collection additionalKinds, AreaCategoryType... categories) { this.relation = relation; this.headerLabel = headerLabel; this.defaultIconStyle = defaultIconStyle; + this.defaultIconColor = defaultIconColor; this.kinds = new ArrayList<>(); if (defaultFor != null) { kinds.add(defaultFor); @@ -94,6 +96,10 @@ public String getDefaultIconStyle() { return defaultIconStyle; } + public String getDefaultIconColor() { + return defaultIconColor; + } + public static RelationTypes getRelationTypeByRelationValue(QName relation){ for (RelationTypes relationType : values()) { if (relationType.getRelation().equals(relation)) { diff --git a/infra/schema/src/main/java/com/evolveum/midpoint/schema/relation/RelationRegistryImpl.java b/infra/schema/src/main/java/com/evolveum/midpoint/schema/relation/RelationRegistryImpl.java index a95e60c9a23..e34d2797743 100644 --- a/infra/schema/src/main/java/com/evolveum/midpoint/schema/relation/RelationRegistryImpl.java +++ b/infra/schema/src/main/java/com/evolveum/midpoint/schema/relation/RelationRegistryImpl.java @@ -109,6 +109,9 @@ static RelationDefinitionType createRelationDefinitionFromStaticDefinition(Relat if (StringUtils.isNotEmpty(defaultRelationDefinition.getDefaultIconStyle())){ IconType icon = new IconType(); icon.setCssClass(defaultRelationDefinition.getDefaultIconStyle()); + if (StringUtils.isNotEmpty(defaultRelationDefinition.getDefaultIconColor())){ + icon.setColor(defaultRelationDefinition.getDefaultIconColor()); + } display.setIcon(icon); } relationDef.setDisplay(display); diff --git a/infra/util/src/main/java/com/evolveum/midpoint/util/QNameUtil.java b/infra/util/src/main/java/com/evolveum/midpoint/util/QNameUtil.java index 0792a8de06f..3cc7951d064 100644 --- a/infra/util/src/main/java/com/evolveum/midpoint/util/QNameUtil.java +++ b/infra/util/src/main/java/com/evolveum/midpoint/util/QNameUtil.java @@ -228,7 +228,7 @@ public static boolean match(QName a, QName b, boolean caseInsensitive) { } if (!caseInsensitive) { // traditional comparison - if (StringUtils.isBlank(a.getNamespaceURI()) || StringUtils.isBlank(b.getNamespaceURI())) { + if (StringUtils.isEmpty(a.getNamespaceURI()) || StringUtils.isEmpty(b.getNamespaceURI())) { return a.getLocalPart().equals(b.getLocalPart()); } else { return a.equals(b); @@ -238,7 +238,7 @@ public static boolean match(QName a, QName b, boolean caseInsensitive) { if (!a.getLocalPart().equalsIgnoreCase(b.getLocalPart())) { return false; } - if (StringUtils.isBlank(a.getNamespaceURI()) || StringUtils.isBlank(b.getNamespaceURI())) { + if (StringUtils.isEmpty(a.getNamespaceURI()) || StringUtils.isEmpty(b.getNamespaceURI())) { return true; } else { return a.getNamespaceURI().equals(b.getNamespaceURI()); @@ -307,7 +307,7 @@ public static QName nullNamespace(QName qname) { } public static boolean isUnqualified(QName name) { - return StringUtils.isBlank(name.getNamespaceURI()); + return StringUtils.isEmpty(name.getNamespaceURI()); } public static boolean isQualified(QName name) { diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SynchronizationServiceImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SynchronizationServiceImpl.java index 4bd3b6651ef..d640d03c287 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SynchronizationServiceImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/sync/SynchronizationServiceImpl.java @@ -28,6 +28,7 @@ import javax.xml.datatype.XMLGregorianCalendar; import javax.xml.namespace.QName; +import com.evolveum.midpoint.model.impl.lens.*; import com.evolveum.midpoint.prism.*; import com.evolveum.midpoint.prism.delta.*; import com.evolveum.midpoint.xml.ns._public.common.common_3.*; @@ -45,11 +46,6 @@ import com.evolveum.midpoint.model.common.SystemObjectCache; import com.evolveum.midpoint.model.impl.expr.ExpressionEnvironment; import com.evolveum.midpoint.model.impl.expr.ModelExpressionThreadLocalHolder; -import com.evolveum.midpoint.model.impl.lens.Clockwork; -import com.evolveum.midpoint.model.impl.lens.ContextFactory; -import com.evolveum.midpoint.model.impl.lens.LensContext; -import com.evolveum.midpoint.model.impl.lens.LensFocusContext; -import com.evolveum.midpoint.model.impl.lens.LensProjectionContext; import com.evolveum.midpoint.model.impl.util.ModelImplUtils; import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.provisioning.api.ResourceObjectShadowChangeDescription; @@ -109,7 +105,8 @@ public class SynchronizationServiceImpl implements SynchronizationService { @Autowired private SystemObjectCache systemObjectCache; @Autowired private PrismContext prismContext; @Autowired private Clock clock; - + @Autowired private ClockworkMedic clockworkMedic; + @Autowired @Qualifier("cacheRepositoryService") private RepositoryService repositoryService; @@ -794,10 +791,15 @@ private void reactToChange(SynchronizationContext syncC try { - if (change.isSimulate()) { - clockwork.previewChanges(lensContext, null, task, parentResult); - } else { - clockwork.run(lensContext, task, parentResult); + clockworkMedic.enterModelMethod(false); + try { + if (change.isSimulate()) { + clockwork.previewChanges(lensContext, null, task, parentResult); + } else { + clockwork.run(lensContext, task, parentResult); + } + } finally { + clockworkMedic.exitModelMethod(false); } } catch (ConfigurationException | ObjectNotFoundException | SchemaException | diff --git a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java index 8955b8fcf64..21840b2c39d 100644 --- a/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java +++ b/repo/repo-sql-impl-test/src/test/java/com/evolveum/midpoint/repo/sql/AddGetObjectTest.java @@ -313,7 +313,6 @@ public void addUserWithAssignmentExtension() throws Exception { @Test public void addGetFullAccount() throws Exception { LOGGER.info("===[ addGetFullAccount ]==="); - File file = new File(FOLDER_BASIC, "account-full.xml"); PrismObject fileAccount = prismContext.parseObject(new File(FOLDER_BASIC, "account-full.xml")); // apply appropriate schema diff --git a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java index 05aea375374..e711099c91c 100644 --- a/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java +++ b/repo/repo-sql-impl/src/main/java/com/evolveum/midpoint/repo/sql/query2/resolution/ItemPathResolver.java @@ -82,11 +82,13 @@ public HqlDataInstance resolveItemPath(ItemPath relativePath, ItemDefinition ite LOGGER.trace("Starting resolution and context update for item path '{}', singletonOnly='{}'", relativePath, singletonOnly); while (!currentState.isFinal()) { - LOGGER.trace("Current resolution state:\n{}", currentState.debugDumpNoParent()); + if (LOGGER.isTraceEnabled()) { + LOGGER.trace("Current resolution state:\n{}", currentState.debugDumpNoParent()); + } currentState = currentState.nextState(itemDefinition, singletonOnly, context.getPrismContext()); } - LOGGER.trace("resolveItemPath({}) ending in resolution state of:\n{}", relativePath, currentState.debugDump()); + LOGGER.trace("resolveItemPath({}) ending in resolution state of:\n{}", relativePath, currentState.debugDumpLazily()); return currentState.getHqlDataInstance(); }