/******************************************************************************* * Copyright (c) 2010-2014 SAP AG and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * SAP AG - initial API and implementation *******************************************************************************/ package org.eclipse.skalli.model.ext.maven; import java.net.MalformedURLException; import java.net.URL; import org.apache.commons.lang.StringUtils; import org.eclipse.skalli.commons.ComparatorUtils; public class MavenCoordinate { private static String DEFAULT_PACKAGING = "jar"; private String groupId; private String artefactId; private String packaging; private String classifier; public MavenCoordinate() { super(); } public MavenCoordinate(MavenCoordinate coordinate) { this(coordinate.getGroupId(), coordinate.getArtefactId(), coordinate.getPackaging()); } public MavenCoordinate(String groupId, String artefactId, String packaging) { this.groupId = groupId; this.artefactId = artefactId; setPackaging(packaging); } public String getGroupId() { return groupId; } public void setGroupId(String groupId) { this.groupId = groupId; } public String getArtefactId() { return artefactId; } public void setArtefactId(String artefactId) { this.artefactId = artefactId; } public String getPackaging() { return packaging; } public void setPackaging(String packaging) { if (packaging == null || packaging.length() == 0) { this.packaging = DEFAULT_PACKAGING; } else { this.packaging = packaging; } } public String getClassifier() { return classifier; } public void setClassifier(String classifier) { if (StringUtils.isNotBlank(classifier)) { this.classifier = classifier; } else { this.classifier = null; } } /** * Returns a path of the form <tt><groupId>/<artifactId>/</tt> where the dots in * <tt>groupId</tt> have been replaced with forward slashes. * @return a path, or an empty string if <tt>groupId</tt> or <tt>artifactId</tt> is undefined. */ public String asPath() { if (StringUtils.isBlank(groupId) || StringUtils.isBlank(artefactId)) { return ""; } return StringUtils.replace(groupId, ".", "/") + "/" + artefactId + "/"; } /** * Combines the given URL with {@link #asPath()}. * @param root the URL to which {@link #asPath()} is appended. * @throws IllegalArgumentException if the combined URL is invalid. */ public URL asURL(URL root) { try { return new URL(root, asPath()); } catch (MalformedURLException e) { throw new IllegalArgumentException(e); } } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((artefactId == null) ? 0 : artefactId.hashCode()); result = prime * result + ((groupId == null) ? 0 : groupId.hashCode()); result = prime * result + ((packaging == null) ? 0 : packaging.hashCode()); result = prime * result + ((classifier == null) ? 0 : classifier.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (!(obj instanceof MavenCoordinate)) { return false; } else { return 0 == compareTo((MavenCoordinate) obj); } } public int compareTo(MavenCoordinate obj) { int result = ComparatorUtils.compare(getGroupId(), obj.getGroupId()); if (result == 0) { result = ComparatorUtils.compare(getArtefactId(), obj.getArtefactId()); if (result == 0) { result = ComparatorUtils.compare(getPackaging(), obj.getPackaging()); if (result == 0) { result = ComparatorUtils.compare(getClassifier(), obj.getClassifier()); } } } return result; } @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append(groupId); sb.append(':'); sb.append(artefactId); if (StringUtils.isNotBlank(packaging)) { sb.append(':'); sb.append(packaging); } if (StringUtils.isNotBlank(classifier)) { sb.append("classifier=\'"); sb.append(classifier); sb.append("\'"); } return sb.toString(); } }