package com.evolveum.midpoint.web.page.self.component; import com.evolveum.midpoint.gui.api.GuiStyleConstants; import com.evolveum.midpoint.gui.api.component.BasePanel; import com.evolveum.midpoint.web.component.AjaxButton; import com.evolveum.midpoint.web.component.AjaxSubmitButton; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.web.page.self.dto.AssignmentConflictDto; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.behavior.AttributeAppender; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.form.Form; import org.apache.wicket.model.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import java.util.List; /** * Created by honchar. */ public class AssignmentConflictPanel extends BasePanel<AssignmentConflictDto> { private static final String ID_STATUS_ICON = "statusIcon"; private static final String ID_EXISTING_ASSIGNMENT = "existingAssignment"; private static final String ID_ADDED_ASSIGNMENT = "addedAssignment"; private static final String ID_UNSELECT_BUTTON = "unselectButton"; private static final String ID_REMOVE_BUTTON = "removeButton"; private static final String ID_PANEL_CONTAINER = "panelContainer"; private static final String STATUS_FIXED = GuiStyleConstants.CLASS_OP_RESULT_STATUS_ICON_SUCCESS_COLORED + " fa-lg"; private static final String STATUS_WARNING = GuiStyleConstants.CLASS_OP_RESULT_STATUS_ICON_WARNING_COLORED + " fa-lg"; private static final String STATUS_ERROR = GuiStyleConstants.CLASS_OP_RESULT_STATUS_ICON_FATAL_ERROR_COLORED + " fa-lg"; public AssignmentConflictPanel(String id, IModel<AssignmentConflictDto> model) { super(id, model); initLayout(); } private void initLayout() { setOutputMarkupId(true); Form container = new com.evolveum.midpoint.web.component.form.Form<>(ID_PANEL_CONTAINER); container.setOutputMarkupId(true); add(container); Label statusIconLabel = new Label(ID_STATUS_ICON); statusIconLabel.add(new AttributeAppender("class", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return getModelObject() != null ? (getModelObject().isSolved() ? STATUS_FIXED : (getModelObject().isError() ? STATUS_ERROR : STATUS_WARNING)) : STATUS_ERROR; } })); container.add(statusIconLabel); Label existingAssignment = new Label(ID_EXISTING_ASSIGNMENT, new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { if (getModelObject() != null) { String name = getModelObject().getExistingAssignmentTargetObj().asObjectable().getName() != null ? getModelObject().getExistingAssignmentTargetObj().asObjectable().getName().getOrig() : getModelObject().getExistingAssignmentTargetObj().getOid(); return name + " " + createStringResource("AssignmentConflictPanel.existingAssignmentLabelMessage").getString(); } return ""; } }); existingAssignment.add(new AttributeAppender("style", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return getModelObject() != null && getModelObject().isRemovedOld() ? "text-decoration: line-through;" : ""; } })); container.add(existingAssignment); Label addedAssignment = new Label(ID_ADDED_ASSIGNMENT, new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { if (getModelObject() != null) { String name = getModelObject().getAddedAssignmentTargetObj().asObjectable().getName() != null ? getModelObject().getAddedAssignmentTargetObj().asObjectable().getName().getOrig() : getModelObject().getAddedAssignmentTargetObj().getOid(); return name + " " + createStringResource("AssignmentConflictPanel.addedAssignmentLabelMessage").getString(); } return ""; } }); addedAssignment.add(new AttributeAppender("style", new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return getModelObject() != null && getModelObject().isUnassignedNew() ? "text-decoration: line-through;" : ""; } })); container.add(addedAssignment); AbstractReadOnlyModel<String> removeButtonTitleModel = new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return getModelObject().isRemovedOld() ? createStringResource("AssignmentConflictPanel.undoAction").getString() : createStringResource("AssignmentConflictPanel.removeButton").getString(); } }; AjaxSubmitButton removeButton = new AjaxSubmitButton(ID_REMOVE_BUTTON, removeButtonTitleModel) { @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { AssignmentConflictPanel.this.removeAssignmentPerformed(target); } }; removeButton.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return getModelObject() != null; } @Override public boolean isEnabled() { return !getModelObject().isUnassignedNew(); } }); container.add(removeButton); AbstractReadOnlyModel<String> unselectButtonTitleModel = new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { return getModelObject().isUnassignedNew() ? createStringResource("AssignmentConflictPanel.undoAction").getString() : createStringResource("AssignmentConflictPanel.unselectButton").getString(); } }; AjaxSubmitButton unselectButton = new AjaxSubmitButton(ID_UNSELECT_BUTTON, unselectButtonTitleModel) { @Override public void onSubmit(AjaxRequestTarget target, Form<?> form) { AssignmentConflictPanel.this.unselectAssignmentPerformed(target); } }; unselectButton.add(new VisibleEnableBehaviour() { private static final long serialVersionUID = 1L; @Override public boolean isVisible() { return getModelObject() != null; } @Override public boolean isEnabled() { return !getModelObject().isRemovedOld(); } }); container.add(unselectButton); } private void unselectAssignmentPerformed(AjaxRequestTarget target) { getModelObject().setUnassignedNew(!getModelObject().isUnassignedNew()); target.add(get(ID_PANEL_CONTAINER)); } private void removeAssignmentPerformed(AjaxRequestTarget target) { getModelObject().setRemovedOld(!getModelObject().isRemovedOld()); target.add(get(ID_PANEL_CONTAINER)); } }