Skip to content

Commit

Permalink
Merge branch 'master' into feature/mid-6913
Browse files Browse the repository at this point in the history
  • Loading branch information
mederly committed Aug 8, 2023
2 parents bd064de + af9fe9c commit fb05568
Show file tree
Hide file tree
Showing 65 changed files with 1,941 additions and 1,052 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

import com.evolveum.midpoint.gui.api.util.GuiDisplayTypeUtil;

import com.evolveum.midpoint.gui.api.util.ObjectTypeListUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.wicket.Component;
import org.apache.wicket.ajax.AjaxRequestTarget;
Expand Down Expand Up @@ -517,7 +518,7 @@ private List<ObjectTypes> mergeNewAssignmentTargetTypeLists(List<QName> allowedB
}

protected List<ObjectTypes> getObjectTypesList() {
return WebComponentUtil.createAssignableTypesList();
return ObjectTypeListUtil.createAssignableTypesList();
}

protected boolean isEntitlementAssignment() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package com.evolveum.midpoint.gui.api.component;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.ObjectTypeListUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.gui.impl.component.search.Search;
import com.evolveum.midpoint.prism.delta.ObjectDelta;
Expand All @@ -17,7 +18,7 @@
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RelationSearchItemConfigurationType;

import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
import org.apache.wicket.markup.html.WebMarkupContainer;
Expand Down Expand Up @@ -82,7 +83,7 @@ protected ObjectDelta prepareDelta(){
}

protected List<ObjectTypes> getSupportedTypesList(){
List<ObjectTypes> supportedTypes = WebComponentUtil.createAssignmentHolderTypesList();
List<ObjectTypes> supportedTypes = ObjectTypeListUtil.createAssignmentHolderTypesList();
supportedTypes.remove(ObjectTypes.USER);
supportedTypes.remove(ObjectTypes.ROLE);
supportedTypes.remove(ObjectTypes.SERVICE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import javax.xml.namespace.QName;

import com.evolveum.midpoint.authentication.api.util.AuthUtil;
import com.evolveum.midpoint.gui.api.util.ObjectTypeListUtil;
import com.evolveum.midpoint.schema.processor.ResourceObjectTypeDefinition;
import com.evolveum.midpoint.schema.processor.ResourceSchema;
import com.evolveum.midpoint.schema.processor.ResourceSchemaFactory;
Expand Down Expand Up @@ -551,7 +552,7 @@ private int getSelectedResourceCount() {
}

protected List<ObjectTypes> getObjectTypesList() {
return WebComponentUtil.createAssignableTypesList();
return ObjectTypeListUtil.createAssignableTypesList();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,15 @@
package com.evolveum.midpoint.gui.api.component.objecttypeselect;

import java.util.List;

import javax.xml.namespace.QName;

import org.apache.wicket.behavior.Behavior;
import org.apache.wicket.markup.html.form.DropDownChoice;
import org.apache.wicket.model.IModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.web.component.input.QNameChoiceRenderer;
import com.evolveum.midpoint.gui.api.util.ObjectTypeListUtil;
import com.evolveum.midpoint.web.component.input.QNameObjectTypeChoiceRenderer;
import com.evolveum.midpoint.xml.ns._public.common.common_3.AbstractRoleType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.FocusType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
Expand Down Expand Up @@ -45,17 +44,17 @@ private void initLayout(IModel<QName> model, final Class<O> superclass) {
@Override
public List<QName> getObject() {
if (superclass == null || superclass == ObjectType.class) {
return WebComponentUtil.createObjectTypeList();
return ObjectTypeListUtil.createObjectTypeList();
}
if (superclass == FocusType.class) {
return WebComponentUtil.createFocusTypeList();
return ObjectTypeListUtil.createFocusTypeList();
}
if (superclass == AbstractRoleType.class) {
return WebComponentUtil.createAbstractRoleTypeList();
return ObjectTypeListUtil.createAbstractRoleTypeList();
}
throw new IllegalArgumentException("Unknown superclass "+superclass);
}
}, new QNameChoiceRenderer());
}, new QNameObjectTypeChoiceRenderer());
select.setNullValid(true);

