1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one * 3 * or more contributor license agreements. See the NOTICE file * 4 * distributed with this work for additional information * 5 * regarding copyright ownership. The ASF licenses this file * 6 * to you under the Apache License, Version 2.0 (the * 7 * "License"); you may not use this file except in compliance * 8 * with the License. You may obtain a copy of the License at * 9 * * 10 * http://www.apache.org/licenses/LICENSE-2.0 * 11 * * 12 * Unless required by applicable law or agreed to in writing, * 13 * software distributed under the License is distributed on an * 14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * 15 * KIND, either express or implied. See the License for the * 16 * specific language governing permissions and limitations * 17 * under the License. * 18 */ 19 package org.apache.rat.license; 20 21 import java.util.Objects; 22 import java.util.SortedSet; 23 24 import org.apache.rat.analysis.IHeaderMatcher; 25 26 /** 27 * The definition of a License. 28 */ 29 public interface ILicense extends IHeaderMatcher, Comparable<ILicense> { 30 31 /** 32 * Gets the license family. 33 * 34 * @return the ILicenseFamily implementation for this license. 35 */ 36 ILicenseFamily getLicenseFamily(); 37 38 /** 39 * Gets the note associated with the license. 40 * 41 * @return the note associated with this license. May be null or empty. 42 */ 43 String getNote(); 44 45 /** 46 * Returns the name of this license. If no name was specified then the name of 47 * the family is returned. 48 * 49 * @return the name of this license. 50 */ 51 String getName(); 52 53 /** 54 * Gets the name of the family that this license if part of. 55 * 56 * @return the name of the license family that this license is part of. 57 */ 58 default String getFamilyName() { 59 return getLicenseFamily().getFamilyName(); 60 } 61 62 /** 63 * Get the header matcher for this license. 64 * 65 * @return the header matcher for this license. 66 */ 67 IHeaderMatcher getMatcher(); 68 69 @Override 70 default int compareTo(ILicense other) { 71 int result = getLicenseFamily().compareTo(other.getLicenseFamily()); 72 return result == 0 ? getId().compareTo(other.getId()) : result; 73 } 74 75 /** 76 * A default implementation of a License hash 77 * @param license the license to hash 78 * @return the license hash value 79 */ 80 static int hash(ILicense license) { 81 return Objects.hash(license.getLicenseFamily(), license.getId()); 82 } 83 84 /** 85 * A default implementation of equals. 86 * @param license1 The license to check for equality. 87 * @param o the object to check for equality to. 88 * @return true if the object is equal to the license1. 89 */ 90 static boolean equals(ILicense license1, Object o) { 91 if (license1 == o) { 92 return true; 93 } 94 if (!(o instanceof ILicense)) { 95 return false; 96 } 97 ILicense that = (ILicense) o; 98 return license1.compareTo(that) == 0; 99 } 100 101 /** 102 * Gets a builder for licenses. 103 * 104 * @return An ILicense.Builder instance. 105 */ 106 static ILicense.Builder builder() { 107 return new SimpleLicense.Builder(); 108 } 109 110 /** 111 * A builder for ILicense instances. 112 */ 113 interface Builder extends IHeaderMatcher.Builder { 114 115 /** 116 * Sets the matcher from a builder. 117 * 118 * @param matcher the builder for the matcher for the license. 119 * @return this builder for chaining. 120 */ 121 Builder setMatcher(IHeaderMatcher.Builder matcher); 122 123 /** 124 * Sets the matcher. 125 * 126 * @param matcher the matcher for the license. 127 * @return this builder for chaining. 128 */ 129 Builder setMatcher(IHeaderMatcher matcher); 130 131 /** 132 * Sets the notes for the license. If called multiple times the notes are 133 * concatenated to create a single note. 134 * 135 * @param notes the notes for the license. 136 * @return this builder for chaining. 137 */ 138 Builder setNote(String notes); 139 140 /** 141 * Sets the ID of the license. If the ID is not set then the ID of the license 142 * family is used. 143 * 144 * @param id the ID for the license 145 * @return this builder for chaining. 146 */ 147 Builder setId(String id); 148 149 /** 150 * Set the family category for this license. The category must be unique across 151 * all licenses and must be 5 characters. If more than 5 characters are provided 152 * then only the first 5 are taken. If fewer than 5 characters are provided the 153 * category is padded with spaces. 154 * 155 * @param licenseFamilyCategory the family category for the license. 156 * @return this builder for chaining. 157 */ 158 Builder setFamily(String licenseFamilyCategory); 159 160 /** 161 * Sets the name of the license. If the name is not set then the name of the 162 * license family is used. 163 * 164 * @param name the name for the license 165 * @return this builder for chaining. 166 */ 167 Builder setName(String name); 168 169 /** 170 * Sets the set of license families to use during build. 171 * 172 * @param licenseFamilies the license families to use 173 * @return this builder. 174 */ 175 Builder setLicenseFamilies(SortedSet<ILicenseFamily> licenseFamilies); 176 177 /** 178 * Builds the license. 179 * 180 * @return A new License implementation. 181 */ 182 @Override 183 ILicense build(); 184 } 185 }