Java tutorial
package nc.noumea.mairie.appock.viewmodel; /*- * #%L * Logiciel de Gestion des approvisionnements et des stocks des fournitures administratives de la Mairie de Nouma * %% * Copyright (C) 2017 Mairie de Nouma, Nouvelle-Caldonie * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.zkoss.bind.annotation.*; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.select.Selectors; import org.zkoss.zk.ui.select.annotation.VariableResolver; import org.zkoss.zk.ui.select.annotation.WireVariable; import org.zkoss.zkplus.spring.DelegatingVariableResolver; import org.zkoss.zul.ListModelList; import org.zkoss.zul.Messagebox; import nc.noumea.mairie.appock.controller.MainController; import nc.noumea.mairie.appock.core.utility.AppockUtil; import nc.noumea.mairie.appock.core.viewmodel.AbstractViewModel; import nc.noumea.mairie.appock.entity.ArticlePanier; import nc.noumea.mairie.appock.entity.Demande; import nc.noumea.mairie.appock.entity.Panier; import nc.noumea.mairie.appock.repositories.ArticlePanierRepository; import nc.noumea.mairie.appock.repositories.PanierRepository; import nc.noumea.mairie.appock.services.CatalogueService; import nc.noumea.mairie.appock.services.DemandeService; import nc.noumea.mairie.appock.services.PanierService; import nc.noumea.mairie.appock.services.StockService; @VariableResolver(DelegatingVariableResolver.class) public class PanierViewModel extends AbstractViewModel<Panier> implements Serializable { private static final long serialVersionUID = 1L; @WireVariable CatalogueService catalogueService; @WireVariable PanierService panierService; @WireVariable PanierRepository panierRepository; @WireVariable ArticlePanierRepository articlePanierRepository; @WireVariable DemandeService demandeService; @WireVariable StockService stockService; private String texteRecherche; private ListModelList<ArticlePanier> listeArticlePanier; private ListModelList<ArticlePanier> selectedListeArticlePanier; public ListModelList<ArticlePanier> getListeArticlePanier() { return listeArticlePanier; } public void setListeArticlePanier(ListModelList<ArticlePanier> listeArticlePanier) { this.listeArticlePanier = listeArticlePanier; this.listeArticlePanier.setMultiple(true); } public ListModelList<ArticlePanier> getSelectedListeArticlePanier() { return selectedListeArticlePanier; } public void setSelectedListeArticlePanier(ListModelList<ArticlePanier> selectedListeArticlePanier) { this.selectedListeArticlePanier = selectedListeArticlePanier; } public String getTexteRecherche() { return texteRecherche; } public void setTexteRecherche(String texteRecherche) { this.texteRecherche = AppockUtil.majusculeSansAccentTrim(texteRecherche); } @AfterCompose public void afterCompose(@ContextParam(ContextType.VIEW) Component view) { Selectors.wireComponents(view, this, false); } @Init(superclass = true) public void init() { // Cration du panier du service s'il n'existe pas dj entity = panierService.findOrCreateByCurrentService(); List<ArticlePanier> listeArticlePanier = entity.getListeArticlePanier(); List<ArticlePanier> result = new ArrayList<>(); for (ArticlePanier articlePanier : listeArticlePanier) { if (StringUtils.isNotBlank(texteRecherche) && !articlePanier.getArticleCatalogue().getLibelle().contains(texteRecherche) && !articlePanier.getArticleCatalogue().getReference().contains(texteRecherche)) { continue; } catalogueService.initPhotoSrc(articlePanier.getArticleCatalogue()); stockService.initArticleQuantiteStockPourService(articlePanier, articlePanier.getPanier().getService()); result.add(articlePanier); } setListeArticlePanier(new ListModelList<>(result)); notifyChange("listeArticlePanier"); } @Command public void updateQuantite(@BindingParam("articlePanier") ArticlePanier articlePanier, @BindingParam("quantite") Integer quantite) { articlePanier = articlePanierRepository.findOne(articlePanier.getId()); articlePanier.setQuantite(quantite); saveLigneEtRefreshLigne(articlePanier, "Quantit mise jour"); } private void saveLigneEtRefreshLigne(ArticlePanier articlePanier, String messageNotification) { int i = 0; for (ArticlePanier articlePanierARemplacer : listeArticlePanier) { if (articlePanierARemplacer.equals(articlePanier)) { articlePanier = articlePanierRepository.save(articlePanier); catalogueService.initPhotoSrc(articlePanier.getArticleCatalogue()); listeArticlePanier.set(i, articlePanier); showNotificationStandard(messageNotification); break; } i++; } } @Command public void updateObservation(@BindingParam("articlePanier") ArticlePanier articlePanier, @BindingParam("observation") String observation) { articlePanier = articlePanierRepository.findOne(articlePanier.getId()); articlePanier.setObservation(observation); saveLigneEtRefreshLigne(articlePanier, "Observations mise jour"); } @Command public void removeFromPanier(@BindingParam("articlePanier") ArticlePanier articlePanier) { Messagebox.show("tes-vous sr de vouloir retirer cet article de votre panier ?", "Confirmation", new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.CANCEL }, Messagebox.QUESTION, evt -> { if (evt.getName().equals("onYes")) { entity = panierService.findOne(entity.getId()); entity.removeArticlePanier(articlePanier); panierRepository.save(entity); rechargeOnglet(entity, "/layout/panier.zul", MainController.TITRE_PANIER); showNotificationStandard("Article retir du panier"); } }); } @Command public void videPanier() { Messagebox.show("tes-vous sr de vouloir retirer tous les articles de votre panier ?", "Confirmation", new Messagebox.Button[] { Messagebox.Button.YES, Messagebox.Button.CANCEL }, Messagebox.QUESTION, evt -> { if (evt.getName().equals("onYes")) { panierService.videPanier(entity); rechargeOnglet(entity, "/layout/panier.zul", MainController.TITRE_PANIER); showNotificationStandard("Panier vid"); } }); } @Command public void creeDemandeApprovisionnement() { if (CollectionUtils.isEmpty(selectedListeArticlePanier)) { Messagebox.show( "Vous devez slectionner au moins un article dans le panier pour pouvoir crer une demande d'approvisionnement", "Cration refuse", Messagebox.OK, Messagebox.INFORMATION); return; } Demande demande = demandeService.creeDemandeFromListeArticlePanier(selectedListeArticlePanier); if (demande == null) { return; } for (ArticlePanier articlePanier : selectedListeArticlePanier) { entity.removeArticlePanier(articlePanier); } panierRepository.save(entity); rechargeOnglet(entity, "/layout/panier.zul", MainController.TITRE_PANIER); rechargeOngletListeDemande(); ouvreOnglet(demande, null); showNotificationStandard("Demande " + demande.getNumero() + " cr"); } @Command @NotifyChange("*") public void recherche() throws IOException { setListeArticlePanier(new ListModelList<>(new ArrayList())); setSelectedListeArticlePanier(null); init(); } @Command @NotifyChange("*") public void videRecherche() throws IOException { setTexteRecherche(null); this.recherche(); } }