From 61beea66ab4eeb6e43fd95ce3bab7268cb4d61b3 Mon Sep 17 00:00:00 2001 From: kate Date: Thu, 21 Mar 2019 18:52:32 +0100 Subject: [PATCH 1/3] poly string display value defining --- .../gui/api/util/WebComponentUtil.java | 37 +++++++++++++++++++ .../prism/PolyStringEditorPanel.java | 23 ++++++++---- 2 files changed, 52 insertions(+), 8 deletions(-) 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 78b6364701d..8a21fefe38b 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 @@ -87,6 +87,7 @@ import org.apache.commons.lang.time.DurationFormatUtils; import org.apache.commons.lang3.StringEscapeUtils; import org.apache.commons.validator.routines.checkdigit.VerhoeffCheckDigit; +import org.apache.logging.log4j.util.Strings; import org.apache.wicket.*; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior; @@ -3411,4 +3412,40 @@ public static void saveTask(PrismObject oldTask, OperationResult resul } result.recomputeStatus(); } + + public static String getDisplayPolyStringValue(PolyStringType polyString, PageBase pageBase){ + if (polyString == null){ + return null; + } + if ((polyString.getTranslation() == null || StringUtils.isEmpty(polyString.getTranslation().getKey())) && + (polyString.getLang() == null || polyString.getLang().getLang() == null || polyString.getLang().getLang().isEmpty())){ + return polyString.getOrig(); + } + if (polyString.getLang() != null && polyString.getLang().getLang() != null && !polyString.getLang().getLang().isEmpty()){ + //check if it's really selected by user or configured through sysconfig locale + String currentLocale = getCurrentLocale().getLanguage(); + for (String language : polyString.getLang().getLang().keySet()){ + if (currentLocale.equals(language)){ + return polyString.getLang().getLang().get(language); + } + } + } + + if (polyString.getTranslation() != null && Strings.isNotEmpty(polyString.getTranslation().getKey())){ + List argumentValues = new ArrayList<>(); + polyString.getTranslation().getArgument().forEach(argument -> { + String argumentValue = ""; + String translationValue = ""; + if (argument.getTranslation() != null){ + String argumentKey = argument.getTranslation().getKey(); + String valueByKey = StringUtils.isNotEmpty(argumentKey) ? pageBase.createStringResource(argumentKey).getString() : null; + translationValue = StringUtils.isNotEmpty(valueByKey) ? valueByKey : argument.getTranslation().getFallback(); + } + argumentValue = StringUtils.isNotEmpty(translationValue) ? translationValue : argument.getValue(); + argumentValues.add(argumentValue); + }); + return pageBase.createStringResource(polyString.getTranslation().getKey(), argumentValues.toArray()).getString(); + } + return polyString.getOrig(); + } } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java index c6399f533f7..30e1f97b32c 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java @@ -16,10 +16,12 @@ package com.evolveum.midpoint.web.component.prism; import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.input.TextPanel; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.prism.xml.ns._public.types_3.PolyStringLangType; import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationArgumentType; import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; import org.apache.wicket.ajax.AjaxRequestTarget; @@ -32,7 +34,10 @@ import org.apache.wicket.model.Model; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * Created by honchar @@ -79,18 +84,19 @@ private void initLayout(){ keyValue.setOutputMarkupId(true); fullDataContainer.add(keyValue); - ListView languagesContainer = - new ListView(ID_LANGUAGES_REPEATER, Model.ofList(getTranslationArgumentList())) { + Map languagesMap = getModelObject() != null && getModelObject().getLang() != null ? getModelObject().getLang().getLang() : new HashMap<>(); + List languagesList = new ArrayList<>(languagesMap.keySet()); + ListView languagesContainer = + new ListView(ID_LANGUAGES_REPEATER, Model.ofList(languagesList)) { private static final long serialVersionUID = 1L; @Override - protected void populateItem(ListItem listItem) { - Label languageName = new Label(ID_LANGUAGE_NAME, Model.of(listItem.getModelObject().getValue())); + protected void populateItem(ListItem listItem) { + Label languageName = new Label(ID_LANGUAGE_NAME, Model.of(listItem.getModelObject())); languageName.setOutputMarkupId(true); listItem.add(languageName); - //TODO what value do we need to display? - TextPanel translation = new TextPanel(ID_TRANSLATION, Model.of(listItem.getModelObject().getTranslation().toString())); + TextPanel translation = new TextPanel(ID_TRANSLATION, Model.of(languagesMap.get(listItem.getModelObject()))); translation.setOutputMarkupId(true); listItem.add(translation); @@ -118,11 +124,12 @@ public void onClick(AjaxRequestTarget target) { } private String getDefaultPolyStringValue(){ - return ""; + return WebComponentUtil.getDisplayPolyStringValue(getModelObject(), getPageBase()); } private String getKeyValue(){ - return ""; + return getModelObject() != null && getModelObject().getTranslation() != null ? + getModelObject().getTranslation().getKey() : ""; } private List getTranslationArgumentList(){ From 1009f78bbbac510306f380011008e9e0a4ba4882 Mon Sep 17 00:00:00 2001 From: kate Date: Fri, 22 Mar 2019 13:41:13 +0100 Subject: [PATCH 2/3] polystring panel improvements --- .../prism/PolyStringEditorPanel.html | 14 ++-- .../prism/PolyStringEditorPanel.java | 76 +++++++++++++++---- .../localization/Midpoint.properties | 3 +- 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.html b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.html index 1e9e5f347ae..d8adf6e63d5 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.html +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.html @@ -20,21 +20,25 @@
-
+
-
+
-
+
-
+
+
+ +
-
+
diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java index 30e1f97b32c..e240c48b99d 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/component/prism/PolyStringEditorPanel.java @@ -16,15 +16,20 @@ package com.evolveum.midpoint.web.component.prism; import com.evolveum.midpoint.gui.api.component.BasePanel; +import com.evolveum.midpoint.gui.api.model.LoadableModel; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; +import com.evolveum.midpoint.prism.polystring.PolyString; import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.input.TextPanel; import com.evolveum.midpoint.web.component.util.VisibleBehaviour; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; +import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour; import com.evolveum.prism.xml.ns._public.types_3.PolyStringLangType; import com.evolveum.prism.xml.ns._public.types_3.PolyStringTranslationArgumentType; import com.evolveum.prism.xml.ns._public.types_3.PolyStringType; +import org.apache.commons.lang.StringUtils; import org.apache.wicket.ajax.AjaxRequestTarget; +import org.apache.wicket.ajax.markup.html.AjaxLink; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; @@ -53,6 +58,7 @@ public class PolyStringEditorPanel extends BasePanel{ private static final String ID_LANGUAGE_NAME = "languageName"; private static final String ID_TRANSLATION = "translation"; private static final String ID_SHOW_HIDE_LANGUAGES = "showHideLanguages"; + private static final String ID_ADD_LANGUAGE_BUTTON = "addLanguageButton"; private boolean showFullData = false; @@ -62,12 +68,16 @@ public PolyStringEditorPanel(String id, IModel model){ @Override protected void onInitialize(){ + super.onInitialize(); initLayout(); } private void initLayout(){ + setOutputMarkupId(true); + TextPanel defaultValuePanel = new TextPanel(ID_DEFAULT_VALUE_PANEL, Model.of(getDefaultPolyStringValue())); defaultValuePanel.setOutputMarkupId(true); + defaultValuePanel.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); defaultValuePanel.add(new VisibleBehaviour(() -> !showFullData)); add(defaultValuePanel); @@ -77,26 +87,35 @@ private void initLayout(){ add(fullDataContainer); TextPanel origValue = new TextPanel(ID_ORIG_VALUE, Model.of(getDefaultPolyStringValue())); + origValue.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); origValue.setOutputMarkupId(true); fullDataContainer.add(origValue); TextPanel keyValue = new TextPanel(ID_KEY_VALUE, Model.of(getKeyValue())); + keyValue.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); keyValue.setOutputMarkupId(true); fullDataContainer.add(keyValue); Map languagesMap = getModelObject() != null && getModelObject().getLang() != null ? getModelObject().getLang().getLang() : new HashMap<>(); - List languagesList = new ArrayList<>(languagesMap.keySet()); ListView languagesContainer = - new ListView(ID_LANGUAGES_REPEATER, Model.ofList(languagesList)) { + new ListView(ID_LANGUAGES_REPEATER, getLanguagesListModel()) { private static final long serialVersionUID = 1L; @Override protected void populateItem(ListItem listItem) { - Label languageName = new Label(ID_LANGUAGE_NAME, Model.of(listItem.getModelObject())); - languageName.setOutputMarkupId(true); - listItem.add(languageName); + if (StringUtils.isEmpty(listItem.getModelObject())){ + TextPanel languageName = new TextPanel(ID_LANGUAGE_NAME, Model.of(listItem.getModelObject())); + languageName.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); + languageName.setOutputMarkupId(true); + listItem.add(languageName); + } else { + Label languageName = new Label(ID_LANGUAGE_NAME, Model.of(listItem.getModelObject())); + languageName.setOutputMarkupId(true); + listItem.add(languageName); + } TextPanel translation = new TextPanel(ID_TRANSLATION, Model.of(languagesMap.get(listItem.getModelObject()))); + translation.add(new EmptyOnBlurAjaxFormUpdatingBehaviour()); translation.setOutputMarkupId(true); listItem.add(translation); @@ -105,9 +124,25 @@ protected void populateItem(ListItem listItem) { languagesContainer.setOutputMarkupId(true); fullDataContainer.add(languagesContainer); + AjaxLink addLanguageButton = new AjaxLink(ID_ADD_LANGUAGE_BUTTON) { + private static final long serialVersionUID = 1L; - AjaxButton showHideLanguagesButton = new AjaxButton(ID_SHOW_HIDE_LANGUAGES, showFullData ? createStringResource("PolyStringEditorPanel.hideLanguages") : - createStringResource("PolyStringEditorPanel.showLanguages")) { + @Override + public void onClick(AjaxRequestTarget target) { + addNewLanguagePerformed(target); + } + }; + fullDataContainer.add(addLanguageButton); + + AjaxButton showHideLanguagesButton = new AjaxButton(ID_SHOW_HIDE_LANGUAGES, new LoadableModel() { + private static final long serialVersionUID = 1L; + + @Override + protected String load() { + return showFullData ? createStringResource("PolyStringEditorPanel.hideLanguages").getString() : + createStringResource("PolyStringEditorPanel.showLanguages").getString(); + } + }) { private static final long serialVersionUID = 1L; @@ -132,12 +167,27 @@ private String getKeyValue(){ getModelObject().getTranslation().getKey() : ""; } - private List getTranslationArgumentList(){ - if (getModel() == null || getModelObject() == null || getModelObject().getTranslation() == null || - getModelObject().getTranslation().getArgument() == null){ - return new ArrayList<>(); - } - return getModelObject().getTranslation().getArgument(); + private LoadableModel> getLanguagesListModel(){ + return new LoadableModel>() { + private static final long serialVersionUID = 1L; + + @Override + protected List load() { + Map languagesMap = getModelObject() != null && getModelObject().getLang() != null ? getModelObject().getLang().getLang() : new HashMap<>(); + return new ArrayList<>(languagesMap.keySet()); + } + }; } + private void addNewLanguagePerformed(AjaxRequestTarget target){ + if (getModelObject().getLang() == null){ + getModelObject().setLang(new PolyStringLangType()); + } + if (getModelObject().getLang().getLang() == null){ + getModelObject().getLang().setLang(new HashMap()); + } + getModelObject().getLang().getLang().put("", ""); + target.add(PolyStringEditorPanel.this); + + } } diff --git a/gui/admin-gui/src/main/resources/localization/Midpoint.properties b/gui/admin-gui/src/main/resources/localization/Midpoint.properties index e6c382ebda0..89beca01d1f 100755 --- a/gui/admin-gui/src/main/resources/localization/Midpoint.properties +++ b/gui/admin-gui/src/main/resources/localization/Midpoint.properties @@ -4382,4 +4382,5 @@ InternalsCountersPanel.threshold.reset.button=Reset PolyStringEditorPanel.defaultLabel=default PolyStringEditorPanel.keyLabel=key PolyStringEditorPanel.showLanguages=Show languages -PolyStringEditorPanel.hideLanguages=Hide languages \ No newline at end of file +PolyStringEditorPanel.hideLanguages=Hide languages +PolyStringEditorPanel.addLanguage=Add language \ No newline at end of file From d5987702278d94ba6f33145eac5008d483db6c20 Mon Sep 17 00:00:00 2001 From: kate Date: Mon, 25 Mar 2019 12:01:46 +0100 Subject: [PATCH 3/3] fix MID-3500 org member panely search --- .../gui/api/component/ObjectListPanel.java | 6 +++++- .../page/admin/roles/AbstractRoleMemberPanel.java | 15 ++++++++++++--- .../admin/users/component/OrgMemberPanel.java | 2 +- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java index b6ccf0fdeba..9a4189bdf72 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/api/component/ObjectListPanel.java @@ -258,7 +258,7 @@ protected List, String>> initCustomColumns() { columns.add(checkboxColumn); } - IColumn, String> iconColumn = (IColumn) ColumnUtils.createIconColumn(parentPage); + IColumn, String> iconColumn = createIconColumn(); columns.add(iconColumn); columns.addAll(getCustomColumnsTransformed(customColumns)); @@ -642,6 +642,10 @@ public StringResourceModel createStringResource(String resourceKey, Object... ob protected abstract IColumn, String> createCheckboxColumn(); + protected IColumn, String> createIconColumn(){ + return (IColumn) ColumnUtils.createIconColumn(parentPage); + } + protected abstract IColumn, String> createNameColumn(IModel columnNameModel, String itemPath); protected abstract List, String>> createColumns(); 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 8da3098405c..79cc4a31ebb 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 @@ -32,6 +32,7 @@ import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.util.exception.ConfigurationException; import com.evolveum.midpoint.web.component.MultifunctionalButton; +import com.evolveum.midpoint.web.component.data.column.ColumnUtils; import com.evolveum.midpoint.web.component.menu.cog.ButtonInlineMenuItem; import com.evolveum.midpoint.web.component.menu.cog.InlineMenuItemAction; import com.evolveum.midpoint.web.page.admin.configuration.component.HeaderMenuAction; @@ -191,9 +192,11 @@ private void initMemberTable(Form form) { form.add(memberContainer); PageBase pageBase = getPageBase(); + Class type = getMemberPanelStorage() != null && getMemberPanelStorage().getType() != null ? + getMemberPanelStorage().getType().getClassDefinition() : ObjectType.class; //TODO QName defines a relation value which will be used for new member creation MainObjectListPanel childrenListPanel = new MainObjectListPanel( - ID_MEMBER_TABLE, ObjectType.class, getTableId(getComplexTypeQName()), getSearchOptions(), pageBase) { + ID_MEMBER_TABLE, type, getTableId(getComplexTypeQName()), getSearchOptions(), pageBase) { private static final long serialVersionUID = 1L; @@ -267,6 +270,11 @@ protected DisplayType getDefaultObjectButtonDisplayType(){ return buttonsList; } + @Override + protected IColumn, String> createIconColumn(){ + return (IColumn) ColumnUtils.createIconColumn(pageBase); + } + @Override protected List, String>> createColumns() { return createMembersColumns(); @@ -279,7 +287,8 @@ protected List createInlineMenu() { @Override protected Search createSearch() { - return SearchFactory.createSearch(getDefaultObjectType(), pageBase); + return getMemberPanelStorage() != null && getMemberPanelStorage().getSearch() != null ? + getMemberPanelStorage().getSearch() : SearchFactory.createSearch(getDefaultObjectType(), pageBase); } @Override @@ -470,7 +479,7 @@ private List loadMemberRelationsList(){ return assignmentTargetRelations; } - protected void assignMembers(AjaxRequestTarget target, List availableRelationList) { + protected void assignMembers(AjaxRequestTarget target, List availableRelationList) { MemberOperationsHelper.assignMembers(getPageBase(), getModelObject(), target, availableRelationList); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java index bba7da3c2c3..d327eb89acc 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/web/page/admin/users/component/OrgMemberPanel.java @@ -98,7 +98,7 @@ protected SearchBoxScopeType getOrgSearchScope() { } @Override - protected void assignMembers(AjaxRequestTarget target, List availableRelationList) { + protected void assignMembers(AjaxRequestTarget target, List availableRelationList) { MemberOperationsHelper.assignOrgMembers(getPageBase(), getModelObject(), target, availableRelationList); }