// Licensed 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.
package net.sourceforge.eclipsejetty.util;
import net.sourceforge.eclipsejetty.JettyPluginM2EUtils;
import org.eclipse.jdt.core.IClasspathAttribute;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
import org.eclipse.m2e.core.embedder.ArtifactRef;
import org.eclipse.m2e.core.project.IMavenProjectFacade;
/**
* Holds the artifact name and scope of a dependency. Can be used as hash key.
*
* @author Manfred Hantschel
*/
public class MavenDependencyInfo
{
/**
* Creates the info from the {@link ArtifactRef} of the m2e plugin
*
* @param artifactRef the artifact ref
* @return the info
*/
public static MavenDependencyInfo create(ArtifactRef artifactRef)
{
return new MavenDependencyInfo(artifactRef.getGroupId(), artifactRef.getArtifactId(), artifactRef.getVersion(),
artifactRef.getClassifier(), null, false, MavenScope.to(artifactRef.getScope()));
}
/**
* Creates the info from the {@link IMavenProjectFacade}
*
* @param facade the facade
* @param variant the variant (output, resource, test-output, test-resource)
* @param scope the Maven scope
* @return the info
*/
public static MavenDependencyInfo create(IMavenProjectFacade facade, String variant, MavenScope scope)
{
return new MavenDependencyInfo(facade.getArtifactKey().getGroupId(), facade.getArtifactKey().getArtifactId(),
facade.getArtifactKey().getVersion(), facade.getArtifactKey().getClassifier(), variant, true, scope);
}
/**
* Creates the info from the classpath entry
*
* @param runtimeClasspathEntry the classpath entry
* @return the info
*/
public static MavenDependencyInfo create(IRuntimeClasspathEntry runtimeClasspathEntry)
{
IClasspathEntry classpathEntry = runtimeClasspathEntry.getClasspathEntry();
if (classpathEntry == null)
{
return null;
}
IClasspathAttribute[] extraAttributes = classpathEntry.getExtraAttributes();
String groupId = null;
String artifactId = null;
String version = null;
String classifier = null;
MavenScope scope = null;
for (IClasspathAttribute extraAttribute : extraAttributes)
{
if ("maven.groupId".equals(extraAttribute.getName())) //$NON-NLS-1$
{
groupId = extraAttribute.getValue();
}
else if ("maven.artifactId".equals(extraAttribute.getName())) //$NON-NLS-1$
{
artifactId = extraAttribute.getValue();
}
else if ("maven.version".equals(extraAttribute.getName())) //$NON-NLS-1$
{
version = extraAttribute.getValue();
}
else if ("maven.classifier".equals(extraAttribute.getName())) //$NON-NLS-1$
{
classifier = extraAttribute.getValue();
}
else if ("maven.scope".equals(extraAttribute.getName())) //$NON-NLS-1$
{
scope = MavenScope.to(extraAttribute.getValue());
}
}
if (artifactId == null)
{
return null;
}
return new MavenDependencyInfo(groupId, artifactId, version, classifier, null, false, scope);
}
private final String groupId;
private final String artifactId;
private final String version;
private final String classifier;
private final String variant;
private boolean projectDependent;
private MavenScope scope;
private MavenDependencyInfo(String groupId, String artifactId, String version, String classifier, String variant)
{
super();
this.groupId = groupId;
this.artifactId = artifactId;
this.version = version;
this.classifier = classifier;
this.variant = variant;
}
private MavenDependencyInfo(String groupId, String artifactId, String version, String classifier, String variant,
boolean projectDependent, MavenScope scope)
{
this(groupId, artifactId, version, classifier, variant);
setProjectDependent(projectDependent);
setScope(scope);
}
/**
* Returns the Maven group
*
* @return the Maven group
*/
public String getGroupId()
{
return groupId;
}
/**
* Returns the Maven artifact
*
* @return the Maven artifact
*/
public String getArtifactId()
{
return artifactId;
}
/**
* Returns the Maven version
*
* @return the Maven version
*/
public String getVersion()
{
return version;
}
/**
* Returns the Maven classifier
*
* @return the Maven classifier
*/
public String getClassifier()
{
return classifier;
}
/**
* Returns the variant (output, resource, test-output, test-resource)
*
* @return the variant
*/
public String getVariant()
{
return variant;
}
/**
* Returns true if the dependency points to another Maven project
*
* @return true if the dependency points to another Maven project
*/
public boolean isProjectDependent()
{
return projectDependent;
}
/**
* Set to true if the dependency points to another Maven project
*
* @param projectDependent true if the dependency points to another Maven project
*/
public void setProjectDependent(boolean projectDependent)
{
this.projectDependent = projectDependent;
}
/**
* Returns the Maven scope
*
* @return the Maven scope
*/
public MavenScope getScope()
{
return scope;
}
/**
* Sets the Maven scope
*
* @param scope the Maven scope
*/
public void setScope(MavenScope scope)
{
this.scope = scope;
}
/**
* Creates the Maven portable string (the one with the colons, and here, plus the varaint)
*
* @return the Maven portable string
*/
public String toPortableString()
{
return JettyPluginM2EUtils.toPortableString(groupId, artifactId, version, classifier, variant);
}
/**
* {@inheritDoc}
*
* @see java.lang.Object#hashCode()
*/
@Override
public int hashCode()
{
final int prime = 31;
int result = 1;
result = (prime * result) + ((artifactId == null) ? 0 : artifactId.hashCode());
result = (prime * result) + ((classifier == null) ? 0 : classifier.hashCode());
result = (prime * result) + ((groupId == null) ? 0 : groupId.hashCode());
result = (prime * result) + ((version == null) ? 0 : version.hashCode());
result = (prime * result) + ((variant == null) ? 0 : variant.hashCode());
return result;
}
/**
* {@inheritDoc}
*
* @see java.lang.Object#equals(java.lang.Object)
*/
@Override
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
MavenDependencyInfo other = (MavenDependencyInfo) obj;
if (artifactId == null)
{
if (other.artifactId != null)
{
return false;
}
}
else if (!artifactId.equals(other.artifactId))
{
return false;
}
if (classifier == null)
{
if (other.classifier != null)
{
return false;
}
}
else if (!classifier.equals(other.classifier))
{
return false;
}
if (groupId == null)
{
if (other.groupId != null)
{
return false;
}
}
else if (!groupId.equals(other.groupId))
{
return false;
}
if (version == null)
{
if (other.version != null)
{
return false;
}
}
else if (!version.equals(other.version))
{
return false;
}
if (variant == null)
{
if (other.variant != null)
{
return false;
}
}
else if (!variant.equals(other.variant))
{
return false;
}
return true;
}
/**
* {@inheritDoc}
*
* @see java.lang.Object#toString()
*/
@Override
public String toString()
{
return toPortableString();
}
}