All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.snapscript.core.link.PackageManager Maven / Gradle / Ivy

package org.snapscript.core.link;

import static org.snapscript.core.link.ImportType.EXPLICIT;
import static org.snapscript.core.link.ImportType.IMPLICIT;

import org.snapscript.core.NameFormatter;
import org.snapscript.core.error.InternalStateException;
  
public class PackageManager {
   
   private final NameFormatter formatter;
   private final ImportScanner scanner;
   private final PackageLoader loader;
   
   public PackageManager(PackageLoader loader, ImportScanner scanner) {
      this.formatter = new NameFormatter();
      this.scanner = scanner;
      this.loader = loader;
   }
   
   public Package importPackage(String module) {
      Object result = scanner.importPackage(module);
      
      if(result == null) {
         try {
            return loader.load(IMPLICIT, module); // import some.package.*
         } catch(Exception e){
            throw new InternalStateException("Problem importing '" + module + "'", e);
         }
      }
      return new NoPackage();
   }
   
   public Package importType(String module, String name) {
      String type  = formatter.formatFullName(module, name);            
      Object result = scanner.importType(type);
      
      if(result == null) {
         String outer  = formatter.formatTopName(module, name); 
         
         try {
            return loader.load(EXPLICIT, outer, module); // import some.package.Blah
         } catch(Exception e){
            throw new InternalStateException("Problem importing '" + module + "." + name + "'", e);
         }
      }
      return new NoPackage();
   }
   
   public Package importType(String type) {           
      Object result = scanner.importType(type);
      
      if(result == null) {
         String outer  = formatter.formatTopName(type); 
         
         try {
            return loader.load(EXPLICIT, outer); 
         } catch(Exception e){
            throw new InternalStateException("Problem importing '" + type + "'", e);
         }
      }
      return new NoPackage();
   }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy