package com.evolveum.midpoint.web.component; import com.evolveum.midpoint.gui.api.page.PageBase; import com.evolveum.midpoint.gui.api.util.WebComponentUtil; import com.evolveum.midpoint.prism.PrismPropertyValue; import com.evolveum.midpoint.web.component.prism.ValueStatus; import com.evolveum.midpoint.web.component.prism.ValueWrapper; import com.evolveum.midpoint.web.component.util.VisibleEnableBehaviour; import com.evolveum.midpoint.xml.ns._public.common.common_3.LockoutStatusType; import org.apache.wicket.Component; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.panel.Panel; import org.apache.wicket.model.IModel; /** * Created by honchar */ public class LockoutStatusPanel extends Panel { private static final String ID_CONTAINER = "container"; private static final String ID_LABEL = "label"; private static final String ID_BUTTON = "button"; private static final String ID_FEEDBACK = "feedback"; private boolean isInitialState = true; private LockoutStatusType initialValue; private ValueWrapper valueWrapper; public LockoutStatusPanel(String id){ this(id, null, null); } public LockoutStatusPanel(String id, ValueWrapper valueWrapper, IModel<LockoutStatusType> model){ super(id); initialValue = model.getObject(); this.valueWrapper = valueWrapper; initLayout(model); } private void initLayout(final IModel<LockoutStatusType> model){ WebMarkupContainer container = new WebMarkupContainer(ID_CONTAINER); add(container); Label label = new Label(ID_LABEL, new IModel<String>() { @Override public String getObject() { LockoutStatusType object = model != null ? model.getObject() : null; String labelValue = object == null ? ((PageBase)getPage()).createStringResource("LockoutStatusType.UNDEFINED").getString() : WebComponentUtil.createLocalizedModelForEnum(object, getLabel()).getObject(); if (!isInitialState){ labelValue += " " + ((PageBase) getPage()).createStringResource("LockoutStatusPanel.changesSaving").getString(); } return labelValue; } @Override public void setObject(String s) { } @Override public void detach() { } }); label.setOutputMarkupId(true); container.add(label); AjaxButton button = new AjaxButton(ID_BUTTON, getButtonModel()) { @Override public void onClick(AjaxRequestTarget ajaxRequestTarget) { PrismPropertyValue oldValue = (PrismPropertyValue)valueWrapper.getOldValue(); if (!isInitialState){ model.setObject(initialValue); oldValue.setValue(initialValue); valueWrapper.setStatus(ValueStatus.NOT_CHANGED); } else { model.setObject(LockoutStatusType.NORMAL); if (oldValue.getValue() != null) { oldValue.setValue(null); } } isInitialState = !isInitialState; ajaxRequestTarget.add(getButton()); ajaxRequestTarget.add(getLabel()); } }; button.add(new VisibleEnableBehaviour(){ @Override public boolean isVisible(){ return true; } }); button.setOutputMarkupId(true); container.add(button); } private IModel<String> getButtonModel(){ return new IModel<String>() { @Override public String getObject() { if (isInitialState){ return ((PageBase)getPage()).createStringResource("LockoutStatusPanel.unlockButtonLabel").getString(); } else { return ((PageBase)getPage()).createStringResource("LockoutStatusPanel.undoButtonLabel").getString(); } } @Override public void setObject(String s) { } @Override public void detach() { } }; } private Component getButton(){ return get(ID_CONTAINER).get(ID_BUTTON); } private Component getLabel(){ return get(ID_CONTAINER).get(ID_LABEL); } }