View Javadoc
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.matchers;
20  
21  /**
22   * An abstract IHeaderMatcher that does simple matching.  Implementations need to implement the {@code doMatch(String)}
23   * method to perform the actual matching.  All handling of the {@code State} is managed by this class.  By default the 
24   * {@code finalizeState()} method will convert {@code State.i} to {@code State.f}.
25   */
26  public abstract class AbstractSimpleMatcher extends AbstractHeaderMatcher {
27      private State lastState;
28  
29      /**
30       * Constructs the AbstractSimpleMatcher with the specified id.
31       * If the id is null or an empty string a unique random id will be generated.
32       * @param id the Id to use.  May be null.
33       */
34      protected AbstractSimpleMatcher(String id) {
35          super(id);
36          this.lastState = State.i;
37      }
38  
39      /**
40       * Performs the actual match test.
41       * @param line the line to check.
42       * @return {@code true} if the line matches, {@code false} otherwise.
43       */
44      abstract protected boolean doMatch(String line);
45  
46      @Override
47      public final State matches(String line) {
48          if (lastState == State.t) {
49              return lastState;
50          }
51          if (line != null && doMatch(line)) {
52              lastState = State.t;
53          }
54          return lastState;
55      }
56  
57      @Override
58      public void reset() {
59          lastState = State.i;
60      }
61  
62      @Override
63      public State finalizeState() {
64          if (lastState == State.i) {
65              lastState = State.f;
66          }
67          return lastState;
68      }
69  
70      @Override
71      public final State currentState() {
72          return lastState;
73      }
74  }