/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.artifact.descriptor; import static com.google.common.base.Preconditions.checkState; import static java.lang.String.format; import static java.util.Optional.empty; import static java.util.Optional.ofNullable; import java.util.Optional; /** * Describes a bundle by its Maven coordinates. */ public class BundleDescriptor { private String groupId; private String artifactId; private String version; private String type = "jar"; private Optional<String> classifier = empty(); private BundleDescriptor() {} public String getGroupId() { return this.groupId; } public String getArtifactId() { return this.artifactId; } public String getVersion() { return this.version; } public String getType() { return type; } public Optional<String> getClassifier() { return classifier; } public boolean isPlugin() { return classifier.map(classifier -> classifier.equals("mule-plugin")).orElse(false); } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } BundleDescriptor that = (BundleDescriptor) o; if (!groupId.equals(that.groupId)) { return false; } if (!artifactId.equals(that.artifactId)) { return false; } return version.equals(that.version); } @Override public int hashCode() { int result = groupId.hashCode(); result = 31 * result + artifactId.hashCode(); result = 31 * result + version.hashCode(); return result; } @Override public String toString() { return "BundleDescriptor{" + "groupId='" + groupId + '\'' + ", artifactId='" + artifactId + '\'' + ", version='" + version + '\'' + ", type='" + type + '\'' + ", classifier=" + classifier + '}'; } /** * Builder for creating a {@code BundleDescriptor} */ public static class Builder { private static final String ARTIFACT_ID = "artifact id"; private static final String VERSION = "version"; private static final String GROUP_ID = "group id"; private static final String TYPE = "type"; private static final String CLASSIFIER = "classifier"; private static final String REQUIRED_FIELD_NOT_FOUND_TEMPLATE = "bundle cannot be created with null or empty %s"; private BundleDescriptor bundleDependency = new BundleDescriptor(); /** * @param groupId the group id of the bundle. Cannot be null or empty. * @return the builder */ public BundleDescriptor.Builder setGroupId(String groupId) { validateIsNotEmpty(groupId, GROUP_ID); bundleDependency.groupId = groupId; return this; } /** * @param artifactId the artifactId id of the bundle. Cannot be null or empty. * @return the builder */ public BundleDescriptor.Builder setArtifactId(String artifactId) { validateIsNotEmpty(artifactId, ARTIFACT_ID); bundleDependency.artifactId = artifactId; return this; } /** * This is the version of the bundle. * * @param version the version of the bundle. Cannot be null or empty. * @return the builder */ public BundleDescriptor.Builder setVersion(String version) { validateIsNotEmpty(version, VERSION); bundleDependency.version = version; return this; } /** * Sets the extension type of the bundle. * * @param type the type id of the bundle. Cannot be null or empty. * @return the builder */ public BundleDescriptor.Builder setType(String type) { validateIsNotEmpty(type, TYPE); bundleDependency.type = type; return this; } /** * Sets the classifier of the bundle. * * @param classifier classifier of the bundle. Can by null * @return the builder */ public BundleDescriptor.Builder setClassifier(String classifier) { bundleDependency.classifier = ofNullable(classifier); return this; } /** * @return a {@code BundleDescriptor} with the previous provided parameters to the builder. */ public BundleDescriptor build() { validateIsNotEmpty(bundleDependency.groupId, GROUP_ID); validateIsNotEmpty(bundleDependency.artifactId, ARTIFACT_ID); validateIsNotEmpty(bundleDependency.version, VERSION); return this.bundleDependency; } private String getNullFieldMessage(String field) { return format(REQUIRED_FIELD_NOT_FOUND_TEMPLATE, field); } private void validateIsNotEmpty(String value, String fieldId) { checkState(!isEmpty(value), getNullFieldMessage(fieldId)); } private static boolean isEmpty(String value) { return value == null || value.equals(""); } } }