From hibernate-commits at lists.jboss.org Fri Nov 27 12:30:33 2009 Content-Type: multipart/mixed; boundary="===============1525628302840330939==" MIME-Version: 1.0 From: hibernate-commits at lists.jboss.org To: hibernate-commits at lists.jboss.org Subject: [hibernate-commits] Hibernate SVN: r18078 - in search/trunk/src: main/java/org/hibernate/search/cfg and 2 other directories. Date: Fri, 27 Nov 2009 12:30:32 -0500 Message-ID: <200911271730.nARHUWXL021741@svn01.web.mwc.hst.phx2.redhat.com> --===============1525628302840330939== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Author: epbernard Date: 2009-11-27 12:30:32 -0500 (Fri, 27 Nov 2009) New Revision: 18078 Modified: search/trunk/src/main/docbook/en-US/modules/mapping.xml search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMap= ping.java search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.ja= va search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMappin= g.java search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetadat= aProvider.java search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.j= ava search/trunk/src/test/java/org/hibernate/search/test/configuration/Progr= ammaticMappingTest.java Log: HSEARCH-411 fix various issues on programmatic API Modified: search/trunk/src/main/docbook/en-US/modules/mapping.xml =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/docbook/en-US/modules/mapping.xml 2009-11-27 16:5= 3:33 UTC (rev 18077) +++ search/trunk/src/main/docbook/en-US/modules/mapping.xml 2009-11-27 17:3= 0:32 UTC (rev 18078) @@ -1548,7 +1548,7 @@ SearchMapping object. This object is passed to Hibernate Search via a property set to the Configuration object. The property key is - hibernate.search.mapping_model. + hibernate.search.mapping_model. = SearchMapping mapping =3D new SearchMapping(); [...] @@ -1736,18 +1736,19 @@ =
- Defining fields for indexing + Defining full text filter definitions = - When defining fields for indexing using the programmatic API, = call - field() on the property(String - propertyName, ElementType elementType) method. From - field() you can specify the nam= e, - index, store, - bridge and analyzer - definitions. + The programmatic API provides easy mechanism for defining full + text filter definitions which is available via + @FullTextFilterDef and + @FullTextFilterDefs. Note that contrary to the + annotation equivalent, full text filter definitions are a global + construct and are not tied to an entity. The next example depicts the + creation of full text filter definition using the + fullTextFilterDef method. = - Indexing fields using programmatic API + Defining full text definition programmatically = SearchMapping mapping =3D new SearchMapping(); = @@ -1755,26 +1756,30 @@ .analyzerDef( "en", StandardTokenizerFactory.class ) .filter( LowerCaseFilterFactory.class ) .filter( EnglishPorterFilterFactory.class ) - .entity(Address.class).indexed() + .fullTextFilterDef("security", SecurityFilterF= actory.class) + .cache(FilterCacheModeType.INSTANCE_ONLY) + .entity(Address.class) + .indexed() .property("addressId", ElementType.METHOD) .documentId() .name("id") .property("street1", ElementType.METHOD) - .field() + .field() .analyzer("en") .store(Store.YES) - .index(Index.TOKENIZED) //no useful here as it's the defau= lt .field() .name("address_data") - .analyzer("en"); + .analyzer("en") + .store(Store.NO); = cfg.getProperties().put( "hibernate.search.mapping_model", mapping ); = - The above example of marking fields as indexable is equiva= lent - to defining fields using @Field as seen + The previous example can effectively been seen as annotati= ng + your entity with @FullTextFilterDef like below: - Indexing fields using annotation + Using annotation to define full text filter + definition = @Entity @Indexed @@ -1786,39 +1791,42 @@ @TokenFilterDef(factory =3D EnglishPorterFilterFactory.class) }) }) +(a)FullTextFilterDefs({ + @FullTextFilterDef(name =3D "security", impl =3D SecurityFilterFactory.cl= ass, cache =3D FilterCacheModeType.INSTANCE_ONLY) +}) public class Address { = @Id @GeneratedValue @DocumentId(name=3D"id") - private Long getAddressId() {...}; + pubblic Long getAddressId() {...}; = @Fields({ @Field(index=3DIndex.TOKENIZED, store=3DStore.YES, = analyzer=3D@Analyzer(definition=3D"en")), @Field(name=3D"address_data", analyzer=3D@Analyzer(definition=3D"en"= )) }) - public String getAddress1() {...} + public String getAddress1() {...}; = ...... + = } - -
=
- Defining full text filter definitions + Defining fields for indexing = - The programmatic API provides easy mechanism for defining full - text filter definitions which is available via - @FullTextFilterDef and - @FullTextFilterDefs. The next example depicts= the - creation of full text filter definition using the - fullTextFilterDef method. + When defining fields for indexing using the programmatic API, = call + field() on the property(String + propertyName, ElementType elementType) method. From + field() you can specify the nam= e, + index, store, + bridge and analyzer + definitions. = - Defining full text definition programmatically + Indexing fields using programmatic API = SearchMapping mapping =3D new SearchMapping(); = @@ -1826,29 +1834,26 @@ .analyzerDef( "en", StandardTokenizerFactory.class ) .filter( LowerCaseFilterFactory.class ) .filter( EnglishPorterFilterFactory.class ) - .entity(Address.class) - .indexed() - .fullTextFilterDef("security", SecurityFil= terFactory.class) - .cache(FilterCacheModeType.INSTANCE_ONLY) + .entity(Address.class).indexed() .property("addressId", ElementType.METHOD) .documentId() .name("id") .property("street1", ElementType.METHOD) - .field() + .field() .analyzer("en") .store(Store.YES) + .index(Index.TOKENIZED) //no useful here as it's the defau= lt .field() .name("address_data") - .analyzer("en") - .store(Store.NO); + .analyzer("en"); = cfg.getProperties().put( "hibernate.search.mapping_model", mapping ); = - The previous example can effectively been seen as annotati= ng - your entity with @FullTextFilterDef like below: + The above example of marking fields as indexable is equiva= lent + to defining fields using @Field as seen + below: - Using annotation to define full text filter - definition + Indexing fields using annotation = @Entity @Indexed @@ -1860,26 +1865,24 @@ @TokenFilterDef(factory =3D EnglishPorterFilterFactory.class) }) }) -(a)FullTextFilterDefs({ - @FullTextFilterDef(name =3D "security", impl =3D SecurityFilterFactory.cl= ass, cache =3D FilterCacheModeType.INSTANCE_ONLY) -}) public class Address { = @Id @GeneratedValue @DocumentId(name=3D"id") - pubblic Long getAddressId() {...}; + private Long getAddressId() {...}; = @Fields({ @Field(index=3DIndex.TOKENIZED, store=3DStore.YES, = analyzer=3D@Analyzer(definition=3D"en")), @Field(name=3D"address_data", analyzer=3D@Analyzer(definition=3D"en"= )) }) - public String getAddress1() {...}; + public String getAddress1() {...} = ...... - = } + +
= Modified: search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping= .java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java = 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/cfg/EntityMapping.java = 2009-11-27 17:30:32 UTC (rev 18078) @@ -70,7 +70,7 @@ = = public FullTextFilterDefMapping fullTextFilterDef(String name, Class i= mpl) { - return new FullTextFilterDefMapping(mapping, entity, name, impl); + return new FullTextFilterDefMapping(mapping,name, impl); } = public PropertyMapping property(String name, ElementType type) { Modified: search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilte= rDefMapping.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMa= pping.java 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/cfg/FullTextFilterDefMa= pping.java 2009-11-27 17:30:32 UTC (rev 18078) @@ -39,15 +39,13 @@ = private final SearchMapping mapping; private final Map fullTextFilterDef; - private final EntityDescriptor entity; = - public FullTextFilterDefMapping(SearchMapping mapping, EntityDescriptor e= ntity, String name, Class impl) { + public FullTextFilterDefMapping(SearchMapping mapping, String name, Class= impl) { this.mapping =3D mapping; - this.entity =3D entity; this.fullTextFilterDef =3Dnew HashMap(); this.fullTextFilterDef.put("name", name); this.fullTextFilterDef.put("impl", impl); - entity.addFulltextFilterDef(fullTextFilterDef); + mapping.addFulltextFilterDef(fullTextFilterDef); } = /** @@ -61,13 +59,9 @@ } = public FullTextFilterDefMapping fullTextFilterDef(String name, Class i= mpl) { - return new FullTextFilterDefMapping(mapping,entity,name, impl); + return new FullTextFilterDefMapping(mapping, name, impl); } = - public PropertyMapping property(String name, ElementType type) { - return new PropertyMapping(name, type, entity, mapping); - } - public AnalyzerDefMapping analyzerDef(String name, Class tokenizerFactory) { return new AnalyzerDefMapping(name, tokenizerFactory, mapping); } @@ -75,10 +69,4 @@ public EntityMapping entity(Class entityType) { return new EntityMapping(entityType, mapping); } - - public ProvidedIdMapping providedId() { - return new ProvidedIdMapping(mapping,entity); - } - - = } Modified: search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMappin= g.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java= 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/cfg/IndexedMapping.java= 2009-11-27 17:30:32 UTC (rev 18078) @@ -74,7 +74,7 @@ = = public FullTextFilterDefMapping fullTextFilterDef(String name, Class i= mpl) { - return new FullTextFilterDefMapping(mapping, entity, name, impl); + return new FullTextFilterDefMapping(mapping, name, impl); } = public PropertyMapping property(String name, ElementType type) { Modified: search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMap= ping.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.j= ava 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/cfg/ProvidedIdMapping.j= ava 2009-11-27 17:30:32 UTC (rev 18078) @@ -53,7 +53,7 @@ } = public FullTextFilterDefMapping fullTextFilterDef(String name, Class i= mpl) { - return new FullTextFilterDefMapping(searchMapping, entity, name, impl); + return new FullTextFilterDefMapping(searchMapping, name, impl); } = public PropertyMapping property(String name, ElementType type) { Modified: search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping= .java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java = 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/cfg/SearchMapping.java = 2009-11-27 17:30:32 UTC (rev 18078) @@ -38,12 +38,17 @@ */ public class SearchMapping { private Set> analyzerDefs =3D new HashSet>(); + private Set> fullTextFilterDefs =3D new HashSet>(); private Map, EntityDescriptor> entities =3D new HashMap= , EntityDescriptor>(); = public Set> getAnalyzerDefs() { return analyzerDefs; } = + public Set> getFullTextFilerDefs() { + return fullTextFilterDefs; + } + = public EntityDescriptor getEntityDescriptor(Class entityType) { return entities.get( entityType ); } @@ -51,18 +56,23 @@ public AnalyzerDefMapping analyzerDef(String name, Class tokenizerFactory) { return new AnalyzerDefMapping(name, tokenizerFactory, this); } - + = public EntityMapping entity(Class entityType) { return new EntityMapping(entityType, this); } + = + public FullTextFilterDefMapping fullTextFilterDef(String name, Class i= mpl) { + return new FullTextFilterDefMapping(this, name, impl ); + } = /** * eg @Containing(things=3D{@Thing(...), @Thing(...)} * Map addedThing =3D addElementToAnnotationArray(contain= ing, "things"); */ + static Map addElementToAnnotationArray(Map containingAnnotation, String attributeName) { - List> array =3D (List>) containi= ngAnnotation.get( attributeName ); + @SuppressWarnings("unchecked") List> array =3D (List= >) containingAnnotation.get( attributeName ); if ( array =3D=3D null) { array =3D new ArrayList>(); containingAnnotation.put( attributeName, array ); @@ -84,5 +94,9 @@ } return entity; } + + void addFulltextFilterDef(Map fullTextFilterDef) { + fullTextFilterDefs.add(fullTextFilterDef); + } = } Modified: search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDe= fMapping.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMappi= ng.java 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/cfg/TokenFilterDefMappi= ng.java 2009-11-27 17:30:32 UTC (rev 18078) @@ -69,4 +69,8 @@ return new AnalyzerDefMapping(name, tokenizerFactory, mapping); } = + public FullTextFilterDefMapping fullTextFilterDef(String name, Class i= mpl) { + return new FullTextFilterDefMapping(mapping, name, impl ); + } + } Modified: search/trunk/src/main/java/org/hibernate/search/impl/MappingModel= MetadataProvider.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetada= taProvider.java 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/impl/MappingModelMetada= taProvider.java 2009-11-27 17:30:32 UTC (rev 18078) @@ -101,10 +101,15 @@ new HashMap() : new HashMap(delegateDefaults); defaults.put( AnalyzerDefs.class, createAnalyzerDefArray() ); + if (!mapping.getFullTextFilerDefs().isEmpty()) { + defaults.put(FullTextFilterDefs.class, createFullTextFilterDefsForMapp= ing()); + } } return defaults; } = + = + public AnnotationReader getAnnotationReader(AnnotatedElement annotatedEle= ment) { AnnotationReader reader =3D cache.get(annotatedElement); if (reader =3D=3D null) { @@ -124,7 +129,36 @@ return defs; } = + private FullTextFilterDef[] createFullTextFilterDefsForMapping() { + Set> fullTextFilterDefs =3D mapping.getFullTextFiler= Defs(); + FullTextFilterDef[] filters =3D new FullTextFilterDef[fullTextFilterDefs= .size()]; + int index =3D 0; + for(Map filterDef : fullTextFilterDefs) { + filters[index] =3D createFullTextFilterDef(filterDef); + index++; + } + return filters; + } = + private static FullTextFilterDef createFullTextFilterDef(Map filterDef) { + AnnotationDescriptor fullTextFilterDefAnnotation =3D new AnnotationDescr= iptor( FullTextFilterDef.class ); + for (Entry entry : filterDef.entrySet()) { + fullTextFilterDefAnnotation.setValue(entry.getKey(), entry.getValue()); + } + = + return AnnotationFactory.create( fullTextFilterDefAnnotation ); + } + + private static FullTextFilterDef[] createFullTextFilterDefArray(Set> fullTextFilterDefs) { + FullTextFilterDef[] filters =3D new FullTextFilterDef[fullTextFilterDefs= .size()]; + int index =3D 0; + for(Map filterDef : fullTextFilterDefs) { + filters[index] =3D createFullTextFilterDef(filterDef); + index++; + } + return filters; + } + = private AnalyzerDef createAnalyzerDef(Map analyzerDef) { AnnotationDescriptor analyzerDefAnnotation =3D new AnnotationDescriptor(= AnalyzerDef.class ); for ( Map.Entry entry : analyzerDef.entrySet() ) { @@ -436,7 +470,7 @@ } if (entity.getFullTextFilterDefs().size() > 0) { AnnotationDescriptor fullTextFilterDefsAnnotation =3D new AnnotationDe= scriptor( FullTextFilterDefs.class ); - FullTextFilterDef[] fullTextFilterDefArray =3D createFullTextFilterDef= Array(entity); + FullTextFilterDef[] fullTextFilterDefArray =3D createFullTextFilterDef= Array(entity.getFullTextFilterDefs()); fullTextFilterDefsAnnotation.setValue("value", fullTextFilterDefArray); annotations.put( FullTextFilterDefs.class, AnnotationFactory.create( f= ullTextFilterDefsAnnotation ) ); } @@ -469,27 +503,6 @@ annotations.put( ProvidedId.class, AnnotationFactory.create( annotation= ) ); } = - = - private FullTextFilterDef[] createFullTextFilterDefArray(EntityDescripto= r entity) { - Set> fullTextFilterDefs =3D entity.getFullTextFilte= rDefs(); - FullTextFilterDef[] filters =3D new FullTextFilterDef[fullTextFilterDef= s.size()]; - int index =3D 0; - for(Map filterDef : fullTextFilterDefs) { - filters[index] =3D createFullTextFilterDef(filterDef); - index++; - } - return filters; - } - = - private FullTextFilterDef createFullTextFilterDef(Map fil= terDef) { - AnnotationDescriptor fullTextFilterDefAnnotation =3D new AnnotationDesc= riptor( FullTextFilterDef.class ); - for (Entry entry : filterDef.entrySet()) { - fullTextFilterDefAnnotation.setValue(entry.getKey(), entry.getValue()); - } - = - return AnnotationFactory.create( fullTextFilterDefAnnotation ); - } - = private void populateAnnotationArray() { annotationsArray =3D new Annotation[ annotations.size() ]; int index =3D 0; Modified: search/trunk/src/main/java/org/hibernate/search/impl/SearchFactor= yImpl.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.= java 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/main/java/org/hibernate/search/impl/SearchFactoryImpl.= java 2009-11-27 17:30:32 UTC (rev 18078) @@ -281,6 +281,20 @@ } } } + = + = + private void initProgrammaticallyDefinedFilterDef(ReflectionManager refle= ctionManager) { + @SuppressWarnings("unchecked") Map defaults =3D reflectionManager.getDef= aults(); + FullTextFilterDef[] filterDefs =3D (FullTextFilterDef[]) defaults.get(Fu= llTextFilterDefs.class); + if (filterDefs !=3D null && filterDefs.length !=3D 0) { + for (FullTextFilterDef defAnn : filterDefs) { + if ( filterDefinitions.containsKey( defAnn.name() ) ) { + throw new SearchException("Multiple definition of @FullTextFilterDef.= name=3D" + defAnn.name()); + } + bindFullTextFilterDef(defAnn); + } + } + } = private void bindFilterDef(FullTextFilterDef defAnn, XClass mappedXClass)= { if ( filterDefinitions.containsKey( defAnn.name() ) ) { @@ -290,6 +304,10 @@ ); } = + bindFullTextFilterDef(defAnn); + } + + private void bindFullTextFilterDef(FullTextFilterDef defAnn) { FilterDef filterDef =3D new FilterDef( defAnn ); if ( filterDef.getImpl().equals( ShardSensitiveOnlyFilter.class ) ) { //this is a placeholder don't process regularly @@ -463,6 +481,7 @@ DirectoryProviderFactory factory =3D new DirectoryProviderFactory(); = initProgrammaticAnalyzers(context, reflectionManager); + initProgrammaticallyDefinedFilterDef(reflectionManager); = while ( iter.hasNext() ) { Class mappedClass =3D iter.next(); Modified: search/trunk/src/test/java/org/hibernate/search/test/configuratio= n/ProgrammaticMappingTest.java =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --- search/trunk/src/test/java/org/hibernate/search/test/configuration/Prog= rammaticMappingTest.java 2009-11-27 16:53:33 UTC (rev 18077) +++ search/trunk/src/test/java/org/hibernate/search/test/configuration/Prog= rammaticMappingTest.java 2009-11-27 17:30:32 UTC (rev 18078) @@ -44,7 +44,6 @@ import org.apache.solr.analysis.NGramFilterFactory; import org.apache.solr.analysis.SnowballPorterFilterFactory; import org.apache.solr.analysis.StandardTokenizerFactory; -import org.hibernate.Session; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.search.FullTextQuery; @@ -54,12 +53,16 @@ import org.hibernate.search.annotations.Index; import org.hibernate.search.annotations.Resolution; import org.hibernate.search.annotations.Store; +import org.hibernate.search.backend.Work; +import org.hibernate.search.backend.WorkType; import org.hibernate.search.bridge.builtin.LongBridge; import org.hibernate.search.cfg.ConcatStringBridge; import org.hibernate.search.cfg.SearchMapping; +import org.hibernate.search.engine.SearchFactoryImplementor; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.test.SearchTestCase; import org.hibernate.search.test.analyzer.inheritance.ISOLatin1Analyzer; +import org.hibernate.search.test.id.providedId.ManualTransactionContext; = /** * @author Emmanuel Bernard @@ -320,6 +323,9 @@ = = public void testProvidedIdMapping() throws Exception{ + FullTextSession fullTextSession =3D Search.getFullTextSession( openSessi= on() ); + SearchFactoryImplementor sf =3D (SearchFactoryImplementor) fullTextSessi= on.getSearchFactory(); + = ProvidedIdEntry person1 =3D new ProvidedIdEntry(); person1.setName( "Big Goat" ); person1.setBlurb( "Eats grass" ); @@ -332,17 +338,18 @@ person3.setName( "Regular goat" ); person3.setBlurb( "Is anorexic" ); = - Session session =3D openSession(); - FullTextSession fullTextSession =3D Search.getFullTextSession( session ); - Transaction transaction =3D session.beginTransaction(); - session.persist( person1 ); - session.persist( person2 ); - session.persist( person3 ); + ManualTransactionContext tc =3D new ManualTransactionContext(); = - transaction.commit(); - session.clear(); + Work work =3D new Work( person1, 1, Wo= rkType.INDEX ); + sf.getWorker().performWork( work, tc ); + work =3D new Work( person2, 2, WorkType.INDEX ); + sf.getWorker().performWork( work, tc ); + Work work2 =3D new Work( person3, 3, W= orkType.INDEX ); + sf.getWorker().performWork( work2, tc ); = - transaction =3D fullTextSession.beginTransaction(); + tc.end(); + = + Transaction transaction =3D fullTextSession.beginTransaction(); = QueryParser parser =3D new QueryParser( "providedidentry.name", new Stan= dardAnalyzer() ); Query luceneQuery =3D parser.parse( "Goat" ); @@ -364,7 +371,7 @@ = = = - public void testFullTextFilterDef() throws Exception{ + public void testFullTextFilterDefAtMappingLevel() throws Exception{ FullTextSession s =3D Search.getFullTextSession( openSession() ); Transaction tx =3D s.beginTransaction(); = @@ -408,7 +415,6 @@ s.close(); } = - = public void testIndexEmbedded() throws Exception{ FullTextSession s =3D Search.getFullTextSession( openSession() ); Transaction tx =3D s.beginTransaction(); @@ -514,7 +520,8 @@ //cfg.setProperty( "hibernate.search.default.directory_provider", FSDire= ctoryProvider.class.getName() ); SearchMapping mapping =3D new SearchMapping(); = - mapping.analyzerDef( "ngram", StandardTokenizerFactory.class ) + mapping.fullTextFilterDef("security", SecurityFilterFactory.class).cache= (FilterCacheModeType.INSTANCE_ONLY) + .analyzerDef( "ngram", StandardTokenizerFactory.class ) .filter( LowerCaseFilterFactory.class ) .filter( NGramFilterFactory.class ) .param( "minGramSize", "3" ) @@ -525,10 +532,10 @@ .analyzerDef( "de", StandardTokenizerFactory.class ) .filter( LowerCaseFilterFactory.class ) .filter( GermanStemFilterFactory.class ) - .entity( Address.class ).indexed() + .entity( Address.class ) + .indexed() .similarity( DefaultSimilarity.class ) .boost( 2 ) - .fullTextFilterDef("security", SecurityFilterFactory.class).cache(Fil= terCacheModeType.INSTANCE_ONLY) .property( "addressId", ElementType.FIELD ).documentId().name( "id" ) .property("lastUpdated", ElementType.FIELD) .field().name("last-updated") --===============1525628302840330939==--