Skip to content

Commit

Permalink
editability handler for prism panels, still not working on task page
Browse files Browse the repository at this point in the history
  • Loading branch information
KaterynaHonchar committed Feb 17, 2020
1 parent d946734 commit d1069ca
Show file tree
Hide file tree
Showing 12 changed files with 43 additions and 21 deletions.
Expand Up @@ -28,7 +28,8 @@ public PasswordPropertyPanel(String id, IModel<PrismPropertyWrapper<ProtectedStr
}

@Override
protected Component createValuePanel(ListItem<PrismPropertyValueWrapper<ProtectedStringType>> item, GuiComponentFactory factory, ItemVisibilityHandler visibilityHandler) {
protected Component createValuePanel(ListItem<PrismPropertyValueWrapper<ProtectedStringType>> item, GuiComponentFactory factory,
ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) {

PasswordPanel passwordPanel;
// if (!(getPageBase() instanceof PageUser)) {
Expand Down
Expand Up @@ -2772,9 +2772,10 @@ public <IW extends ItemWrapper> Panel initItemPanel(String panelId, QName typeNa
}
}

public <CVW extends PrismContainerValueWrapper<C>, C extends Containerable> Panel initContainerValuePanel(String id, IModel<CVW> model, ItemVisibilityHandler visibilityHandler) {
public <CVW extends PrismContainerValueWrapper<C>, C extends Containerable> Panel initContainerValuePanel(String id, IModel<CVW> model,
ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) {
//TODO find from registry first
return new PrismContainerValuePanel<>(id, model, visibilityHandler);
return new PrismContainerValuePanel<>(id, model, visibilityHandler, editabilityHandler);
}

public Clock getClock() {
Expand Down
Expand Up @@ -67,7 +67,7 @@ private Panel getBasicContainerValuePanel(String idPanel){
ItemPath itemPath = getModelObject().getPath();
IModel<PrismContainerValueWrapper<C>> model = getModel();
// model.getObject().getContainer().setShowOnTopLevel(true);
Panel containerValue = getPageBase().initContainerValuePanel(idPanel, getModel(), wrapper -> getBasicTabVisibity(wrapper, itemPath));
Panel containerValue = getPageBase().initContainerValuePanel(idPanel, getModel(), wrapper -> getBasicTabVisibity(wrapper, itemPath), null);
// PrismContainerValuePanel<C, PrismContainerValueWrapper<C>> containerValue = new PrismContainerValuePanel<>(idPanel, getModel());
return containerValue;
// return new ContainerValuePanel<C>(idPanel, getModel(), true, form,
Expand Down
Expand Up @@ -53,7 +53,7 @@ public abstract class ItemPanel<VW extends PrismValueWrapper, IW extends ItemWra
private static final String ID_REMOVE_BUTTON = "removeButton";
private static final String ID_BUTTON_CONTAINER = "buttonContainer";

private ItemPanelSettings itemPanelSettings;
protected ItemPanelSettings itemPanelSettings;


public ItemPanel(String id, IModel<IW> model, ItemPanelSettings itemPanelSettings) {
Expand Down Expand Up @@ -103,7 +103,7 @@ protected void populateItem(ListItem<VW> item) {
GuiComponentFactory componentFactory = getPageBase().getRegistry()
.findValuePanelFactory(ItemPanel.this.getModelObject());

Component panel = createValuePanel(item, componentFactory, getVisibilityHandler());
Component panel = createValuePanel(item, componentFactory, getVisibilityHandler(), getEditabilityHandler());
// panel.add(getEnableBehaviourOfValuePanel(ItemPanel.this.getModelObject()));
createButtons(item);
}
Expand All @@ -123,7 +123,8 @@ public boolean isEnabled() {

// VALUE REGION

protected abstract Component createValuePanel(ListItem<VW> item, GuiComponentFactory componentFactory, ItemVisibilityHandler visibilityHandler);
protected abstract Component createValuePanel(ListItem<VW> item, GuiComponentFactory componentFactory,
ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler);

protected void createButtons(ListItem<VW> item) {
WebMarkupContainer buttonContainer = new WebMarkupContainer(ID_BUTTON_CONTAINER);
Expand Down Expand Up @@ -281,11 +282,18 @@ private boolean isVisibleValue(IModel<VW> model) {
return !ValueStatus.DELETED.equals(value.getStatus());
}

public ItemVisibilityHandler getVisibilityHandler() {
if (itemPanelSettings == null) {
return null;
public ItemVisibilityHandler getVisibilityHandler() {
if (itemPanelSettings == null) {
return null;
}
return itemPanelSettings.getVisibilityHandler();
}

public ItemEditabilityHandler getEditabilityHandler() {
if (itemPanelSettings == null) {
return null;
}
return itemPanelSettings.getVisibilityHandler();
return itemPanelSettings.getEditabilityHandler();
}

protected boolean isShowOnTopLevel() {
Expand Down
Expand Up @@ -79,9 +79,11 @@ protected boolean getHeaderVisibility() {
}

@Override
protected Component createValuePanel(ListItem<PrismContainerValueWrapper<C>> item, GuiComponentFactory componentFactory, ItemVisibilityHandler visibilityHandler) {
protected Component createValuePanel(ListItem<PrismContainerValueWrapper<C>> item, GuiComponentFactory componentFactory,
ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) {
if (componentFactory == null) {
PrismContainerValuePanel<C, PrismContainerValueWrapper<C>> valuePanel = new PrismContainerValuePanel<C, PrismContainerValueWrapper<C>>("value", item.getModel(), getVisibilityHandler()) {
PrismContainerValuePanel<C, PrismContainerValueWrapper<C>> valuePanel = new PrismContainerValuePanel<C, PrismContainerValueWrapper<C>>("value", item.getModel(),
getVisibilityHandler(), getEditabilityHandler()) {

@Override
protected void removePerformed(PrismContainerValueWrapper containerValueWrapper, AjaxRequestTarget target) throws SchemaException {
Expand Down
Expand Up @@ -80,10 +80,12 @@ public class PrismContainerValuePanel<C extends Containerable, CVW extends Prism
private static final String ID_SHOW_EMPTY_BUTTON = "showEmptyButton";

private ItemVisibilityHandler visibilityHandler;
private ItemEditabilityHandler editabilityHandler;

public PrismContainerValuePanel(String id, IModel<CVW> model, ItemVisibilityHandler visibilityHandler) {
public PrismContainerValuePanel(String id, IModel<CVW> model, ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) {
super(id, model);
this.visibilityHandler = visibilityHandler;
this.editabilityHandler = editabilityHandler;
}

@Override
Expand Down Expand Up @@ -288,7 +290,7 @@ private <IW extends ItemWrapper<?,?,?,?>> void populateNonContainer(ListItem<IW>
typeName = new QName("ResourceAttributeDefinition");
}

ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(visibilityHandler);
ItemPanelSettingsBuilder builder = new ItemPanelSettingsBuilder().visibilityHandler(visibilityHandler).editabilityHandler(editabilityHandler);
Panel panel = getPageBase().initItemPanel("property", typeName, item.getModel(), builder.build());
panel.setOutputMarkupId(true);
panel.add(new VisibleEnableBehaviour() {
Expand Down
Expand Up @@ -47,7 +47,8 @@ private void initLayout() {

protected void createValuePanel(String panelId, IModel<PrismObjectValueWrapper<O>> valueModel) {

PrismContainerValuePanel<O, PrismObjectValueWrapper<O>> valueWrapper = new PrismContainerValuePanel<>(panelId, valueModel, settings.getVisibilityHandler());
PrismContainerValuePanel<O, PrismObjectValueWrapper<O>> valueWrapper = new PrismContainerValuePanel<>(panelId, valueModel,
settings.getVisibilityHandler(), settings.getEditabilityHandler());
valueWrapper.setOutputMarkupId(true);
add(valueWrapper);

Expand Down
Expand Up @@ -21,6 +21,7 @@
import com.evolveum.midpoint.util.logging.TraceManager;
import com.evolveum.midpoint.web.component.message.FeedbackAlerts;
import com.evolveum.midpoint.web.component.prism.InputPanel;
import com.evolveum.midpoint.web.component.util.EnableBehaviour;
import com.evolveum.midpoint.web.util.ExpressionValidator;
import com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType;
import org.apache.wicket.AttributeModifier;
Expand Down Expand Up @@ -73,7 +74,8 @@ protected Panel createHeaderPanel() {


@Override
protected Component createValuePanel(ListItem<PrismPropertyValueWrapper<T>> item, GuiComponentFactory factory, ItemVisibilityHandler visibilityHandler) {
protected Component createValuePanel(ListItem<PrismPropertyValueWrapper<T>> item, GuiComponentFactory factory,
ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) {

return createInputPanel(item, factory);

Expand Down Expand Up @@ -194,6 +196,8 @@ protected void onError(AjaxRequestTarget target, RuntimeException e) {
}

});
formComponent.add(new EnableBehaviour(() -> itemPanelSettings.getEditabilityHandler() == null ||
itemPanelSettings.getEditabilityHandler().isEditable(getModelObject())));
}


Expand Down
Expand Up @@ -60,7 +60,8 @@ protected Panel createHeaderPanel() {
}

@Override
protected Component createValuePanel(ListItem<PrismReferenceValueWrapperImpl<R>> item, GuiComponentFactory componentFactory, ItemVisibilityHandler visibilityHandler) {
protected Component createValuePanel(ListItem<PrismReferenceValueWrapperImpl<R>> item, GuiComponentFactory componentFactory,
ItemVisibilityHandler visibilityHandler, ItemEditabilityHandler editabilityHandler) {
FeedbackAlerts feedback = new FeedbackAlerts(ID_FEEDBACK);
feedback.setOutputMarkupId(true);
item.add(feedback);
Expand Down
Expand Up @@ -84,7 +84,8 @@ protected void removeExpressionValuePerformed(AjaxRequestTarget target){
}

@Override
protected Component createValuePanel(ListItem<PrismPropertyValueWrapper<ExpressionType>> item, GuiComponentFactory factory, ItemVisibilityHandler visibilityHandler) {
protected Component createValuePanel(ListItem<PrismPropertyValueWrapper<ExpressionType>> item, GuiComponentFactory factory, ItemVisibilityHandler visibilityHandler,
ItemEditabilityHandler editabilityHandler) {
ExpressionWrapper expressionWrapper = (ExpressionWrapper) getModelObject();
Component expressionPanel = null;
if (expressionWrapper != null && (expressionWrapper.isAssociationExpression() || expressionWrapper.isAttributeExpression())) {
Expand Down
Expand Up @@ -793,7 +793,7 @@ private ItemVisibility getBasicTabVisibity(ItemWrapper<?, ?, ?, ?> itemWrapper,
protected Panel getBasicContainerPanel(String idPanel, IModel<PrismContainerValueWrapper<AssignmentType>> model) {
ItemPath itemPath = getModelObject().getPath();
// model.getObject().getParent().setShowOnTopLevel(true);
return getPageBase().initContainerValuePanel(idPanel, model, itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath, model));
return getPageBase().initContainerValuePanel(idPanel, model, itemWrapper -> getBasicTabVisibity(itemWrapper, itemPath, model), null);
}

private QName getRelationForDisplayNamePanel(PrismContainerValueWrapper<AssignmentType> modelObject) {
Expand Down
@@ -1,6 +1,7 @@
package com.evolveum.midpoint.web.page.admin.server;

import com.evolveum.midpoint.gui.api.model.LoadableModel;
import com.evolveum.midpoint.gui.api.prism.ItemWrapper;
import com.evolveum.midpoint.gui.api.prism.PrismContainerWrapper;
import com.evolveum.midpoint.gui.api.prism.PrismObjectWrapper;
import com.evolveum.midpoint.gui.impl.prism.ItemEditabilityHandler;
Expand Down Expand Up @@ -483,7 +484,7 @@ private ItemVisibility getBasicTabVisibility(ItemPath path) {
private ItemEditabilityHandler getTaskEditabilityHandler(){
PrismObject<TaskType> task = getObjectWrapper().getObject();
TaskType taskType = task.asObjectable();
ItemEditabilityHandler editableHandler = wrapper -> isRunning(taskType);
ItemEditabilityHandler editableHandler = wrapper -> !isRunning(taskType);
return editableHandler;
}

Expand Down

0 comments on commit d1069ca

Please sign in to comment.