From 6ae64fdf632d137d4b2b915f5995ad98559b175d Mon Sep 17 00:00:00 2001 From: kate Date: Fri, 4 Oct 2019 16:53:48 +0200 Subject: [PATCH] more work for linked-name panel --- .../impl/factory/ItemWrapperFactoryImpl.java | 2 +- .../factory/PrismReferenceWrapperFactory.java | 28 ++++++++++++++++- .../midpoint/gui/impl/prism/ItemPanel.java | 2 +- .../gui/impl/prism/PrismReferencePanel.java | 31 ++++++++++++++++--- 4 files changed, 56 insertions(+), 7 deletions(-) diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ItemWrapperFactoryImpl.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ItemWrapperFactoryImpl.java index 6f5b1f72b77..7162705114b 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ItemWrapperFactoryImpl.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/ItemWrapperFactoryImpl.java @@ -183,7 +183,7 @@ protected boolean canCreateWrapper(ItemDefinition def, ItemStatus status, Wra return true; } - private boolean determineReadOnly(IW itemWrapper, WrapperContext context) { + protected boolean determineReadOnly(IW itemWrapper, WrapperContext context) { Boolean readOnly = context.getReadOnly(); if (readOnly != null) { diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismReferenceWrapperFactory.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismReferenceWrapperFactory.java index 7f0e2191cb4..c2422b85f48 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismReferenceWrapperFactory.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/factory/PrismReferenceWrapperFactory.java @@ -8,6 +8,11 @@ import javax.annotation.PostConstruct; +import com.evolveum.midpoint.util.QNameUtil; +import com.evolveum.midpoint.util.logging.Trace; +import com.evolveum.midpoint.util.logging.TraceManager; +import com.evolveum.midpoint.xml.ns._public.common.common_3.CaseType; +import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectReferenceType; import org.springframework.stereotype.Component; import com.evolveum.midpoint.gui.api.prism.ItemStatus; @@ -34,6 +39,8 @@ @Component public class PrismReferenceWrapperFactory extends ItemWrapperFactoryImpl, PrismReferenceValue, PrismReference, PrismReferenceValueWrapperImpl>{ + private static final Trace LOGGER = TraceManager.getTrace(PrismReferenceWrapperFactory.class); + @Override public boolean match(ItemDefinition def) { return def instanceof PrismReferenceDefinition; @@ -73,7 +80,26 @@ public PrismReferenceValueWrapperImpl createValueWrapper(PrismReferenceWrappe PrismReferenceValueWrapperImpl refValue = new PrismReferenceValueWrapperImpl<>(parent, value, status); return refValue; } - + + @Override + protected boolean determineReadOnly(PrismReferenceWrapper itemWrapper, WrapperContext context) { + if (QNameUtil.match(CaseType.F_PARENT_REF, itemWrapper.getPath().asSingleName())){ + boolean isObjectReferenceType = false; + try { + isObjectReferenceType = itemWrapper.getValue() != null + && itemWrapper.getValue().getRealValue() instanceof ObjectReferenceType; + } catch (SchemaException e){ + LOGGER.warn("Unable to get single value from multi-value property, ", e.getLocalizedMessage()); + } + if (isObjectReferenceType) { + WrapperContext contextClone = context.clone(); + contextClone.setReadOnly(false); + return super.determineReadOnly(itemWrapper, contextClone); + } + } + return super.determineReadOnly(itemWrapper, context); + } + // @Override // protected boolean canCreateNewWrapper(ItemDefinition def) { // //TODO compare full path instead of def.getName(). The issue is, that another complex type can have targetRef or target specified and then diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ItemPanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ItemPanel.java index 722787e50f4..81a9caa09d6 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ItemPanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/ItemPanel.java @@ -273,7 +273,7 @@ private boolean isAddButtonVisible() { - private boolean isRemoveButtonVisible() { + protected boolean isRemoveButtonVisible() { return !getModelObject().isReadOnly(); } diff --git a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/PrismReferencePanel.java b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/PrismReferencePanel.java index f8ec811f822..81fb1eedc06 100644 --- a/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/PrismReferencePanel.java +++ b/gui/admin-gui/src/main/java/com/evolveum/midpoint/gui/impl/prism/PrismReferencePanel.java @@ -76,13 +76,13 @@ protected Component createValuePanel(ListItem> Panel panel = componentFactory.createPanel(panelCtx); item.add(panel); return panel; - } else if (getModelObject() != null && QNameUtil.match(CaseType.F_PARENT_REF, getModelObject().getPath().asSingleName())) { + } else if (isObjectNavigationPanel()) { FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK); feedback.setOutputMarkupId(true); item.add(feedback); - item.getModelObject().getParent().setReadOnly(false); - IconedObjectNamePanel iconedObjectNamePanel = - new IconedObjectNamePanel(ID_VALUE, (ObjectReferenceType) item.getModelObject().getRealValue()); + + IconedObjectNamePanel iconedObjectNamePanel = new IconedObjectNamePanel(ID_VALUE, + (ObjectReferenceType) item.getModelObject().getRealValue()); iconedObjectNamePanel.setOutputMarkupId(true); item.add(iconedObjectNamePanel); @@ -170,4 +170,27 @@ protected void addValue(AjaxRequestTarget target) { target.add(PrismReferencePanel.this); } + @Override + protected boolean isRemoveButtonVisible() { + if (isObjectNavigationPanel()){ + return false; + } else { + return super.isRemoveButtonVisible(); + } + } + + private boolean isObjectNavigationPanel(){ + if (getModelObject() != null && QNameUtil.match(CaseType.F_PARENT_REF, getModelObject().getPath().asSingleName())){ + boolean isObjectReferenceType = false; + try { + isObjectReferenceType = getModelObject().getValue() != null && + getModelObject().getValue().getRealValue() instanceof ObjectReferenceType; + } catch (SchemaException e){ + LOGGER.warn("Unable to get single value from multi-value property, ", e.getLocalizedMessage()); + } + return isObjectReferenceType; + } + return false; + } + }