blob: dd4406f2f7854e8a7765ae5df0313f53e0ce4217 [file] [log] [blame]
package org.apache.maven.wrapper;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.net.URI;
import java.nio.file.Path;
import java.nio.file.Paths;
/**
* @author Hans Dockter
*/
public class PathAssembler
{
public static final String MAVEN_USER_HOME_STRING = "MAVEN_USER_HOME";
public static final String PROJECT_STRING = "PROJECT";
private Path mavenUserHome;
public PathAssembler()
{
}
public PathAssembler( Path mavenUserHome )
{
this.mavenUserHome = mavenUserHome;
}
/**
* Determines the local locations for the distribution to use given the supplied configuration.
*
* @param configuration a wrapper configuration
* @return the local distribution
*/
public LocalDistribution getDistribution( WrapperConfiguration configuration )
{
String baseName = getBaseName( configuration.getDistribution() );
String distName = removeExtension( baseName );
Path rootDirName = rootDirName( distName, configuration );
Path distDir = getBaseDir( configuration.getDistributionBase() )
.resolve( configuration.getDistributionPath() )
.resolve( rootDirName );
Path distZip = getBaseDir( configuration.getZipBase() )
.resolve( configuration.getZipPath() )
.resolve( rootDirName )
.resolve( baseName );
return new LocalDistribution( distDir, distZip );
}
private Path rootDirName( String distName, WrapperConfiguration configuration )
{
String urlHash = getHash( configuration.getDistribution() );
return Paths.get( distName, urlHash );
}
private String getHash( URI path )
{
return Integer.toHexString( path.hashCode() );
}
private String removeExtension( String name )
{
int dot = name.lastIndexOf( "." );
return dot > 0 ? name.substring( 0, dot ) : name;
}
private String getBaseName( URI distUrl )
{
return Paths.get( distUrl.getPath() ).getFileName().toString();
}
private Path getBaseDir( String base )
{
if ( MAVEN_USER_HOME_STRING.equals( base ) )
{
return mavenUserHome;
}
else if ( PROJECT_STRING.equals( base ) )
{
return Paths.get( System.getProperty( "user.dir" ) );
}
else
{
throw new RuntimeException( "Base: " + base + " is unknown" );
}
}
/**
* Local distribution
*/
public static class LocalDistribution
{
private final Path distZip;
private final Path distDir;
public LocalDistribution( Path distDir, Path distZip )
{
this.distDir = distDir;
this.distZip = distZip;
}
/**
* Returns the location to install the distribution into.
*
* @return the location to install the distribution into
*/
public Path getDistributionDir()
{
return distDir;
}
/**
* Returns the location to install the distribution ZIP file to.
*
* @return the location to install the distribution ZIP file to
*/
public Path getZipFile()
{
return distZip;
}
}
}