1   /*
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2023, QOS.ch. All rights reserved.
4    *
5    * This program and the accompanying materials are dual-licensed under
6    * either the terms of the Eclipse Public License v1.0 as published by
7    * the Eclipse Foundation
8    *
9    *   or (per the licensee's choosing)
10   *
11   * under the terms of the GNU Lesser General Public License version 2.1
12   * as published by the Free Software Foundation.
13   */
14  
15  package ch.qos.logback.access.common.joran;
16  
17  import ch.qos.logback.access.common.model.ConfigurationModel;
18  import ch.qos.logback.access.common.model.processor.ConfigurationModelHandler;
19  import ch.qos.logback.core.Context;
20  import ch.qos.logback.core.joran.ModelClassToModelHandlerLinkerBase;
21  import ch.qos.logback.core.model.AppenderModel;
22  import ch.qos.logback.core.model.AppenderRefModel;
23  import ch.qos.logback.core.model.processor.*;
24  
25  /**
26   * For a given DefaultProcessor instance link a {@link ch.qos.logback.core.model.Model Model} class to a
27   * {@link ch.qos.logback.core.model.processor.ModelHandlerBase ModelHandler} instance
28   * for logback-access.
29   *
30   * <p>Will also use links from super class.</p>
31   *
32   * @since 1.3.9/1.4.9
33   */
34  public class ModelClassToModelHandlerLinker extends ModelClassToModelHandlerLinkerBase {
35  
36      public ModelClassToModelHandlerLinker(Context context) {
37          super(context);
38      }
39  
40      public void link(DefaultProcessor defaultProcessor) {
41          super.link(defaultProcessor);
42          defaultProcessor.addHandler(ConfigurationModel.class, ConfigurationModelHandler::makeInstance);
43          defaultProcessor.addHandler(AppenderModel.class, AppenderModelHandler::makeInstance);
44          defaultProcessor.addHandler(AppenderRefModel.class, AppenderRefModelHandler::makeInstance);
45  
46          defaultProcessor.addAnalyser(ConfigurationModel.class, () -> new AppenderRefDependencyAnalyser(context));
47  
48          defaultProcessor.addAnalyser(AppenderModel.class,    () -> new FileCollisionAnalyser(context));
49          defaultProcessor.addAnalyser(AppenderModel.class, () -> new AppenderDeclarationAnalyser(context));
50  
51          sealModelFilters(defaultProcessor);
52      }
53  }