Skip to content

Commit

Permalink
Merge branch 'master' of github.com:Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
1azyman committed Mar 25, 2019
2 parents fa0fbf2 + d598770 commit fe49d4c
Show file tree
Hide file tree
Showing 7 changed files with 142 additions and 30 deletions.
Expand Up @@ -258,7 +258,7 @@ protected List<IColumn<SelectableBean<O>, String>> initCustomColumns() {
columns.add(checkboxColumn);
}

IColumn<SelectableBean<O>, String> iconColumn = (IColumn) ColumnUtils.createIconColumn(parentPage);
IColumn<SelectableBean<O>, String> iconColumn = createIconColumn();
columns.add(iconColumn);

columns.addAll(getCustomColumnsTransformed(customColumns));
Expand Down Expand Up @@ -642,6 +642,10 @@ public StringResourceModel createStringResource(String resourceKey, Object... ob

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

protected IColumn<SelectableBean<O>, String> createIconColumn(){
return (IColumn) ColumnUtils.createIconColumn(parentPage);
}

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

protected abstract List<IColumn<SelectableBean<O>, String>> createColumns();
Expand Down
Expand Up @@ -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;
Expand Down Expand Up @@ -3411,4 +3412,40 @@ public static void saveTask(PrismObject<TaskType> 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<String> 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();
}
}
Expand Up @@ -20,21 +20,25 @@
<div class="row">
<div wicket:id="defaultValuePanel"/>
</div>
<div wicket:id="fullDataContainer">
<div class="row" wicket:id="fullDataContainer">
<div class="row">
<div class="col-md-4"><wicket:message key="PolyStringEditorPanel.defaultLabel" /></div>
<div class="col-md-3"><wicket:message key="PolyStringEditorPanel.defaultLabel" /></div>
<div class="col-md-8" wicket:id="origValue"/>
</div>
<div class="row">
<div class="col-md-4"><wicket:message key="PolyStringEditorPanel.keyLabel" /></div>
<div class="col-md-3"><wicket:message key="PolyStringEditorPanel.keyLabel" /></div>
<div class="col-md-8" wicket:id="keyValue"/>
</div>
<div wicket:id="languagesRepeater" class="row">
<div class="col-md-4" wicket:id="languageName" />
<div class="col-md-3" wicket:id="languageName" />
<div class="col-md-8" wicket:id="translation"/>
</div>
<div class="row">
<button wicket:id="addLanguageButton" wicket:message="title:PolyStringEditorPanel.addLanguage"
class="btn btn-box-tool pull-left" trigger="hover"><i class="fa fa-plus-circle"></i></button>
</div>
</div>
<div class="show-empty-button" wicket:id="showHideLanguages"/>
<div class="row show-empty-button" wicket:id="showHideLanguages"/>

