Package org.hibernate.search.engine

Examples of org.hibernate.search.engine.FilterDef


  private void buildFilters() {
    SearchFactoryImplementor searchFactoryImplementor = getSearchFactoryImplementor();
    if ( filterDefinitions != null && filterDefinitions.size() > 0 ) {
      ChainedFilter chainedFilter = new ChainedFilter();
      for ( FullTextFilterImpl filterDefinition : filterDefinitions.values() ) {
        FilterDef def = searchFactoryImplementor.getFilterDefinition( filterDefinition.getName() );
        Class implClass = def.getImpl();
        Object instance;
        try {
          instance = implClass.newInstance();
        }
        catch (InstantiationException e) {
          throw new SearchException( "Unable to create @FullTextFilterDef: " + def.getImpl(), e );
        }
        catch (IllegalAccessException e) {
          throw new SearchException( "Unable to create @FullTextFilterDef: " + def.getImpl(), e );
        }
        for ( Map.Entry<String, Object> entry : filterDefinition.getParameters().entrySet() ) {
          def.invoke( entry.getKey(), instance, entry.getValue() );
        }
        if ( def.isCache() && def.getKeyMethod() == null && filterDefinition.getParameters().size() > 0 ) {
          throw new SearchException("Filter with parameters and no @Key method: " + filterDefinition.getName() );
        }
        FilterKey key = null;
        if ( def.isCache() ) {
          if ( def.getKeyMethod() == null ) {
            key = new FilterKey( ) {
              public int hashCode() {
                return getImpl().hashCode();
              }

              public boolean equals(Object obj) {
                if ( ! ( obj instanceof FilterKey ) ) return false;
                FilterKey that = (FilterKey) obj;
                return this.getImpl().equals( that.getImpl() );
              }
            };
          }
          else {
            try {
              key = (FilterKey) def.getKeyMethod().invoke( instance );
            }
            catch (IllegalAccessException e) {
              throw new SearchException("Unable to access @Key method: "
                  + def.getImpl().getName() + "." + def.getKeyMethod().getName() );
            }
            catch (InvocationTargetException e) {
              throw new SearchException("Unable to access @Key method: "
                  + def.getImpl().getName() + "." + def.getKeyMethod().getName() );
            }
            catch (ClassCastException e) {
              throw new SearchException("@Key method does not return FilterKey: "
                  + def.getImpl().getName() + "." + def.getKeyMethod().getName() );
            }
          }
          key.setImpl( def.getImpl() );
        }

        Filter filter = def.isCache() ?
            searchFactoryImplementor.getFilterCachingStrategy().getCachedFilter( key ) :
            null;
        if (filter == null) {
          if ( def.getFactoryMethod() != null ) {
            try {
              filter = (Filter) def.getFactoryMethod().invoke( instance );
            }
            catch (IllegalAccessException e) {
              throw new SearchException("Unable to access @Factory method: "
                  + def.getImpl().getName() + "." + def.getFactoryMethod().getName() );
            }
            catch (InvocationTargetException e) {
              throw new SearchException("Unable to access @Factory method: "
                  + def.getImpl().getName() + "." + def.getFactoryMethod().getName() );
            }
            catch (ClassCastException e) {
              throw new SearchException("@Key method does not return a org.apache.lucene.search.Filter class: "
                  + def.getImpl().getName() + "." + def.getFactoryMethod().getName() );
            }
          }
          else {
            try {
              filter = (Filter) instance;
            }
            catch (ClassCastException e) {
              throw new SearchException("@Key method does not return a org.apache.lucene.search.Filter class: "
                  + def.getImpl().getName() + "." + def.getFactoryMethod().getName() );
            }
          }
          if ( def.isCache() ) searchFactoryImplementor.getFilterCachingStrategy().addCachedFilter( key, filter );
        }
        chainedFilter.addFilter( filter );
      }
      if ( filter != null ) chainedFilter.addFilter( filter );
      filter = chainedFilter;
View Full Code Here


    FullTextFilterImpl filterDefinition = filterDefinitions.get( name );
    if ( filterDefinition != null ) return filterDefinition;

    filterDefinition = new FullTextFilterImpl();
    filterDefinition.setName( name );
    FilterDef filterDef = getSearchFactoryImplementor().getFilterDefinition( name );
    if (filterDef == null) {
      throw new SearchException("Unkown @FullTextFilter: " + name);
    }
    filterDefinitions.put(name, filterDefinition);
    return filterDefinition;
View Full Code Here

    if ( filterDefinitions.containsKey( defAnn.name() ) ) {
      throw new SearchException("Multiple definition of @FullTextFilterDef.name=" + defAnn.name() + ": "
          + mappedXClass.getName() );
    }

    FilterDef filterDef = new FilterDef(defAnn);
    try {
      filterDef.getImpl().newInstance();
    }
    catch (IllegalAccessException e) {
      throw new SearchException("Unable to create Filter class: " + filterDef.getImpl().getName(), e);
    }
    catch (InstantiationException e) {
      throw new SearchException("Unable to create Filter class: " + filterDef.getImpl().getName(), e);
    }
    for ( Method method : filterDef.getImpl().getMethods() ) {
      if ( method.isAnnotationPresent( Factory.class ) ) {
        if ( filterDef.getFactoryMethod() != null ) {
          throw new SearchException("Multiple @Factory methods found" + defAnn.name() + ": "
              + filterDef.getImpl().getName() + "." + method.getName() );
        }
        if ( !method.isAccessible() ) method.setAccessible( true );
        filterDef.setFactoryMethod( method );
      }
      if ( method.isAnnotationPresent( Key.class ) ) {
        if ( filterDef.getKeyMethod() != null ) {
          throw new SearchException("Multiple @Key methods found" + defAnn.name() + ": "
              + filterDef.getImpl().getName() + "." + method.getName() );
        }
        if ( !method.isAccessible() ) method.setAccessible( true );
        filterDef.setKeyMethod( method );
      }

      String name = method.getName();
      if ( name.startsWith( "set" ) && method.getParameterTypes().length == 1 ) {
        filterDef.addSetter( Introspector.decapitalize( name.substring( 3 ) ), method );
      }
    }
    filterDefinitions.put( defAnn.name(), filterDef );
  }
View Full Code Here

    /*
     * FilterKey implementations and Filter(Factory) do not have to be threadsafe wrt their parameter injection
     * as FilterCachingStrategy ensure a memory barrier between concurrent thread calls
     */
    FilterDef def = searchFactoryImplementor.getFilterDefinition( fullTextFilter.getName() );
    Object instance = createFilterInstance( fullTextFilter, def );
    FilterKey key = createFilterKey( def, instance );

    // try to get the filter out of the cache
    Filter filter = cacheInstance( def.getCacheMode() ) ?
        searchFactoryImplementor.getFilterCachingStrategy().getCachedFilter( key ) :
        null;

    if ( filter == null ) {
      filter = createFilter( def, instance );

      // add filter to cache if we have to
      if ( cacheInstance( def.getCacheMode() ) ) {
        searchFactoryImplementor.getFilterCachingStrategy().addCachedFilter( key, filter );
      }
    }
    return filter;
  }
