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.api;
  
  import org.jd.gui.api.feature.UriGettable;
  import org.jd.gui.api.model.Container;
  import org.jd.gui.api.model.Indexes;
  import org.jd.gui.spi.*;
  
  import javax.swing.*;
  import java.io.File;
  import java.net.URI;
  import java.nio.file.Path;
  import java.util.Collection;
  import java.util.Map;
  import java.util.concurrent.Future;
  
  public interface API {
      boolean openURI(URI uri);
  
      boolean openURI(int x, int y, Collection<Container.Entry> entries, String query, String fragment);
  
      void addURI(URI uri);
  
      <T extends JComponent & UriGettable> void addPanel(String title, Icon icon, String tip, T component);
  
      Collection<Action> getContextualActions(Container.Entry entry, String fragment);
  
      UriLoader getUriLoader(URI uri);
  
      FileLoader getFileLoader(File file);
  
      ContainerFactory getContainerFactory(Path rootPath);
  
      PanelFactory getMainPanelFactory(Container container);
  
      TreeNodeFactory getTreeNodeFactory(Container.Entry entry);
  
      TypeFactory getTypeFactory(Container.Entry entry);
  
      Indexer getIndexer(Container.Entry entry);
  
      SourceSaver getSourceSaver(Container.Entry entry);
  
      Map<String, String> getPreferences();
  
      Collection<Future<Indexes>> getCollectionOfFutureIndexes();
  
      interface LoadSourceListener {
          void sourceLoaded(String source);
      }
  
      String getSource(Container.Entry entry);
  
      void loadSource(Container.Entry entry, LoadSourceListener listener);
  
      File loadSourceFile(Container.Entry entry);
  }
  