Bonjour,
Donc voila mon soucis. J'ai une classe FacadeDao qui me sert d'interface entre ma couche Metier et ma couche Dao. J'aimerais que mon interface grâce a une classe Convertisseur puisse Transformer mes classe Metier en Classe Entity (pour le respect du modèle MVC).
Et la je me suis dit pourquoi ne pas faire quelque chose le plus générique possible :p (pas forcément ma meilleur idée :p).
Donc dans mon cas j'ai des documents qui peuvent être des livres , ou des cdRom ou pleins pleins d'autre chose. Le but étant de ne pas devoir retaper pleins de code a l'ajout d'une nouvelle classe dans ma hiérarchie.
Donc pour la classe FacadeDao cela donne :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| package dao.facade;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import dao.CrudDao;
import dao.entity.LivreEntity;
import metier.Livre;
@Singleton
@LocalBean
public class FacadeDao {
@EJB
CrudDao crudDao;
@EJB
Convertisseur convertisseur;
public void afficher() {
Livre document = new Livre("titre1", "pas peur", 2);
Livre testE2 = convertisseur.convert(document, LivreEntity.class);
}
} |
Pour la Convertisseur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| package dao.facade;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import dao.entity.LivreEntity;
import dao.utilitaire.FactoryDao;
@Singleton
@LocalBean
public class Convertisseur {
@EJB
FactoryDao factory;
public <T extends IDocumentConvertible> T convert(T aConvertir, Class<T> type) {
T resultat = null;
//if (LivreEntity.class == type) {
resultat = livreToEntity(aConvertir, type);
//}
return type.cast(resultat);
}
public <T extends IDocumentConvertible> T livreToEntity(T aConvertir, Class<T> type) {
LivreEntity entity = (LivreEntity) factory.makeDocumentEntity(type, aConvertir.getCote(),
aConvertir.getTitre(), aConvertir.getDescriptif(), aConvertir.getNbExemplaireDispo());
entity.setTitre(aConvertir.getTitre());
return type.cast(entity);
}
} |
pour la classe FactoryDao
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| package dao.utilitaire;
import javax.ejb.LocalBean;
import javax.ejb.Singleton;
import dao.entity.DocumentEntity;
import dao.entity.LivreEntity;
@Singleton
@LocalBean
public class FactoryDao {
public <T> T makeDocumentEntity(Class<T> type, int cote, String titre, String description, int nbExemplaire) {
if (LivreEntity.class == type) {
return type.cast(new LivreEntity(cote, titre, description, nbExemplaire));
}
if (DocumentEntity.class == type) {
return type.cast(new DocumentEntity());
}
return null;
}
} |
Les Classes Metier et Entity ne font rien de bien spécifique et IDocumentConvertible est une interface.
L'erreur que j'ai est au niveau de
Livre testE2 = convertisseur.livreToEntity(document, LivreEntity.class);
Il me dit que mes argument ne sont pas bon et que je ne peux envoyer un LivreEntity.class.
Si quelqu'un a un début de piste je serais vraiment preneur.
Merci d'avance
Alexandre
Partager