Skip to content

Commit

Permalink
more work for linked-name panel
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Oct 4, 2019
1 parent 7312f37 commit 6ae64fd
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 7 deletions.
Expand Up @@ -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) {
Expand Down
Expand Up @@ -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;
Expand All @@ -34,6 +39,8 @@
@Component
public class PrismReferenceWrapperFactory<R extends Referencable> extends ItemWrapperFactoryImpl<PrismReferenceWrapper<R>, PrismReferenceValue, PrismReference, PrismReferenceValueWrapperImpl<R>>{

private static final Trace LOGGER = TraceManager.getTrace(PrismReferenceWrapperFactory.class);

@Override
public boolean match(ItemDefinition<?> def) {
return def instanceof PrismReferenceDefinition;
Expand Down Expand Up @@ -73,7 +80,26 @@ public PrismReferenceValueWrapperImpl<R> createValueWrapper(PrismReferenceWrappe
PrismReferenceValueWrapperImpl<R> refValue = new PrismReferenceValueWrapperImpl<>(parent, value, status);
return refValue;
}


@Override
protected boolean determineReadOnly(PrismReferenceWrapper<R> 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
Expand Down
Expand Up @@ -273,7 +273,7 @@ private boolean isAddButtonVisible() {



private boolean isRemoveButtonVisible() {
protected boolean isRemoveButtonVisible() {
return !getModelObject().isReadOnly();

}
Expand Down
Expand Up @@ -76,13 +76,13 @@ protected Component createValuePanel(ListItem<PrismReferenceValueWrapperImpl<R>>
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);

Expand Down Expand Up @@ -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;
}

}

0 comments on commit 6ae64fd

Please sign in to comment.