</wicket:panel>
</html>
Expand Up @@ -16,13 +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;
Expand All @@ -32,7 +39,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
Expand All @@ -48,6 +58,7 @@ public class PolyStringEditorPanel extends BasePanel<PolyStringType>{
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;

Expand All @@ -57,12 +68,16 @@ public PolyStringEditorPanel(String id, IModel<PolyStringType> model){

@Override
protected void onInitialize(){
super.onInitialize();
initLayout();
}

private void initLayout(){
setOutputMarkupId(true);

TextPanel<String> defaultValuePanel = new TextPanel<String>(ID_DEFAULT_VALUE_PANEL, Model.of(getDefaultPolyStringValue()));
defaultValuePanel.setOutputMarkupId(true);
defaultValuePanel.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
defaultValuePanel.add(new VisibleBehaviour(() -> !showFullData));
add(defaultValuePanel);

Expand All @@ -72,25 +87,35 @@ private void initLayout(){
add(fullDataContainer);

TextPanel<String> origValue = new TextPanel<String>(ID_ORIG_VALUE, Model.of(getDefaultPolyStringValue()));
origValue.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
origValue.setOutputMarkupId(true);
fullDataContainer.add(origValue);

TextPanel<String> keyValue = new TextPanel<String>(ID_KEY_VALUE, Model.of(getKeyValue()));
keyValue.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
keyValue.setOutputMarkupId(true);
fullDataContainer.add(keyValue);

ListView<PolyStringTranslationArgumentType> languagesContainer =
new ListView<PolyStringTranslationArgumentType>(ID_LANGUAGES_REPEATER, Model.ofList(getTranslationArgumentList())) {
Map<String, String> languagesMap = getModelObject() != null && getModelObject().getLang() != null ? getModelObject().getLang().getLang() : new HashMap<>();
ListView<String> languagesContainer =
new ListView<String>(ID_LANGUAGES_REPEATER, getLanguagesListModel()) {
private static final long serialVersionUID = 1L;

@Override
protected void populateItem(ListItem<PolyStringTranslationArgumentType> listItem) {
Label languageName = new Label(ID_LANGUAGE_NAME, Model.of(listItem.getModelObject().getValue()));
languageName.setOutputMarkupId(true);
listItem.add(languageName);

//TODO what value do we need to display?
TextPanel<String> translation = new TextPanel<String>(ID_TRANSLATION, Model.of(listItem.getModelObject().getTranslation().toString()));
protected void populateItem(ListItem<String> listItem) {
if (StringUtils.isEmpty(listItem.getModelObject())){
TextPanel<String> languageName = new TextPanel<String>(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<String> translation = new TextPanel<String>(ID_TRANSLATION, Model.of(languagesMap.get(listItem.getModelObject())));
translation.add(new EmptyOnBlurAjaxFormUpdatingBehaviour());
translation.setOutputMarkupId(true);
listItem.add(translation);

Expand All @@ -99,9 +124,25 @@ protected void populateItem(ListItem<PolyStringTranslationArgumentType> 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<String>() {
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;

Expand All @@ -118,19 +159,35 @@ 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<PolyStringTranslationArgumentType> getTranslationArgumentList(){
if (getModel() == null || getModelObject() == null || getModelObject().getTranslation() == null ||
getModelObject().getTranslation().getArgument() == null){
return new ArrayList<>();
}
return getModelObject().getTranslation().getArgument();
private LoadableModel<List<String>> getLanguagesListModel(){
return new LoadableModel<List<String>>() {
private static final long serialVersionUID = 1L;

@Override
protected List<String> load() {
Map<String, String> 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<String, String>());
}
getModelObject().getLang().getLang().put("", "");
target.add(PolyStringEditorPanel.this);

}
}
Expand Up @@ -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;
Expand Down Expand Up @@ -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<ObjectType, QName> childrenListPanel = new MainObjectListPanel<ObjectType, QName>(
ID_MEMBER_TABLE, ObjectType.class, getTableId(getComplexTypeQName()), getSearchOptions(), pageBase) {
ID_MEMBER_TABLE, type, getTableId(getComplexTypeQName()), getSearchOptions(), pageBase) {

private static final long serialVersionUID = 1L;

Expand Down Expand Up @@ -267,6 +270,11 @@ protected DisplayType getDefaultObjectButtonDisplayType(){
return buttonsList;
}

@Override
protected IColumn<SelectableBean<ObjectType>, String> createIconColumn(){
return (IColumn) ColumnUtils.createIconColumn(pageBase);
}

@Override
protected List<IColumn<SelectableBean<ObjectType>, String>> createColumns() {
return createMembersColumns();
Expand All @@ -279,7 +287,8 @@ protected List<InlineMenuItem> createInlineMenu() {

@Override
protected Search createSearch() {
return SearchFactory.createSearch(getDefaultObjectType(), pageBase);
return getMemberPanelStorage() != null && getMemberPanelStorage().getSearch() != null ?
getMemberPanelStorage().getSearch() : SearchFactory.createSearch(getDefaultObjectType(), pageBase);
}

@Override
Expand Down Expand Up @@ -470,7 +479,7 @@ private List<AssignmentObjectRelation> loadMemberRelationsList(){
return assignmentTargetRelations;
}

protected <O extends ObjectType> void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList) {
protected void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList) {
MemberOperationsHelper.assignMembers(getPageBase(), getModelObject(), target, availableRelationList);
}

Expand Down
Expand Up @@ -98,7 +98,7 @@ protected SearchBoxScopeType getOrgSearchScope() {
}

@Override
protected <O extends ObjectType> void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList) {
protected void assignMembers(AjaxRequestTarget target, List<QName> availableRelationList) {
MemberOperationsHelper.assignOrgMembers(getPageBase(), getModelObject(), target, availableRelationList);
}

Expand Down
Expand Up @@ -4385,4 +4385,5 @@ InternalsCountersPanel.threshold.reset.button=Reset
PolyStringEditorPanel.defaultLabel=default
PolyStringEditorPanel.keyLabel=key
PolyStringEditorPanel.showLanguages=Show languages
PolyStringEditorPanel.hideLanguages=Hide languages
PolyStringEditorPanel.hideLanguages=Hide languages
PolyStringEditorPanel.addLanguage=Add language

0 comments on commit fe49d4c

Please sign in to comment.