package com.apps.services.impl;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import org.dozer.Mapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.apps.dao.IDAOMenu;
import com.apps.dao.IDAOProduit;
import com.apps.dao.IDAOProduitComposer;
import com.apps.dto.ProduitDTO;
import com.apps.entity.Menu;
import com.apps.entity.ProduitComposer;
import com.apps.entity.model.CategorieProduit;
import com.apps.services.IServiceProduit;
@Service
@Transactional
public class ServiceProduitImpl implements IServiceProduit {
@Autowired
private IDAOProduit produitDAO;
@Autowired
private IDAOMenu menuDAO;
@Autowired
private IDAOProduitComposer produitComposerDAO;
@Autowired
private Mapper mapper;
private static final Logger logger = Logger.getLogger(ServiceClientImpl.class);
@Override
public List<ProduitDTO> getAllProduit() {
logger.info("Service demande au dao la liste des produits lourde");
List<ProduitDTO> produitDTOs = new ArrayList<ProduitDTO>();
for (Menu menu : this.menuDAO.getAllMenu()) {
produitDTOs.add(mapper.map(menu, ProduitDTO.class));
}
for (ProduitComposer produitComposer : this.produitComposerDAO.getAll()) {
produitDTOs.add(mapper.map(produitComposer, ProduitDTO.class));
}
return produitDTOs;
}
@Override
public List<ProduitDTO> getAllMenu() {
logger.info("Service demande au dao la liste des produits lourde");
List<ProduitDTO> produitDTOs = new ArrayList<ProduitDTO>();
for (Menu menu : this.menuDAO.getAllMenu()) {
produitDTOs.add(mapper.map(menu, ProduitDTO.class));
}
return produitDTOs;
}
@Override
public List<ProduitDTO> getAllProduitComposer() {
logger.info("Service demande au dao la liste des produits lourde");
List<ProduitDTO> produitDTOs = new ArrayList<ProduitDTO>();
for (ProduitComposer produitComposer : this.produitComposerDAO.getAll()) {
produitDTOs.add(mapper.map(produitComposer, ProduitDTO.class));
}
return produitDTOs;
}
@Override
public List<ProduitDTO> getAllProduitLazy() {
logger.info("Service demande au dao la liste des produits lazy");
List<ProduitDTO> produitDTOs = new ArrayList<ProduitDTO>();
for (Menu menu : this.menuDAO.getAllMenu()) {
produitDTOs.add(mapper.map(menu, ProduitDTO.class, "menu_lazy"));
}
for (ProduitComposer produitComposer : this.produitComposerDAO.getAll()) {
produitDTOs.add(mapper.map(produitComposer, ProduitDTO.class, "produit_composer_lazy"));
}
return produitDTOs;
}
@Override
public void save(ProduitDTO produitDTO) {
logger.info("Service demande au dao de sauver le produit");
if (produitDTO.getCategorieProduit() == CategorieProduit.MENU) {
this.menuDAO.save(mapper.map(produitDTO, Menu.class));
} else if (produitDTO.getCategorieProduit() == CategorieProduit.PRODUIT_COMPOSER) {
this.produitComposerDAO.save(mapper.map(produitDTO, ProduitComposer.class));
}
}
@Override
public ProduitDTO getProduitByID(Long produitID) {
logger.info("Service demande au dao le produit par id");
return mapper.map(this.produitDAO.find(produitID), ProduitDTO.class);
}
@Override
public ProduitDTO getProduitByRef(String referenceProduit) {
logger.info("Service demande au dao le produit par ref");
return mapper.map(this.produitDAO.find(referenceProduit), ProduitDTO.class);
}
@Override
public void update(ProduitDTO produitDTO) {
logger.info("Service demande au dao de metre a jour le produit");
if (produitDTO.getCategorieProduit() == CategorieProduit.MENU) {
this.menuDAO.update(mapper.map(produitDTO, Menu.class));
} else if (produitDTO.getCategorieProduit() == CategorieProduit.PRODUIT_COMPOSER) {
this.produitComposerDAO.update(mapper.map(produitDTO, ProduitComposer.class));
}
}
@Override
public void remove(ProduitDTO produitDTO) {
logger.info("Service demande au dao de supprimer le produit");
if (produitDTO.getCategorieProduit() == CategorieProduit.MENU) {
this.menuDAO.remove(mapper.map(produitDTO, Menu.class));
} else if (produitDTO.getCategorieProduit() == CategorieProduit.PRODUIT_COMPOSER) {
this.produitComposerDAO.remove(mapper.map(produitDTO, ProduitComposer.class));
}
}
}
public static <R, S> void addForEach(List<S> sources, List<R> results, Mapper mapper, Class<R> classResult) { for (S source : sources) results.add(mapper.map(source, classResult)); } @Override public List<ProduitDTO> getAllProduit() { logger.info("Service demande au dao la liste des produits lourde"); List<ProduitDTO> produitDTOs = new ArrayList<ProduitDTO>(); addForEach(menuDAO.getAllMenu(), produitDTOs, mapper, ProduitDTO.class); addForEach(produitComposerDAO.getAll(), produitDTOs, mapper, ProduitDTO.class); return produitDTOs; }
4 nov. 2014 à 22:49
merci pour ta réponse,
ma classe Produit est une entity :
un Menu extends Produit
et un ProduitComposer
Actuellement j ai une table produit effectivement, mais les dépendances de type list avec leur @OneToMany... crée des tables de jointures
c'est bien la que je galère je modélise cela par des Class qui étendent produit, mais peut être que ce n'est pas la bonne chose a faire ???
J'ai n'est pas bien compris ce que tu veux dire, quand tu parle d'implémenter des méthodes a produit, quel méthode ?
peut tu me donné un exemple ?
peut être que mon explication de base est foireuse :-/ j'ai ajouter les Class afin que ce soit plus claire... peut-être.
Merci beaucoup, j ai déjà de quoi réfléchir avec ta première réponse.
4 nov. 2014 à 23:04
Remarque :
À quoi ça te sert de surcharger une méthode qui va faire la même chose que si tu ne l'avais pas surcharger ? Ça ne sert absolument à rien.
Modifié par KX le 4/11/2014 à 23:33
voila pour la table avec les données mais aussi mon git hub cela pourrait bien être plus simple :
https://github.com/seichan/CasaDiPaniniMavenMU.git
Table :
Produit sql :
http://www.hostingpics.net/viewer.php?id=163811produit.png
produit join ingredient sql :
produit join produit sql :
ingredient sql :
PS: pour la méthode toString() je l'ai simplement oublié mais je passerais mes Class au propre après avoir bien compris ce qui est utile dans ce type de contexte.
modifiction des lien... >_<"