public void start() {
   int currentLocal = 0;
   this.directoryProviderLock = this.context.getDirectoryProviderLock(this);
   this.context = null;
   try {
     // copy to source
     if (new File(sourceDir, CURRENT1).exists()) {
       currentLocal = 2;
     } else if (new File(sourceDir, CURRENT2).exists()) {
       currentLocal = 1;
     } else {
       log.debugf("Source directory for '%s' will be initialized", indexName);
       currentLocal = 1;
     }
     String currentString = Integer.valueOf(currentLocal).toString();
     File subDir = new File(sourceDir, currentString);
     FileHelper.synchronize(indexDir, subDir, true, copyChunkSize);
     new File(sourceDir, CURRENT1).delete();
     new File(sourceDir, CURRENT2).delete();
     // TODO small hole, no file can be found here
     new File(sourceDir, CURRENT_DIR_NAME[currentLocal]).createNewFile();
     log.debugf("Current directory: %d", currentLocal);
   } catch (IOException e) {
     throw new SearchException("Unable to initialize index: " + directoryProviderName, e);
   }
   task = new FSMasterDirectoryProvider.TriggerTask(indexDir, sourceDir);
   long period = DirectoryProviderHelper.getRefreshPeriod(properties, directoryProviderName);
   timer.scheduleAtFixedRate(task, period, period);
   this.current = currentLocal; // write to volatile to publish all state
 }
 public void initialize(
     String directoryProviderName, Properties properties, BuildContext context) {
   this.properties = properties;
   this.directoryProviderName = directoryProviderName;
   // source guessing
   sourceDir = DirectoryProviderHelper.getSourceDirectory(directoryProviderName, properties, true);
   log.debugf("Source directory: %s", sourceDir.getPath());
   indexDir = DirectoryProviderHelper.getVerifiedIndexDir(directoryProviderName, properties, true);
   log.debugf("Index directory: %s", indexDir.getPath());
   try {
     indexName = indexDir.getCanonicalPath();
     directory = DirectoryProviderHelper.createFSIndex(indexDir, properties);
   } catch (IOException e) {
     throw new SearchException("Unable to initialize index: " + directoryProviderName, e);
   }
   copyChunkSize = DirectoryProviderHelper.getCopyBufferSize(directoryProviderName, properties);
   this.context = context;
   current = 0; // write to volatile to publish all state
 }