/* * 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. */ package org.codehaus.mojo.pom; import org.apache.maven.model.Dependency; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import org.w3c.dom.Element; /** * TODO * * @author joerg */ public class DependencyInfo extends ProjectId { private final String version; private final String type; private final String scope; private final String classifier; /** * The constructor from a {@link MavenProject}. */ public DependencyInfo(MavenProject project) { this(project.getGroupId(), project.getArtifactId(), project.getVersion(), project .getPackaging(), null, null); } /** * The constructor from a {@link MavenProject}. */ public DependencyInfo(Dependency dependency) { this(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), dependency .getType(), dependency.getScope(), dependency.getClassifier()); } /** * @param groupId * @param artifactId * @param version */ public DependencyInfo(String groupId, String artifactId, String version) { this(groupId, artifactId, version, null, null, null); } /** * @param groupId * @param artifactId * @param version * @param type * @param scope * @param classifier */ public DependencyInfo(String groupId, String artifactId, String version, String type, String scope, String classifier) { super(groupId, artifactId); this.version = version; this.type = type; this.scope = scope; this.classifier = classifier; } /** * @return the version */ public String getVersion() { return this.version; } /** * @return the type */ public String getType() { return this.type; } /** * @return the scope */ public String getScope() { return this.scope; } /** * @return the classifier */ public String getClassifier() { return this.classifier; } /** * @see #equals(Object) */ public final boolean isMatching(DependencyInfo dependency) { return isMatching(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), dependency.getType(), dependency.getScope(), dependency.getClassifier()); } /** * {@inheritDoc} */ @Override public boolean isMatching(String groupId, String artifactId, String version, String type, String scope, String classifier) { if (super.isMatching(groupId, artifactId, version, type, scope, classifier)) { if ((this.version == null) || (version == null) || (this.version.equals(version))) { if ((this.type == null) || (type == null) || (this.type.equals(type))) { if ((this.scope == null) || (scope == null) || (this.scope.equals(scope))) { if ((this.classifier == null) || (classifier == null) || (this.classifier.equals(classifier))) { return true; } } } } } return false; } public DependencyInfo getDiff(MavenProject project) { return getDiff(project.getGroupId(), project.getArtifactId(), project.getVersion(), null, null, null); } public DependencyInfo getDiff(Dependency dependency) { return getDiff(dependency.getGroupId(), dependency.getArtifactId(), dependency.getVersion(), dependency.getType(), dependency.getScope(), dependency.getClassifier()); } public DependencyInfo getDiff(String groupId, String artifactId, String version, String type, String scope, String classifier) { String newGroupId = null; if ((groupId != null) && (getGroupId() != null) && (!groupId.equals(getGroupId()))) { newGroupId = getGroupId(); } String newArtifactId = null; if ((artifactId != null) && (getArtifactId() != null) && (!artifactId.equals(getArtifactId()))) { newArtifactId = getArtifactId(); } String newVersion = null; if ((version != null) && (this.version != null) && (!version.equals(this.version))) { newVersion = this.version; } String newType = null; if ((type != null) && (this.type != null) && (!type.equals(this.type))) { newType = this.type; } String newScope = null; if ((scope != null) && (this.scope != null) && (!scope.equals(this.scope))) { newScope = this.scope; } String newClassifier = null; if ((classifier != null) && (this.classifier != null) && (!classifier.equals(this.classifier))) { newClassifier = this.classifier; } return new DependencyInfo(newGroupId, newArtifactId, newVersion, newType, newScope, newClassifier); } /** * {@inheritDoc} */ @Override public boolean isEmpty() { if (!super.isEmpty()) { return false; } if (this.version != null) { return false; } if (this.type != null) { return false; } if (this.scope != null) { return false; } if (this.classifier != null) { return false; } return true; } public String toDiffString() { StringBuilder sb = new StringBuilder(); String prefix = ""; if (getGroupId() != null) { sb.append("groupId "); sb.append(getGroupId()); prefix = ","; } if (getArtifactId() != null) { sb.append(prefix); sb.append("artifactId "); sb.append(getArtifactId()); prefix = ","; } if (this.version != null) { sb.append(prefix); sb.append("version "); sb.append(this.version); prefix = ","; } if (this.type != null) { sb.append(prefix); sb.append("type "); sb.append(this.type); prefix = ","; } if (this.scope != null) { sb.append(prefix); sb.append("scope "); sb.append(this.scope); prefix = ","; } if (this.classifier != null) { sb.append(prefix); sb.append("classifier "); sb.append(this.classifier); prefix = ","; } return sb.toString(); } /** * {@inheritDoc} */ @Override public void toString(StringBuilder sb) { // groupId:artifactId:type:version:scope:classifier super.toString(sb); if ((this.type != null) || (this.version != null) || (this.scope != null) || (this.classifier != null)) { sb.append(':'); sb.append(this.type); if ((this.version != null) || (this.scope != null) || (this.classifier != null)) { sb.append(':'); sb.append(this.version); if ((this.scope != null) || (this.classifier != null)) { sb.append(':'); sb.append(this.scope); if (this.classifier != null) { sb.append(':'); sb.append(this.classifier); } } } } } }