package com.evolveum.midpoint.gui.api.component.result;
import java.io.Serializable;
import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.ajax.markup.html.AjaxLink;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.feedback.FeedbackMessage;
import org.apache.wicket.markup.html.WebMarkupContainer;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.model.AbstractReadOnlyModel;
import org.apache.wicket.model.IModel;
import org.apache.wicket.model.PropertyModel;
import com.evolveum.midpoint.gui.api.component.BasePanel;
import com.evolveum.midpoint.util.logging.Trace;
import com.evolveum.midpoint.util.logging.TraceManager;
public class ValidationErrorPanel extends BasePanel<FeedbackMessage> {
private static final String ID_MESSAGE = "message";
static final String OPERATION_RESOURCE_KEY_PREFIX = "operation.";
private static final Trace LOGGER = TraceManager.getTrace(OperationResultPanel.class);
public ValidationErrorPanel(String id, IModel<FeedbackMessage> model) {
super(id, model);
initLayout();
}
public void initLayout() {
WebMarkupContainer detailsBox = new WebMarkupContainer("detailsBox");
detailsBox.setOutputMarkupId(true);
detailsBox.add(AttributeModifier.append("class", createHeaderCss()));
add(detailsBox);
initHeader(detailsBox);
}
private IModel<String> createHeaderCss() {
return new AbstractReadOnlyModel<String>() {
@Override
public String getObject() {
FeedbackMessage result = getModelObject();
if (result == null) {
return " box-warning";
}
switch (result.getLevel()) {
case FeedbackMessage.INFO:
case FeedbackMessage.DEBUG:
return " box-info";
case FeedbackMessage.SUCCESS:
return " box-success";
case FeedbackMessage.ERROR:
case FeedbackMessage.FATAL:
return " box-danger";
case FeedbackMessage.UNDEFINED:
case FeedbackMessage.WARNING: // TODO:
default:
return " box-warning";
}
}
};
}
private void initHeader(WebMarkupContainer box) {
WebMarkupContainer iconType = new WebMarkupContainer("iconType");
iconType.setOutputMarkupId(true);
iconType.add(new AttributeAppender("class", new AbstractReadOnlyModel() {
@Override
public Object getObject() {
FeedbackMessage result = getModelObject();
if (result == null) {
return " fa-info";
}
switch (result.getLevel()) {
case FeedbackMessage.INFO:
case FeedbackMessage.DEBUG:
return " fa-info";
case FeedbackMessage.SUCCESS:
return " fa-check";
case FeedbackMessage.ERROR:
case FeedbackMessage.FATAL:
return " fa-ban";
case FeedbackMessage.UNDEFINED:
case FeedbackMessage.WARNING: // TODO:
default:
return " fa-warning";
}
}
}));
box.add(iconType);
Label message = new Label(ID_MESSAGE, new PropertyModel<Serializable>(getModel(), "message"));
box.add(message);
AjaxLink close = new AjaxLink("close") {
private static final long serialVersionUID = 1L;
@Override
public void onClick(AjaxRequestTarget target) {
close(target);
}
};
box.add(close);
}
public void close(AjaxRequestTarget target){
this.setVisible(false);
target.add(this);
}
}