package fr.openwide.core.basicapp.web.application.console.notification.demo.page;
import org.apache.wicket.MarkupContainer;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.behavior.AttributeAppender;
import org.apache.wicket.markup.html.TransparentWebMarkupContainer;
import org.apache.wicket.markup.html.WebPage;
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 org.apache.wicket.model.ResourceModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.base.Throwables;
import fr.openwide.core.basicapp.core.business.user.model.User;
import fr.openwide.core.basicapp.web.application.BasicApplicationSession;
import fr.openwide.core.basicapp.web.application.common.form.UserAutocompleteAjaxComponent;
import fr.openwide.core.spring.notification.exception.NotificationContentRenderingException;
import fr.openwide.core.spring.notification.model.INotificationContentDescriptor;
import fr.openwide.core.wicket.more.AbstractCoreSession;
import fr.openwide.core.wicket.more.model.GenericEntityModel;
public class NotificationDemoPage extends WebPage {
private static final long serialVersionUID = -1929048481327622623L;
private static final Logger LOGGER = LoggerFactory.getLogger(NotificationDemoPage.class);
public NotificationDemoPage(final IModel<INotificationContentDescriptor> descriptorModel) throws NotificationContentRenderingException {
super();
MarkupContainer htmlRootElement = new TransparentWebMarkupContainer("htmlRootElement");
htmlRootElement.add(AttributeAppender.append("lang", AbstractCoreSession.get().getLocale().getLanguage()));
add(htmlRootElement);
add(new Label("headPageTitle", new ResourceModel("console.notifications")));
final IModel<User> recipientModel = new GenericEntityModel<>(BasicApplicationSession.get().getUser());
final IModel<INotificationContentDescriptor> descriptorWithContextModel =
new AbstractReadOnlyModel<INotificationContentDescriptor>() {
private static final long serialVersionUID = 1L;
@Override
public INotificationContentDescriptor getObject() {
return descriptorModel.getObject().withContext(recipientModel.getObject());
}
@Override
public void detach() {
super.detach();
descriptorModel.detach();
recipientModel.detach();
}
};
Form<?> form = new Form<>("form");
add(form);
UserAutocompleteAjaxComponent userSelector = new UserAutocompleteAjaxComponent("recipient", recipientModel) {
private static final long serialVersionUID = 1L;
@Override
protected void onUpdate(AjaxRequestTarget target) {
target.add(getPage());
}
};
userSelector.setAutoUpdate(true);
userSelector.setRequired(true);
form.add(
userSelector
);
IModel<String> subjectModel = new AbstractReadOnlyModel<String>() {
private static final long serialVersionUID = 1L;
@Override
public String getObject() {
try {
return descriptorWithContextModel.getObject().renderSubject();
} catch (NotificationContentRenderingException|RuntimeException e) {
LOGGER.error("Erreur lors du rendu du sujet", e);
return Throwables.getStackTraceAsString(e);
}
}
@Override
public void detach() {
super.detach();
descriptorWithContextModel.detach();
}
};
add(new Label("subject", subjectModel));
IModel<String> bodyModel = new AbstractReadOnlyModel<String>() {
private static final long serialVersionUID = 1L;
@Override
public String getObject() {
try {
return descriptorWithContextModel.getObject().renderHtmlBody();
} catch (NotificationContentRenderingException|RuntimeException e) {
LOGGER.error("Erreur lors du rendu du corps", e);
return "<pre>" + Throwables.getStackTraceAsString(e) + "</pre>";
}
}
@Override
public void detach() {
super.detach();
descriptorWithContextModel.detach();
}
};
add(
new Label("htmlPanel", bodyModel)
.setEscapeModelStrings(false)
);
}
}