code: /*
   * Copyright (c) 2008-2019 Emmanuel Dupuy.
   * This project is distributed under the GPLv3 license.
   * This is a Copyleft license that gives the user the right to use,
   * copy and modify the code freely for non-commercial purposes.
   */
  
  package org.jd.gui.service.indexer;
  
  import org.jd.gui.api.API;
  import org.jd.gui.api.model.Container;
  import org.jd.gui.api.model.Indexes;
  import org.jd.gui.spi.Indexer;
  
  public class DirectoryIndexerProvider extends AbstractIndexerProvider {
  
      @Override public String[] getSelectors() { return appendSelectors("*:dir:*"); }
  
      @Override
      public void index(API api, Container.Entry entry, Indexes indexes) {
          int depth = 15;
  
          try {
              depth = Integer.valueOf(api.getPreferences().get("DirectoryIndexerPreferences.maximumDepth"));
          } catch (NumberFormatException ignore) {
          }
  
          index(api, entry, indexes, depth);
      }
  
      public void index(API api, Container.Entry entry, Indexes indexes, int depth) {
          if (depth-- > 0) {
              for (Container.Entry e : entry.getChildren()) {
                  if (e.isDirectory()) {
                      index(api, e, indexes, depth);
                  } else {
                      Indexer indexer = api.getIndexer(e);
  
                      if (indexer != null) {
                          indexer.index(api, e, indexes);
                      }
                  }
              }
          }
      }
  }
  