Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/Evolveum/midpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Apr 14, 2020
2 parents 3fac323 + 914c8f9 commit 6cb6448
Show file tree
Hide file tree
Showing 5 changed files with 152 additions and 92 deletions.
Expand Up @@ -19,6 +19,7 @@

import com.evolveum.midpoint.web.page.admin.certification.*;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang3.ObjectUtils;
Expand Down Expand Up @@ -813,6 +814,7 @@ private void initHeaderLayout(WebMarkupContainer container) {
private void initTitleLayout(WebMarkupContainer mainHeader) {
WebMarkupContainer pageTitleContainer = new WebMarkupContainer(ID_PAGE_TITLE_CONTAINER);
pageTitleContainer.add(createUserStatusBehaviour(true));
pageTitleContainer.setOutputMarkupId(true);
mainHeader.add(pageTitleContainer);

WebMarkupContainer pageTitle = new WebMarkupContainer(ID_PAGE_TITLE);
Expand Down Expand Up @@ -1018,6 +1020,7 @@ public boolean isVisible() {
mainHeader.add(customLogo);

WebMarkupContainer navigation = new WebMarkupContainer(ID_NAVIGATION);
navigation.setOutputMarkupId(true);
mainHeader.add(navigation);


Expand Down Expand Up @@ -1289,31 +1292,12 @@ protected IModel<String> createPageTitleModel() {
return new IModel<String>() {
@Override
public String getObject() {
BaseMenuItem activeMenu = getActiveMenu();
String pageTitleKey = null;
List<SideBarMenuItem> sideMenuItems = getSideBarMenuPanel() != null && getSideBarMenuPanel().isVisible()
? getSideBarMenuPanel().getModelObject() : null;
if (sideMenuItems != null){
for (SideBarMenuItem sideBarMenuItem : sideMenuItems){
List<MainMenuItem> mainMenuItems = sideBarMenuItem.getItems();
if (mainMenuItems != null){
for (MainMenuItem mainMenuItem : mainMenuItems){
if (mainMenuItem.isMenuActive(PageBase.this)){
pageTitleKey = mainMenuItem.getNameModel().getObject();
break;
}
List<MenuItem> menuItems = mainMenuItem.getItems();
if (menuItems != null){
for (MenuItem menuItem : menuItems){
if (menuItem.isMenuActive(PageBase.this)){
pageTitleKey = menuItem.getNameModel().getObject();
break;
}
}
}
}
}
}
if (activeMenu != null) {
pageTitleKey = activeMenu.getNameModel().getObject();
}

if (StringUtils.isEmpty(pageTitleKey)) {
pageTitleKey = PageBase.this.getClass().getSimpleName() + ".title";
}
Expand All @@ -1322,6 +1306,67 @@ public String getObject() {
};
}

private <MI extends BaseMenuItem> MI getActiveMenu() {
SideBarMenuPanel sideBarMenu = getSideBarMenuPanel();
if (sideBarMenu == null || !sideBarMenu.isVisible()) {
return null;
}

List<SideBarMenuItem> sideMenuItems = sideBarMenu.getModelObject();
if (CollectionUtils.isEmpty(sideMenuItems)) {
return null;
}

MI activeMenu = null;
for (SideBarMenuItem sideBarMenuItem : sideMenuItems) {
List<MainMenuItem> mainMenuItems = sideBarMenuItem.getItems();
activeMenu = (MI) getActiveMenu(mainMenuItems);
if (activeMenu != null) {
return activeMenu;
}
}

return activeMenu;
}

private <MI extends BaseMenuItem> MI getActiveMenu(List<MI> mainMenuItems) {
if (CollectionUtils.isEmpty(mainMenuItems)) {
return null;
}
for (MI menuItem : mainMenuItems) {
if (menuItem.isMenuActive(PageBase.this)) {
return menuItem;
}

if (!(menuItem instanceof MainMenuItem)) {
continue;
}

List<MenuItem> menuItems = ((MainMenuItem) menuItem).getItems();
MI activeMenuItem = (MI) getActiveMenu(menuItems);
if (activeMenuItem != null) {
return activeMenuItem;
}
}
return null;
}


public void refreshTitle(AjaxRequestTarget target) {
target.add(getTitleContainer());

//TODO what about breadcrumbs and page title (header)?
//target.add(getHeaderTitle()); cannot update component with rendetBodyOnly
}

public WebMarkupContainer getTitleContainer() {
return (WebMarkupContainer) get(createComponentPath(ID_MAIN_HEADER, ID_NAVIGATION, ID_PAGE_TITLE_CONTAINER));
}

private Label getHeaderTitle() {
return (Label) get(ID_TITLE);
}

public IModel<String> getPageTitleModel() {
return (IModel) get(ID_TITLE).getDefaultModel();
}
Expand Down
Expand Up @@ -6,26 +6,22 @@
*/
package com.evolveum.midpoint.gui.impl.factory;

import javax.annotation.PostConstruct;
import javax.xml.namespace.QName;

import org.apache.wicket.markup.html.panel.Panel;
import org.springframework.stereotype.Component;

import com.evolveum.midpoint.gui.api.factory.AbstractGuiComponentFactory;
import com.evolveum.midpoint.gui.api.prism.ItemWrapper;
import com.evolveum.midpoint.gui.impl.model.RelationModel;
import com.evolveum.midpoint.gui.impl.validator.RelationValidator;
import com.evolveum.midpoint.prism.path.ItemPath;
import com.evolveum.midpoint.util.QNameUtil;
import com.evolveum.midpoint.web.component.input.TextPanel;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RelationDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RelationsDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.RoleManagementConfigurationType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.SystemConfigurationType;
import org.apache.commons.lang.StringUtils;
import org.apache.wicket.markup.html.panel.Panel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.xml.namespace.QName;

@Component
public class RelationPanelFactory extends AbstractGuiComponentFactory<QName> {
Expand All @@ -37,7 +33,7 @@ public void register() {

@Override
protected Panel getPanel(PrismPropertyPanelContext<QName> panelCtx) {
TextPanel relationPanel = new TextPanel<String>(panelCtx.getComponentId(), new RelationModel(panelCtx.getRealValueModel()));
TextPanel<String> relationPanel = new TextPanel<>(panelCtx.getComponentId(), new RelationModel(panelCtx.getRealValueModel()));
relationPanel.getBaseFormComponent().add(new RelationValidator());
return relationPanel;
}
Expand All @@ -52,26 +48,4 @@ public <IW extends ItemWrapper> boolean match(IW wrapper) {
public Integer getOrder() {
return 9999;
}


class RelationValidator implements IValidator<String> {


@Override
public void validate(IValidatable<String> validatable) {
String value = validatable.getValue();
if (StringUtils.isBlank(value)) {
return;
}

if (QNameUtil.isUri(value)) {
return;
}

ValidationError error = new ValidationError();
error.addKey("RelationPanel.relation.identifier.must.be.qname");
error.setMessage("Relation identifier must be in the form of URI.");
validatable.error(error);
}
}
}
@@ -0,0 +1,34 @@
/*
* Copyright (c) 2020 Evolveum and contributors
*
* This work is dual-licensed under the Apache License 2.0
* and European Union Public License. See LICENSE file for details.
*/
package com.evolveum.midpoint.gui.impl.validator;

import com.evolveum.midpoint.util.QNameUtil;

import org.apache.commons.lang.StringUtils;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;

public class RelationValidator implements IValidator<String> {

@Override
public void validate(IValidatable<String> validatable) {
String value = validatable.getValue();
if (StringUtils.isBlank(value)) {
return;
}

if (QNameUtil.isUri(value)) {
return;
}

ValidationError error = new ValidationError();
error.addKey("RelationPanel.relation.identifier.must.be.qname");
error.setMessage("Relation identifier must be in the form of URI.");
validatable.error(error);
}
}
Expand Up @@ -23,6 +23,7 @@ public class BaseMenuItem implements Serializable {

public static final String F_ICON_CLASS = "iconClass";

//TODO why model? would be string key enought
private IModel<String> nameModel;
private Class<? extends WebPage> pageClass;
private PageParameters params;
Expand Down
Expand Up @@ -50,7 +50,6 @@
import org.apache.wicket.markup.repeater.RepeatingView;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.Model;
import org.apache.wicket.model.StringResourceModel;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.apache.wicket.util.string.StringValue;
Expand Down Expand Up @@ -164,46 +163,52 @@ protected IModel<String> createPageTitleModel() {
if (PageAdminObjectDetails.this instanceof PageSystemConfiguration){
return super.createPageTitleModel();
}
String simpleName = getObjectSimpleName();
String lokalizedSimpleName = new StringResourceModel("ObjectType." + simpleName).setDefaultValue(simpleName).getString();
if (isAdd()) {
return createStringResource("PageAdminObjectDetails.title.new", lokalizedSimpleName);

return new IModel<String>() {
@Override
public String getObject() {
String localizedSimpleName = getLocalizedObjectType();
if (isAdd()) {
return createStringResource("PageAdminObjectDetails.title.new", localizedSimpleName).getString();
}

String name = null;
if (getObjectWrapper() != null && getObjectWrapper().getObject() != null) {
name = WebComponentUtil.getName(getObjectWrapper().getObject());
}

return createStringResource("PageAdminObjectDetails.title.edit.readonly.${readOnly}", getObjectModel(), localizedSimpleName, name).getString();
}
};

}

private String getLocalizedObjectType() {
String objectCollectionName = getObjectCollectionName();
if (objectCollectionName != null) {
return objectCollectionName;
}
return createStringResource("ObjectType." + getCompileTimeClass().getSimpleName()).getString();
}

String name = null;
if (getObjectWrapper() != null && getObjectWrapper().getObject() != null) {
name = WebComponentUtil.getName(getObjectWrapper().getObject());
private String getObjectCollectionName() {
if (getObjectWrapper() == null || getObjectWrapper().getObject() == null || !AssignmentHolderType.class.isAssignableFrom(getObjectWrapper().getObject().getCompileTimeClass())) {
return null;
}

return createStringResource("PageAdminObjectDetails.title.edit.readonly.${readOnly}", getObjectModel(), lokalizedSimpleName, name);
}
AssignmentHolderType assignmentHolderObj = (AssignmentHolderType) getObjectWrapper().getObject().asObjectable();
DisplayType displayType = WebComponentUtil.getArchetypePolicyDisplayType(assignmentHolderObj, PageAdminObjectDetails.this);
if (displayType == null || displayType.getLabel() == null) {
return null;
}

private String getObjectSimpleName(){
if (getObjectWrapper() != null && getObjectWrapper().getObject() != null
&& getObjectWrapper().getObject().asObjectable() instanceof AssignmentHolderType){
AssignmentHolderType assignmentHolderObj = (AssignmentHolderType) getObjectWrapper().getObject().asObjectable();
DisplayType displayType = WebComponentUtil
.getArchetypePolicyDisplayType(assignmentHolderObj, PageAdminObjectDetails.this);
if (displayType == null){
ObjectReferenceType archetypeReference = getObjectArchetypeRef();
if (archetypeReference != null){
OperationResult result = new OperationResult(OPERATION_LOAD_ARCHETYPE_REF);
Task task = createSimpleTask(OPERATION_LOAD_ARCHETYPE_REF);
PrismObject<ArchetypeType> archetypeObj = WebModelServiceUtils.resolveReferenceNoFetch(archetypeReference,
this, task, result);
displayType = archetypeObj != null && archetypeObj.asObjectable().getArchetypePolicy() != null ?
archetypeObj.asObjectable().getArchetypePolicy().getDisplay() : null;
}
}
if (displayType != null && displayType.getLabel() != null) {
String archetypeLocalizedName = getLocalizationService()
.translate(displayType.getLabel().toPolyString(), WebComponentUtil.getCurrentLocale(), true);
if (StringUtils.isNotEmpty(archetypeLocalizedName)) {
return archetypeLocalizedName;
}
}
String archetypeLocalizedName = getLocalizationService()
.translate(displayType.getLabel().toPolyString(), WebComponentUtil.getCurrentLocale(), true);
if (StringUtils.isNotEmpty(archetypeLocalizedName)) {
return archetypeLocalizedName;
}
return getCompileTimeClass().getSimpleName();

return null;
}

public boolean isAdd() {
Expand Down Expand Up @@ -413,6 +418,7 @@ public void refresh(AjaxRequestTarget target, boolean soft) {
target.add(getSummaryPanel());
target.add(getOperationalButtonsPanel());
target.add(getFeedbackPanel());
refreshTitle(target);

if (soft) {
for (Component component : getMainPanel().getTabbedPanel()) {
Expand Down

0 comments on commit 6cb6448

Please sign in to comment.