add(select);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,8 @@
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import javax.xml.namespace.QName;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.web.component.util.VisibleBehaviour;
import com.evolveum.midpoint.web.page.admin.configuration.component.EmptyOnBlurAjaxFormUpdatingBehaviour;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
import org.apache.wicket.behavior.AttributeAppender;
Expand All @@ -26,6 +22,8 @@
import org.apache.wicket.model.util.ListModel;

import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.util.ObjectTypeListUtil;
import com.evolveum.midpoint.gui.api.util.WebComponentUtil;
import com.evolveum.midpoint.prism.Definition;
import com.evolveum.midpoint.prism.ItemDefinition;
Expand All @@ -34,9 +32,11 @@
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.web.component.AjaxButton;
import com.evolveum.midpoint.web.component.input.DropDownChoicePanel;
import com.evolveum.midpoint.web.component.input.QNameChoiceRenderer;
import com.evolveum.midpoint.web.component.input.QNameObjectTypeChoiceRenderer;
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.ItemPathType;

public class ItemPathPanel extends BasePanel<ItemPathDto> {
Expand Down Expand Up @@ -193,7 +193,7 @@ public boolean isVisible() {

DropDownChoicePanel<QName> namespacePanel = new DropDownChoicePanel<>(ID_NAMESPACE,
new PropertyModel<>(getModel(), "objectType"),
new ListModel<>(WebComponentUtil.createObjectTypeList()), new QNameChoiceRenderer());
new ListModel<>(ObjectTypeListUtil.createObjectTypeList()), new QNameObjectTypeChoiceRenderer());
namespacePanel.getBaseFormComponent().add(new AjaxFormComponentUpdatingBehavior("change") {

private static final long serialVersionUID = 1L;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public void onClick(AjaxRequestTarget target) {
getPageBase().getPageParameters().remove(WizardModel.PARAM_STEP);
onExitPerformed(target);
}
};
Expand All @@ -95,6 +96,7 @@ public void onClick(AjaxRequestTarget target) {

@Override
public void onSubmit(AjaxRequestTarget target) {
getPageBase().getPageParameters().remove(WizardModel.PARAM_STEP);
onSubmitPerformed(target);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -956,7 +956,7 @@ public boolean isLogoLinkEnabled() {
return true;
}

protected String determineDataLanguage() {
public String determineDataLanguage() {
CompiledGuiProfile config = getCompiledGuiProfile();
if (config.getPreferredDataLanguage() != null) {
if (PrismContext.LANG_JSON.equals(config.getPreferredDataLanguage())) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
/*
* 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.schema.constants.ObjectTypes;
import com.evolveum.midpoint.web.security.MidPointApplication;
import com.evolveum.midpoint.web.util.ObjectTypeGuiDescriptor;

import com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;

import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.Validate;
import org.jetbrains.annotations.NotNull;

import javax.xml.namespace.QName;
import java.text.Collator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

import static com.evolveum.midpoint.gui.api.page.PageAdminLTE.createStringResourceStatic;

/**
* Util class for creating different list types, e.g. list of assignable object,
* list of searchable objects, list of object types, etc.
*/
public class ObjectTypeListUtil {

//TODO what about reference search?
public static List<QName> createSearchableTypeList() {
var supportedObjectTypeList = new ArrayList<>(ObjectTypeListUtil.createObjectTypeList());
supportedObjectTypeList.add(AssignmentType.COMPLEX_TYPE);
supportedObjectTypeList.add(CaseWorkItemType.COMPLEX_TYPE);
supportedObjectTypeList.add(AccessCertificationCaseType.COMPLEX_TYPE);
supportedObjectTypeList.add(AccessCertificationWorkItemType.COMPLEX_TYPE);
supportedObjectTypeList.add(OperationExecutionType.COMPLEX_TYPE);
supportedObjectTypeList.add(SimulationResultProcessedObjectType.COMPLEX_TYPE);
return supportedObjectTypeList;
}

// TODO: move to schema component
public static List<QName> createObjectTypeList() {
return createObjectTypesList().stream().map(ObjectTypes::getTypeQName).collect(Collectors.toList());

}

public static List<ObjectTypes> createObjectTypesList() {
List<ObjectTypes> types = Arrays.asList(ObjectTypes.values());

return types.stream().sorted((type1, type2) -> {
Validate.notNull(type1);
Validate.notNull(type2);

ObjectTypeGuiDescriptor decs1 = ObjectTypeGuiDescriptor.getDescriptor(type1);
ObjectTypeGuiDescriptor desc2 = ObjectTypeGuiDescriptor.getDescriptor(type2);

String localizedType1 = translate(decs1);
String localizedType2 = translate(desc2);

Collator collator = Collator.getInstance(WebComponentUtil.getCurrentLocale());
collator.setStrength(Collator.PRIMARY);

return collator.compare(localizedType1, localizedType2);

}).collect(Collectors.toList());
}

private static @NotNull String translate(ObjectTypeGuiDescriptor descriptor) {
MidPointApplication app = MidPointApplication.get();
String translatedValue = app.getLocalizationService().translate(descriptor.getLocalizationKey(), null, WebComponentUtil.getCurrentLocale());
return translatedValue != null ? translatedValue : descriptor.getLocalizationKey();
}

public static List<QName> createContainerableTypesQnameList() {
List<QName> qnameList = createObjectTypeList();
//todo create enum for containerable types?
qnameList.add(AuditEventRecordType.COMPLEX_TYPE);
qnameList.add(AccessCertificationCaseType.COMPLEX_TYPE);
qnameList.add(CaseWorkItemType.COMPLEX_TYPE);
return qnameList.stream().sorted((type1, type2) -> {
Validate.notNull(type1);
Validate.notNull(type2);

String key1 = "ObjectType." + type1.getLocalPart();
String localizedType1 = createStringResourceStatic(key1).getString();
if (StringUtils.isEmpty(localizedType1) || localizedType1.equals(key1)) {
localizedType1 = type1.getLocalPart();
}
String key2 = "ObjectType." + type2.getLocalPart();
String localizedType2 = createStringResourceStatic(key2).getString();
if (StringUtils.isEmpty(localizedType2) || localizedType1.equals(key2)) {
localizedType2 = type2.getLocalPart();
}

Collator collator = Collator.getInstance(WebComponentUtil.getCurrentLocale());
collator.setStrength(Collator.PRIMARY);

return collator.compare(localizedType1, localizedType2);

}).collect(Collectors.toList());
}

public static List<QName> createAssignmentHolderTypeQnamesList() {
List<ObjectTypes> objectTypes = createAssignmentHolderTypesList();
return objectTypes.stream().map(ObjectTypes::getTypeQName).collect(Collectors.toList());
}

public static List<ObjectTypes> createAssignmentHolderTypesList() {
return createObjectTypesList().stream().filter(type -> AssignmentHolderType.class.isAssignableFrom(type.getClassDefinition())).collect(Collectors.toList());
}

// TODO: move to schema component
public static List<QName> createFocusTypeList() {
return createFocusTypeList(false);
}

public static List<QName> createFocusTypeList(boolean includeAbstractType) {
List<QName> focusTypeList = new ArrayList<>();

focusTypeList.add(UserType.COMPLEX_TYPE);
focusTypeList.add(OrgType.COMPLEX_TYPE);
focusTypeList.add(RoleType.COMPLEX_TYPE);
focusTypeList.add(ServiceType.COMPLEX_TYPE);

if (includeAbstractType) {
focusTypeList.add(FocusType.COMPLEX_TYPE);
}

return focusTypeList;
}

// TODO: move to schema component
public static List<QName> createAbstractRoleTypeList() {
List<QName> focusTypeList = new ArrayList<>();

focusTypeList.add(AbstractRoleType.COMPLEX_TYPE);
focusTypeList.add(OrgType.COMPLEX_TYPE);
focusTypeList.add(RoleType.COMPLEX_TYPE);
focusTypeList.add(ServiceType.COMPLEX_TYPE);

return focusTypeList;
}

public static List<ObjectTypes> createAssignableTypesList() {
List<ObjectTypes> focusTypeList = new ArrayList<>();

focusTypeList.add(ObjectTypes.RESOURCE);
focusTypeList.add(ObjectTypes.ORG);
focusTypeList.add(ObjectTypes.ROLE);
focusTypeList.add(ObjectTypes.SERVICE);

return focusTypeList;
}
}

0 comments on commit fb05568

Please sign in to comment.