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.analysis; 20 21 import org.apache.rat.config.parameters.Description; 22 import org.apache.rat.config.parameters.DescriptionBuilder; 23 import org.apache.rat.configuration.builders.AllBuilder; 24 import org.apache.rat.configuration.builders.AnyBuilder; 25 import org.apache.rat.configuration.builders.CopyrightBuilder; 26 import org.apache.rat.configuration.builders.MatcherRefBuilder; 27 import org.apache.rat.configuration.builders.NotBuilder; 28 import org.apache.rat.configuration.builders.RegexBuilder; 29 import org.apache.rat.configuration.builders.SpdxBuilder; 30 import org.apache.rat.configuration.builders.TextBuilder; 31 32 /** 33 * Performs explicit checks against a line from the header of a file. For 34 * implementations that need to check multiple lines the implementation must 35 * cache the earlier lines. 36 */ 37 public interface IHeaderMatcher { 38 /** 39 * Get the identifier for this matcher. 40 * <p> 41 * All matchers must have unique identifiers 42 * </p> 43 * 44 * @return the identifier for this matcher. 45 */ 46 String getId(); 47 48 /** 49 * Resets this state of this matcher to its initial state in preparation for 50 * use with another document scan. In most cases this method does not need to 51 * do anything. 52 */ 53 default void reset() { 54 // does nothing. 55 } 56 57 /** 58 * Attempts to match text in the IHeaders instance. 59 * 60 * @param headers the representations of the headers to check 61 * @return {@code true} if the matcher matches the text, {@code false} otherwise. 62 */ 63 boolean matches(IHeaders headers); 64 65 /** 66 * Generates the component Description. 67 * @return the component description. 68 */ 69 default Description getDescription() { 70 return DescriptionBuilder.build(this); 71 } 72 73 /** 74 * An IHeaderMatcher builder. 75 */ 76 @FunctionalInterface 77 interface Builder { 78 /** 79 * Build the IHeaderMatcher. 80 * <p> 81 * Implementations of this interface should return a specific child class of IHeaderMatcher. 82 * 83 * @return a new IHeaderMatcher. 84 */ 85 IHeaderMatcher build(); 86 87 /** 88 * Gets the description for this builder. 89 * @return The description of the builder 90 */ 91 default Description getDescription() { 92 return DescriptionBuilder.buildMap(this.getClass()); 93 } 94 95 /** 96 * @return an instance of the standard TextBuilder. 97 * @see TextBuilder 98 * @deprecated Use new TextBuilder() 99 */ 100 @Deprecated // since 0.17 101 static TextBuilder text() { 102 return new TextBuilder(); 103 } 104 105 /** 106 * @return an instance of the standard AnyBuilder. 107 * @see AnyBuilder 108 * @deprecated Use new AnyBuilder() 109 */ 110 @Deprecated // since 0.17 111 static AnyBuilder any() { 112 return new AnyBuilder(); 113 } 114 115 /** 116 * @return an instance of the standard AllBuilder. 117 * @see AllBuilder 118 * @deprecated Use new AllBuilder() 119 */ 120 @Deprecated // since 0.17 121 static AllBuilder all() { 122 return new AllBuilder(); 123 } 124 125 /** 126 * @return an instance of the standard CopyrightBuilder. 127 * @see CopyrightBuilder 128 * @deprecated Use new CopyrightBuilder() 129 */ 130 @Deprecated // since 0.17 131 static CopyrightBuilder copyright() { 132 return new CopyrightBuilder(); 133 } 134 135 /** 136 * @return an instance of the standard SpdxBuilder. 137 * @see SpdxBuilder 138 * @deprecated Use new SpdxBuilder() 139 */ 140 @Deprecated // since 0.17 141 static SpdxBuilder spdx() { 142 return new SpdxBuilder(); 143 } 144 145 /** 146 * @return an instance of the standard MatcherRefBuilder. 147 * @see MatcherRefBuilder 148 * @deprecated Use new MatcherRefBuilder() 149 */ 150 @Deprecated // since 0.17 151 static MatcherRefBuilder matcherRef() { 152 return new MatcherRefBuilder(); 153 } 154 155 /** 156 * @return an instance of the standard NotBuilder. 157 * @see NotBuilder 158 * @deprecated Use new NotBuilder() 159 */ 160 @Deprecated // since 0.17 161 static NotBuilder not() { 162 return new NotBuilder(); 163 } 164 165 /** 166 * @return an instance of the standard RegexBuilder. 167 * @see RegexBuilder 168 * @deprecated Use new RegexBuilder() 169 */ 170 @Deprecated // since 0.17 171 static RegexBuilder regex() { 172 return new RegexBuilder(); 173 } 174 } 175 }