package net.ion.craken.node.crud.store; import java.io.IOException; import javax.transaction.Transaction; import net.ion.craken.node.IndexWriteConfig; import net.ion.craken.node.Workspace; import net.ion.craken.node.crud.Craken; import net.ion.craken.node.crud.tree.TreeCache; import net.ion.craken.node.crud.tree.impl.PropertyId; import net.ion.craken.node.crud.tree.impl.PropertyValue; import net.ion.nsearcher.config.Central; import org.infinispan.AdvancedCache; import org.infinispan.configuration.cache.CacheMode; import org.infinispan.manager.DefaultCacheManager; import com.google.common.cache.Cache; public abstract class WorkspaceConfigBuilder { private CacheMode cacheMode = CacheMode.LOCAL ; private int maxEntry = 3000 ; private int eviMaxSegment = 20 ; private int transferTimeOut = 300; public static WorkspaceConfigBuilder indexDir(String path) throws IOException { return new IndexFileConfigBuilder(path); } public static WorkspaceConfigBuilder icsDir(String path) throws IOException { return new ICSFileConfigBuilder(path); } public static WorkspaceConfigBuilder sifsDir(String rootPath) throws IOException{ return new SifsFileConfigBuilder(rootPath); } public static WorkspaceConfigBuilder gridDir(String rootPath) throws IOException { return new GridFileConfigBuilder(rootPath); } public static WorkspaceConfigBuilder oldDir(String rootPath) { return new OldFileConfigBuilder(rootPath); } public static WorkspaceConfigBuilder memoryDir(){ return new MemoryWorkspaceBuilder() ; } public WorkspaceConfigBuilder maxEntry(int maxEntry){ this.maxEntry = maxEntry ; return this ; } public WorkspaceConfigBuilder maxSegment(int eviMaxSegment){ this.eviMaxSegment = eviMaxSegment ; return this ; } public abstract WorkspaceConfigBuilder build(DefaultCacheManager dm, String wsName) throws IOException ; public WorkspaceConfigBuilder distMode(CacheMode cmode){ this.cacheMode = cmode ; return this ; } public CacheMode cacheMode(){ return cacheMode ; } public int maxEntry() { return maxEntry; } public int maxSegment(){ return eviMaxSegment ; } public final String blobChunk(String wsName) { return wsName + "-bchunk"; } public final String blobMeta(String wsName){ return wsName + "-bmeta" ; } public WorkspaceConfigBuilder transferTimeout(int transferTimeOut){ this.transferTimeOut = transferTimeOut ; return this ; } public int transferTimeout(){ return transferTimeOut ; } public void createInterceptor(TreeCache<PropertyId, PropertyValue> cache, Central central, Cache<Transaction, IndexWriteConfig> trans){ } public abstract Workspace createWorkspace(Craken craken, AdvancedCache<PropertyId, PropertyValue> cache) throws IOException ; }