package fr.openwide.core.showcase.web.application.portfolio.component; import java.util.Locale; import org.apache.wicket.MarkupContainer; import org.apache.wicket.markup.html.WebMarkupContainer; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.repeater.Item; import org.apache.wicket.markup.repeater.data.IDataProvider; import org.apache.wicket.model.IModel; import org.apache.wicket.spring.injection.annot.SpringBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import fr.openwide.core.jpa.exception.SecurityServiceException; import fr.openwide.core.jpa.exception.ServiceException; import fr.openwide.core.showcase.core.business.user.model.User; import fr.openwide.core.showcase.core.business.user.service.IUserService; import fr.openwide.core.showcase.core.util.binding.Bindings; import fr.openwide.core.showcase.web.application.portfolio.page.UserDescriptionPage; import fr.openwide.core.wicket.more.markup.html.bootstrap.label.component.BootstrapLabel; import fr.openwide.core.wicket.more.markup.html.bootstrap.label.model.BootstrapColor; import fr.openwide.core.wicket.more.markup.html.bootstrap.label.renderer.BootstrapRenderer; import fr.openwide.core.wicket.more.markup.html.bootstrap.label.renderer.BootstrapRendererInformation; import fr.openwide.core.wicket.more.markup.html.list.PageablePortfolioPanel; import fr.openwide.core.wicket.more.markup.html.template.js.jquery.plugins.multivaluedexpand.MultivaluedExpandBehavior; import fr.openwide.core.wicket.more.markup.repeater.collection.CollectionView; import fr.openwide.core.wicket.more.model.BindingModel; import fr.openwide.core.wicket.more.model.ReadOnlyModel; import fr.openwide.core.wicket.more.util.model.Models; public class UserPortfolioPanel extends PageablePortfolioPanel<User> { private static final long serialVersionUID = 6906542421342609922L; private static final Logger LOGGER = LoggerFactory.getLogger(UserPortfolioPanel.class); @SpringBean private IUserService userService; public UserPortfolioPanel(String id, IDataProvider<User> dataProvider, int itemsPerPage) { super(id, dataProvider, itemsPerPage, "user.portfolio.userCount"); setOutputMarkupId(true); } @Override protected void addItemColumns(Item<User> item, IModel<? extends User> userModel) { item.add(new Label("firstName", BindingModel.of(userModel, Bindings.user().firstName()))); item.add(new Label("lastName", BindingModel.of(userModel, Bindings.user().lastName()))); item.add(new Label("userName", BindingModel.of(userModel, Bindings.user().userName()))); item.add(new Label("email", BindingModel.of(userModel, Bindings.user().email()))); item.add(new BootstrapLabel<>("active", userModel, new BootstrapRenderer<User>() { private static final long serialVersionUID = 1L; @Override protected BootstrapRendererInformation doRender(User value, Locale locale) { return BootstrapRendererInformation.builder() .label(value.isActive() ? "active" : "inactive") .icon(value.isActive() ? "fa fa-fw fa-check" : "fa fa-fw fa-remove") .color(value.isActive() ? BootstrapColor.SUCCESS : BootstrapColor.DANGER) .build(); } })); // Multivalued expand sample: please note that the behavior could be used on a ".div" inside the "td" element, // if an other information should be displayed in the same cell, for example. item.add(new WebMarkupContainer("tagsContainer", userModel) .add( new CollectionView<String>( "tags", BindingModel.of(userModel, Bindings.user().tags()), Models.<String>serializableModelFactory() ) { private static final long serialVersionUID = 1L; @Override protected void populateItem(Item<String> tagItem) { tagItem.add(new Label("tag", tagItem.getModel())); } } ) .add(new MultivaluedExpandBehavior()) ); } @Override protected void doDeleteItem(IModel<? extends User> itemModel) throws ServiceException, SecurityServiceException { try { userService.delete(itemModel.getObject()); } catch (ServiceException e) { LOGGER.error("Erreur durant la suppression d'un utilisateur.", e); getSession().error(getString("common.error.unexpected")); } } @Override protected MarkupContainer getActionLink(String id, IModel<? extends User> userModel) { return UserDescriptionPage.linkDescriptor(ReadOnlyModel.of(userModel)).link(id); } @Override protected boolean isActionAvailable() { return true; } @Override protected boolean isDeleteAvailable() { return true; } @Override protected boolean isEditAvailable() { return false; } @Override protected boolean hasWritePermissionOn(IModel<? extends User> itemModel) { return true; } }