View Full Code Here

      return filterDefinition;
    }

    filterDefinition = new FullTextFilterImpl();
    filterDefinition.setName( name );
    FilterDef filterDef = getSearchFactoryImplementor().getFilterDefinition( name );
    if ( filterDef == null ) {
      throw new SearchException( "Unkown @FullTextFilter: " + name );
    }
    filterDefinitions.put( name, filterDefinition );
    return filterDefinition;
View Full Code Here

    bindFullTextFilterDef( defAnn );
  }

  private void bindFullTextFilterDef(FullTextFilterDef defAnn) {
    FilterDef filterDef = new FilterDef( defAnn );
    final Map<String, FilterDef> filterDefinition = factoryState.getFilterDefinitions();
    if ( filterDef.getImpl().equals( ShardSensitiveOnlyFilter.class ) ) {
      //this is a placeholder don't process regularly
      filterDefinition.put( defAnn.name(), filterDef );
      return;
    }
    try {
      filterDef.getImpl().newInstance();
    }
    catch ( IllegalAccessException e ) {
      throw new SearchException( "Unable to create Filter class: " + filterDef.getImpl().getName(), e );
    }
    catch ( InstantiationException e ) {
      throw new SearchException( "Unable to create Filter class: " + filterDef.getImpl().getName(), e );
    }
    for ( Method method : filterDef.getImpl().getMethods() ) {
      if ( method.isAnnotationPresent( Factory.class ) ) {
        if ( filterDef.getFactoryMethod() != null ) {
          throw new SearchException(
              "Multiple @Factory methods found" + defAnn.name() + ": "
                  + filterDef.getImpl().getName() + "." + method.getName()
          );
        }
        ReflectionHelper.setAccessible( method );
        filterDef.setFactoryMethod( method );
      }
      if ( method.isAnnotationPresent( Key.class ) ) {
        if ( filterDef.getKeyMethod() != null ) {
          throw new SearchException(
              "Multiple @Key methods found" + defAnn.name() + ": "
                  + filterDef.getImpl().getName() + "." + method.getName()
          );
        }
        ReflectionHelper.setAccessible( method );
        filterDef.setKeyMethod( method );
      }

      String name = method.getName();
      if ( name.startsWith( "set" ) && method.getParameterTypes().length == 1 ) {
        filterDef.addSetter( Introspector.decapitalize( name.substring( 3 ) ), method );
      }
    }
    filterDefinition.put( defAnn.name(), filterDef );
  }
View Full Code Here

    /*
     * FilterKey implementations and Filter(Factory) do not have to be threadsafe wrt their parameter injection
     * as FilterCachingStrategy ensure a memory barrier between concurrent thread calls
     */
    FilterDef def = searchFactoryImplementor.getFilterDefinition( fullTextFilter.getName() );
    //def can never be null, ti's guarded by enableFullTextFilter(String)

    if ( isPreQueryFilterOnly( def ) ) {
      return null;
    }

    Object instance = createFilterInstance( fullTextFilter, def );
    FilterKey key = createFilterKey( def, instance );

    // try to get the filter out of the cache
    Filter filter = cacheInstance( def.getCacheMode() ) ?
        searchFactoryImplementor.getFilterCachingStrategy().getCachedFilter( key ) :
        null;

    if ( filter == null ) {
      filter = createFilter( def, instance );

      // add filter to cache if we have to
      if ( cacheInstance( def.getCacheMode() ) ) {
        searchFactoryImplementor.getFilterCachingStrategy().addCachedFilter( key, filter );
      }
    }
    return filter;
  }
View Full Code Here

      return filterDefinition;
    }

    filterDefinition = new FullTextFilterImpl();
    filterDefinition.setName( name );
    FilterDef filterDef = searchFactoryImplementor.getFilterDefinition( name );
    if ( filterDef == null ) {
      throw new SearchException( "Unkown @FullTextFilter: " + name );
    }
    filterDefinitions.put( name, filterDefinition );
    return filterDefinition;
View Full Code Here

    FullTextFilterImpl filterDefinition = filterDefinitions.get( name );
    if ( filterDefinition != null ) return filterDefinition;

    filterDefinition = new FullTextFilterImpl();
    filterDefinition.setName( name );
    FilterDef filterDef = getSearchFactoryImplementor().getFilterDefinition( name );
    if ( filterDef == null ) {
      throw new SearchException( "Unkown @FullTextFilter: " + name );
    }
    filterDefinitions.put( name, filterDefinition );
    return filterDefinition;
View Full Code Here

    if ( filterDefinitions.containsKey( defAnn.name() ) ) {
      throw new SearchException("Multiple definition of @FullTextFilterDef.name=" + defAnn.name() + ": "
          + mappedXClass.getName() );
    }

    FilterDef filterDef = new FilterDef(defAnn);
    try {
      filterDef.getImpl().newInstance();
    }
    catch (IllegalAccessException e) {
      throw new SearchException("Unable to create Filter class: " + filterDef.getImpl().getName(), e);
    }
    catch (InstantiationException e) {
      throw new SearchException("Unable to create Filter class: " + filterDef.getImpl().getName(), e);
    }
    for ( Method method : filterDef.getImpl().getMethods() ) {
      if ( method.isAnnotationPresent( Factory.class ) ) {
        if ( filterDef.getFactoryMethod() != null ) {
          throw new SearchException("Multiple @Factory methods found" + defAnn.name() + ": "
              + filterDef.getImpl().getName() + "." + method.getName() );
        }
        if ( !method.isAccessible() ) method.setAccessible( true );
        filterDef.setFactoryMethod( method );
      }
      if ( method.isAnnotationPresent( Key.class ) ) {
        if ( filterDef.getKeyMethod() != null ) {
          throw new SearchException("Multiple @Key methods found" + defAnn.name() + ": "
              + filterDef.getImpl().getName() + "." + method.getName() );
        }
        if ( !method.isAccessible() ) method.setAccessible( true );
        filterDef.setKeyMethod( method );
      }

      String name = method.getName();
      if ( name.startsWith( "set" ) && method.getParameterTypes().length == 1 ) {
        filterDef.addSetter( Introspector.decapitalize( name.substring( 3 ) ), method );
      }
    }
    filterDefinitions.put( defAnn.name(), filterDef );
  }
View Full Code Here

TOP

Related Classes of org.hibernate.search.engine.FilterDef

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.