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.sourceloader;
  
  import org.jd.gui.api.API;
  import org.jd.gui.api.model.Container;
  import org.jd.gui.service.extension.ExtensionService;
  import org.jd.gui.spi.SourceLoader;
  
  import java.io.File;
  import java.util.Collection;
  
  public class SourceLoaderService {
      protected static final SourceLoaderService SOURCE_LOADER_SERVICE = new SourceLoaderService();
  
      public static SourceLoaderService getInstance() { return SOURCE_LOADER_SERVICE; }
  
      protected Collection<SourceLoader> providers = ExtensionService.getInstance().load(SourceLoader.class);
  
      public String getSource(API api, Container.Entry entry) {
          for (SourceLoader provider : providers) {
              String source = provider.getSource(api, entry);
  
              if ((source != null) && !source.isEmpty()) {
                  return source;
              }
          }
  
          return null;
      }
  
      public String loadSource(API api, Container.Entry entry) {
          for (SourceLoader provider : providers) {
              String source = provider.loadSource(api, entry);
  
              if ((source != null) && !source.isEmpty()) {
                  return source;
              }
          }
  
          return null;
      }
  
      public File getSourceFile(API api, Container.Entry entry) {
          for (SourceLoader provider : providers) {
              File file = provider.loadSourceFile(api, entry);
  
              if (file != null) {
                  return file;
              }
          }
  
          return null;
      }
  }
  