package org.codehaus.mojo.sysdeo.ide; /* * 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.io.File; import java.io.IOException; import java.util.Iterator; import java.util.List; import java.util.Set; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.resolver.ArtifactNotFoundException; import org.apache.maven.artifact.resolver.ArtifactResolutionException; import org.apache.maven.artifact.resolver.ArtifactResolver; import org.apache.maven.model.Plugin; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; import org.codehaus.plexus.util.StringUtils; import org.codehaus.plexus.util.xml.Xpp3Dom; /** * @author <a href="mailto:trygvis@inamo.no">Trygve Laugstøl</a> * @author <a href="mailto:fgiust@users.sourceforge.net">Fabrizio Giustina</a> * @version $Id$ */ public class IdeUtils { private IdeUtils() { // don't instantiate } public static String getCanonicalPath( File file ) throws MojoExecutionException { try { return file.getCanonicalPath(); } catch ( IOException e ) { throw new MojoExecutionException( Messages.getString( "cantcanonicalize", file //$NON-NLS-1$ .getAbsolutePath() ), e ); } } public static String toRelativeAndFixSeparator( File basedir, File fileToAdd, boolean replaceSlashesWithDashes ) throws MojoExecutionException { String basedirpath; String absolutePath; basedirpath = getCanonicalPath( basedir ); absolutePath = getCanonicalPath( fileToAdd ); String relative; if ( absolutePath.equals( basedirpath ) ) { relative = "."; //$NON-NLS-1$ } else if ( absolutePath.startsWith( basedirpath ) ) { relative = absolutePath.substring( basedirpath.length() + 1 ); } else { relative = absolutePath; } relative = StringUtils.replace( relative, '\\', '/' ); if ( replaceSlashesWithDashes ) { relative = StringUtils.replace( relative, '/', '-' ); relative = StringUtils.replace( relative, ':', '-' ); // remove ":" for absolute paths in windows } return relative; } /** * @todo there should be a better way to do this */ public static String getPluginSetting( MavenProject project, String artifactId, String optionName, String defaultValue ) { for ( Iterator it = project.getModel().getBuild().getPlugins().iterator(); it.hasNext(); ) { Plugin plugin = (Plugin) it.next(); if ( plugin.getArtifactId().equals( artifactId ) ) { Xpp3Dom o = (Xpp3Dom) plugin.getConfiguration(); if ( o != null && o.getChild( optionName ) != null ) { return o.getChild( optionName ).getValue(); } } } return defaultValue; } public static Artifact resolveArtifactWithClassifier( String groupId, String artifactId, String version, String classifier, ArtifactRepository localRepository, ArtifactResolver artifactResolver, ArtifactFactory artifactFactory, List remoteRepos, Log log ) { String type = classifier; // the "sources" classifier maps to the "java-source" type if ( "sources".equals( type ) ) //$NON-NLS-1$ { type = "java-source"; //$NON-NLS-1$ } Artifact resolvedArtifact = artifactFactory.createArtifactWithClassifier( groupId, artifactId, version, type, classifier ); try { artifactResolver.resolve( resolvedArtifact, remoteRepos, localRepository ); } catch ( ArtifactNotFoundException e ) { // ignore, the jar has not been found } catch ( ArtifactResolutionException e ) { String message = Messages.getString( "errorresolving", new Object[] { //$NON-NLS-1$ classifier, resolvedArtifact.getId(), e.getMessage() } ); log.warn( message ); } return resolvedArtifact; } /** * Extracts the version of the first matching dependency in the given list. * * @param artifactNames artifact names to compare against for extracting version * @param artifacts Collection of dependencies for our project * @param len expected length of the version sub-string * @return */ public static String getDependencyVersion( String[] artifactNames, Set artifacts, int len ) { for ( Iterator itr = artifacts.iterator(); itr.hasNext(); ) { Artifact artifact = (Artifact) itr.next(); for ( int j = 0; j < artifactNames.length; j++ ) { String name = artifactNames[j]; if ( name.equals( artifact.getArtifactId() ) ) { return StringUtils.substring( artifact.getVersion(), 0, len ); } } } return null; } }