package fr.openwide.core.wicket.more.console.maintenance.task.component; import org.apache.wicket.RestartResponseException; import org.apache.wicket.Session; import org.apache.wicket.ajax.AjaxRequestTarget; import org.apache.wicket.ajax.markup.html.AjaxLink; 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.AbstractReadOnlyModel; import org.apache.wicket.model.IModel; import org.apache.wicket.model.Model; import org.apache.wicket.model.StringResourceModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.openwide.core.jpa.more.business.task.service.IQueuedTaskHolderManager; import fr.openwide.core.wicket.behavior.ClassAttributeAppender; import fr.openwide.core.wicket.markup.html.basic.CountLabel; import fr.openwide.core.wicket.more.console.maintenance.task.page.ConsoleMaintenanceTaskListPage; import fr.openwide.core.wicket.more.markup.html.feedback.FeedbackUtils; public class TaskManagerInformationPanel extends Panel { private static final long serialVersionUID = 6507651164801791278L; private static final Logger LOGGER = LoggerFactory.getLogger(TaskManagerInformationPanel.class); @SpringBean private IQueuedTaskHolderManager queuedTaskHolderManager; public TaskManagerInformationPanel(String id) { super(id); WebMarkupContainer statusContainer = new WebMarkupContainer("statusContainer"); add(statusContainer); statusContainer.add(new ClassAttributeAppender(new Model<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { if (queuedTaskHolderManager.isActive()) { return "alert-success"; } else { return "alert-danger"; } } })); IModel<String> queueStatusStringModel = new AbstractReadOnlyModel<String>() { private static final long serialVersionUID = 1L; @Override public String getObject() { if (queuedTaskHolderManager.isActive()) { return "active"; } else { return "inactive"; } } }; statusContainer.add(new Label("status", new StringResourceModel("console.maintenance.task.manager.status.${}") .setModel(queueStatusStringModel))); add(new CountLabel("queueSize", "console.maintenance.task.manager.queueSize", new Model<Integer>() { private static final long serialVersionUID = 1L; @Override public Integer getObject() { return queuedTaskHolderManager.getNumberOfWaitingTasks(); } })); add(new AjaxLink<Void>("stop") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(queuedTaskHolderManager.isActive()); } @Override public void onClick(AjaxRequestTarget target) { try { if (queuedTaskHolderManager.isAvailableForAction()) { queuedTaskHolderManager.stop(); getSession().success(getString("console.maintenance.task.manager.stop.success")); } else { getSession().error(getString("console.maintenance.task.manager.action.unavailable")); } FeedbackUtils.refreshFeedback(target, getPage()); throw new RestartResponseException(ConsoleMaintenanceTaskListPage.class); } catch (RestartResponseException e) { throw e; } catch (Exception e) { LOGGER.error("Unexpected error while trying to stop the task manager.", e); Session.get().error(getString("console.maintenance.task.manager.stop.error")); } FeedbackUtils.refreshFeedback(target, getPage()); } }); add(new AjaxLink<Void>("start") { private static final long serialVersionUID = 1L; @Override protected void onConfigure() { super.onConfigure(); setVisible(!queuedTaskHolderManager.isActive()); } @Override public void onClick(AjaxRequestTarget target) { try { if (queuedTaskHolderManager.isAvailableForAction()) { queuedTaskHolderManager.start(); getSession().success(getString("console.maintenance.task.manager.start.success")); } else { getSession().error(getString("console.maintenance.task.manager.action.unavailable")); } FeedbackUtils.refreshFeedback(target, getPage()); throw new RestartResponseException(ConsoleMaintenanceTaskListPage.class); } catch (RestartResponseException e) { throw e; } catch (Exception e) { LOGGER.error("Unexpected error while trying to start the task manager.", e); Session.get().error(getString("console.maintenance.task.manager.start.error")); } FeedbackUtils.refreshFeedback(target, getPage()); } }); } }