Package net.sourceforge.javautil.classloader.resolver.impl.maven

Source Code of net.sourceforge.javautil.classloader.resolver.impl.maven.MavenProvider

package net.sourceforge.javautil.classloader.resolver.impl.maven;

import java.net.URL;

import net.sourceforge.javautil.classloader.resolver.ClassPackageProviderException;
import net.sourceforge.javautil.classloader.resolver.IClassDependencyPool;
import net.sourceforge.javautil.classloader.resolver.IClassPackage;
import net.sourceforge.javautil.classloader.resolver.IClassPackageDependencyReference;
import net.sourceforge.javautil.classloader.resolver.IClassPackageDescriptor;
import net.sourceforge.javautil.classloader.resolver.IClassPackageProvider;
import net.sourceforge.javautil.classloader.resolver.IClassPackageReference;
import net.sourceforge.javautil.classloader.resolver.IClassPackageRepositoryLocal;
import net.sourceforge.javautil.classloader.resolver.IClassPackageRepositoryLocalImportable;
import net.sourceforge.javautil.classloader.resolver.IClassPackageRepositoryRemote;
import net.sourceforge.javautil.classloader.resolver.IClassPackageResolver;
import net.sourceforge.javautil.classloader.resolver.IClassDependencyPool.PoolScope;
import net.sourceforge.javautil.classloader.resolver.impl.ClassDependencyPoolImpl;
import net.sourceforge.javautil.classloader.resolver.impl.ClassPackageImpl;
import net.sourceforge.javautil.classloader.resolver.impl.ClassPackageReferenceImpl;
import net.sourceforge.javautil.classloader.util.ClassPackageUtil;
import net.sourceforge.javautil.common.io.IVirtualArtifact;
import net.sourceforge.javautil.common.io.IVirtualDirectory;
import net.sourceforge.javautil.common.io.IVirtualFile;
import net.sourceforge.javautil.common.io.IVirtualPath;
import net.sourceforge.javautil.common.io.impl.SimplePath;
import net.sourceforge.javautil.common.io.impl.SystemDirectory;
import net.sourceforge.javautil.common.xml.XMLDocument;

/**
* A maven specific implementation for the {@link IClassPackageProvider}.
*
* @author elponderador
* @author $Author$
* @version $Id$
*/
public class MavenProvider implements IClassPackageProvider {
 
  protected static final IVirtualPath JARRED_PATH_PREFIX = new SimplePath("META-INF/maven");
 
  protected static final IClassPackageReference provider = new ClassPackageReferenceImpl(
    IClassPackage.SELF_GROUPID, IClassPackage.SELF_ARTIFACTID,
    IClassPackage.SELF_VERSION == null ? "unknown" : IClassPackage.SELF_VERSION.toVersionString(), null
  );
 
  protected IClassPackageResolver defaultResolver;

  public IClassPackageReference getProviderInfo() { return provider; }

  public IClassDependencyPool append(IClassDependencyPool pool, IClassPackageDependencyReference... references) {
    ClassPackageUtil.append(pool, getDefaultResolver(), true, references);
    return pool;
  }

  public IClassDependencyPool createPool(String name, PoolScope scope, IClassDependencyPool parent, IClassPackageDependencyReference... references) {
    return this.append(parent.createChild(name, scope), references);
  }

  public IClassDependencyPool createPool(String name, IClassPackageDependencyReference... references) {
    return this.append(new ClassDependencyPoolImpl(name), references);
  }

  public IClassPackageResolver getDefaultResolver() {
    if (this.defaultResolver == null) {
      this.defaultResolver = MavenRepositoryUtil.createStandardResolver();
    }
    return defaultResolver;
  }

  public IClassPackageDescriptor getDescriptor(IVirtualFile file) {
    ProjectObjectModel pom = this.getProjectObjectModel(file);
    if (pom == null)
      throw new ClassPackageProviderException(this, "Could not find descriptor for: " + file);
   
    return pom;
  }

  public IClassPackageRepositoryLocalImportable getLocalRepository(IVirtualDirectory repository) {
    return new MavenRepositoryLocalPackage( repository );
  }

  public IClassPackageRepositoryLocalImportable getDefaultLocalRepository() {
    String local = MavenLocalSettings.getDefaultInstance().getLocalRepository();
    if (local == null) local = MavenLocalSettings.DEFAULT_LOCATION;
    return getLocalRepository( new SystemDirectory( local ) );
  }
 
  public IClassPackageRepositoryLocalImportable getImportableRepository (IVirtualDirectory repository) {
    return getLocalRepository(repository);
  }

  public IClassPackageRepositoryLocalImportable getDefaultImportableRepository() {
    return getDefaultLocalRepository();
  }

  public IClassPackageRepositoryRemote getRemoteRepository(URL url) {
    return new MavenRepositoryRemote(url.toExternalForm(), url);
  }
 
  public boolean isClassPackage(IVirtualArtifact artifact) {
    return this.getDescriptorFile(artifact) != null;
  }

  /**
   * This will return a parsed {@link ProjectObjectModel} if detected, otherwise null
   */
  protected ProjectObjectModel getProjectObjectModel (IVirtualArtifact possibleClassPackage) {
    IVirtualFile pomFile = this.getDescriptorFile(possibleClassPackage);
    return pomFile == null ? null : XMLDocument.read(pomFile, ProjectObjectModel.class);
  }
 
  /**
   * This will detect standard locations of the {@link ProjectObjectModel} file.
   */
  protected IVirtualFile getDescriptorFile (IVirtualArtifact possibleClassPackage) {
    if (possibleClassPackage instanceof IVirtualDirectory) {
      IVirtualDirectory pkg = (IVirtualDirectory) possibleClassPackage;
      IVirtualFile pomXMLFile = pkg.getFile(ProjectObjectModel.DEFAULT_FILE_NAME);
      if (pomXMLFile == null) {
        if ( pkg.isExists(JARRED_PATH_PREFIX) ) {
          try {
            IVirtualDirectory group = pkg.getDirectory(JARRED_PATH_PREFIX).getDirectories().get(0);
            IVirtualDirectory artifact = group.getDirectories().get(0);
           
            pomXMLFile = artifact.getFile(ProjectObjectModel.DEFAULT_FILE_NAME);
            if (pomXMLFile != null) return pomXMLFile;
          } catch (ArrayIndexOutOfBoundsException e) {}
        }
      } else return pomXMLFile;
    }
    return null;
  }

}
TOP

Related Classes of net.sourceforge.javautil.classloader.resolver.impl.maven.MavenProvider

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.