Author: echatellier Date: 2012-12-21 11:43:48 +0100 (Fri, 21 Dec 2012) New Revision: 39 Url: http://forge.codelutin.com/projects/cantharella/repository/revisions/39 Log: Ajout du bridge pour indexer manuellement les produits Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java Modified: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java 2012-12-21 09:33:28 UTC (rev 38) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/Produit.java 2012-12-21 10:43:48 UTC (rev 39) @@ -39,10 +39,12 @@ import javax.validation.constraints.NotNull; import nc.ird.cantharella.data.config.DataContext; +import nc.ird.cantharella.data.model.search.ProduitBridge; import nc.ird.cantharella.data.model.utils.AbstractModel; import org.apache.commons.beanutils.BeanComparator; import org.hibernate.search.annotations.Analyze; +import org.hibernate.search.annotations.ClassBridge; import org.hibernate.search.annotations.ContainedIn; import org.hibernate.search.annotations.Field; import org.hibernate.search.annotations.Index; @@ -56,6 +58,10 @@ */ @Entity @Inheritance(strategy = InheritanceType.JOINED) +@ClassBridge(name="produitBridge", + index=Index.YES, + store=Store.YES, + impl = ProduitBridge.class) public abstract class Produit extends AbstractModel implements Cloneable, Comparable<Produit> { /** Logger */ Added: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java =================================================================== --- trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java (rev 0) +++ trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java 2012-12-21 10:43:48 UTC (rev 39) @@ -0,0 +1,113 @@ +package nc.ird.cantharella.data.model.search; + +import nc.ird.cantharella.data.model.Extrait; +import nc.ird.cantharella.data.model.Fraction; +import nc.ird.cantharella.data.model.Produit; +import nc.ird.cantharella.data.model.ResultatTestBio; +import nc.ird.module.utils.LogTools; + +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.lucene.document.Document; +import org.apache.lucene.document.Field; +import org.hibernate.search.bridge.FieldBridge; +import org.hibernate.search.bridge.LuceneOptions; + +/** + * {@link ResultatTestBio} class contains a polymorphic entity that can't be + * properly indexed by hibernate search. + * + * @author echatellier + */ +public class ProduitBridge implements FieldBridge { + + /** Logger */ + private static final Log LOG = LogTools.getLog(); + + @Override + public void set(String name, Object value, Document document, + LuceneOptions luceneOptions) { + + Produit produit = (Produit) value; + if (LOG.isDebugEnabled()) { + LOG.debug("Custom indexing of Produit entity : " + produit); + } + + // commons information for all produit + document.add(new Field("ref", produit.getRef(), luceneOptions + .getStore(), luceneOptions.getIndex(), luceneOptions + .getTermVector())); + if (produit instanceof Extrait) { + if (LOG.isDebugEnabled()) { + LOG.debug("Custom indexing of Extrait entity"); + } + Extrait extrait = (Extrait) produit; + document.add(new Field("extraction.lot.ref", extrait + .getExtraction().getLot().getRef(), luceneOptions + .getStore(), luceneOptions.getIndex(), luceneOptions + .getTermVector())); + document.add(new Field("extraction.lot.specimen.embranchement", + extrait.getExtraction().getLot().getSpecimenRef() + .getEmbranchement(), luceneOptions.getStore(), + luceneOptions.getIndex(), luceneOptions.getTermVector())); + if (StringUtils.isNotBlank(extrait.getExtraction().getLot().getSpecimenRef().getFamille())) { + document.add(new Field("extraction.lot.specimen.famille", extrait + .getExtraction().getLot().getSpecimenRef().getFamille(), + luceneOptions.getStore(), luceneOptions.getIndex(), + luceneOptions.getTermVector())); + } + if (StringUtils.isNotBlank(extrait.getExtraction().getLot().getSpecimenRef().getGenre())) { + document.add(new Field("extraction.lot.specimen.genre", extrait + .getExtraction().getLot().getSpecimenRef().getGenre(), + luceneOptions.getStore(), luceneOptions.getIndex(), + luceneOptions.getTermVector())); + } + if (StringUtils.isNotBlank(extrait.getExtraction().getLot().getSpecimenRef().getEspece())) { + document.add(new Field("extraction.lot.specimen.expece", extrait + .getExtraction().getLot().getSpecimenRef().getEspece(), + luceneOptions.getStore(), luceneOptions.getIndex(), + luceneOptions.getTermVector())); + } + document.add(new Field("extraction.lot.campagne.nom", extrait + .getExtraction().getLot().getCampagne().getNom(), + luceneOptions.getStore(), luceneOptions.getIndex(), + luceneOptions.getTermVector())); + } else if (produit instanceof Fraction) { + if (LOG.isDebugEnabled()) { + LOG.debug("Custom indexing of Fraction entity"); + } + Fraction fraction = (Fraction) produit; + document.add(new Field("purification.lotSource.ref", fraction + .getPurification().getLotSource().getRef(), luceneOptions + .getStore(), luceneOptions.getIndex(), luceneOptions + .getTermVector())); + document.add(new Field( + "purification.lotSource.speciment.embranchement", fraction + .getPurification().getLotSource().getSpecimenRef() + .getEmbranchement(), luceneOptions.getStore(), + luceneOptions.getIndex(), luceneOptions.getTermVector())); + if (StringUtils.isNotBlank(fraction.getPurification().getLotSource().getSpecimenRef().getFamille())) { + document.add(new Field("purification.lotSource.speciment.famille", + fraction.getPurification().getLotSource().getSpecimenRef() + .getFamille(), luceneOptions.getStore(), + luceneOptions.getIndex(), luceneOptions.getTermVector())); + } + if (StringUtils.isNotBlank(fraction.getPurification().getLotSource().getSpecimenRef().getGenre())) { + document.add(new Field("purification.lotSource.speciment.genre", + fraction.getPurification().getLotSource().getSpecimenRef() + .getGenre(), luceneOptions.getStore(), + luceneOptions.getIndex(), luceneOptions.getTermVector())); + } + if (StringUtils.isNotBlank(fraction.getPurification().getLotSource().getSpecimenRef().getEspece())) { + document.add(new Field("purification.lotSource.speciment.expece", + fraction.getPurification().getLotSource().getSpecimenRef() + .getEspece(), luceneOptions.getStore(), + luceneOptions.getIndex(), luceneOptions.getTermVector())); + } + document.add(new Field("purification.lotSource.campagne.nom", + fraction.getPurification().getLotSource().getCampagne() + .getNom(), luceneOptions.getStore(), luceneOptions + .getIndex(), luceneOptions.getTermVector())); + } + } +} Property changes on: trunk/cantharella.data/src/main/java/nc/ird/cantharella/data/model/search/ProduitBridge.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL