package com.manning.hsia.dvdstore.util; import java.io.Serializable; import java.util.Properties; import org.apache.lucene.document.Document; import org.hibernate.search.store.DirectoryProvider; import org.hibernate.search.store.IndexShardingStrategy; import com.manning.hsia.dvdstore.model.Item; /** * Example 9.16 */ public class AutomaticDistributorShardingStrategy implements IndexShardingStrategy { private DirectoryProvider<?>[] providers; private int shardNbr; public void initialize(Properties properties, DirectoryProvider<?>[] providers) { this.providers = providers; this.shardNbr = Integer.parseInt( properties.getProperty("nbr_of_shards") ); } public DirectoryProvider<?>[] getDirectoryProvidersForAllShards() { return providers; } public DirectoryProvider<?> getDirectoryProviderForAddition(Class<?> entityType, Serializable id, String idInString, Document document) { //make sure it is used on the right class assert entityType.getName().equals( Item.class.getName() ); String distributorId = document.get("distributor.id"); int providerIndex = Integer.parseInt(distributorId) - 1; //ensure we never go over assert providerIndex < shardNbr : "The number of distributor are higher than available shards"; return providers[providerIndex]; } public DirectoryProvider<?>[] getDirectoryProvidersForDeletion(Class<?> entity, Serializable id, String idInString) { return providers; } }