001/*
002 * Logback: the reliable, generic, fast and flexible logging framework.
003 * Copyright (C) 1999-2023, QOS.ch. All rights reserved.
004 *
005 * This program and the accompanying materials are dual-licensed under
006 * either the terms of the Eclipse Public License v1.0 as published by
007 * the Eclipse Foundation
008 *
009 *   or (per the licensee's choosing)
010 *
011 * under the terms of the GNU Lesser General Public License version 2.1
012 * as published by the Free Software Foundation.
013 */
014
015package ch.qos.logback.access.common.joran;
016
017import ch.qos.logback.access.common.model.ConfigurationModel;
018import ch.qos.logback.access.common.model.processor.ConfigurationModelHandler;
019import ch.qos.logback.core.Context;
020import ch.qos.logback.core.joran.ModelClassToModelHandlerLinkerBase;
021import ch.qos.logback.core.model.AppenderModel;
022import ch.qos.logback.core.model.AppenderRefModel;
023import ch.qos.logback.core.model.processor.AppenderModelHandler;
024import ch.qos.logback.core.model.processor.AppenderRefDependencyAnalyser;
025import ch.qos.logback.core.model.processor.AppenderRefModelHandler;
026import ch.qos.logback.core.model.processor.DefaultProcessor;
027import ch.qos.logback.core.model.processor.RefContainerDependencyAnalyser;
028
029/**
030 * For a given DefaultProcessor instance link a {@link ch.qos.logback.core.model.Model Model} class to a
031 * {@link ch.qos.logback.core.model.processor.ModelHandlerBase ModelHandler} instance
032 * for logback-access.
033 *
034 * <p>Will also use links from super class.</p>
035 *
036 * @since 1.3.9/1.4.9
037 */
038public class ModelClassToModelHandlerLinker extends ModelClassToModelHandlerLinkerBase {
039
040    public ModelClassToModelHandlerLinker(Context context) {
041        super(context);
042    }
043
044    public void link(DefaultProcessor defaultProcessor) {
045        super.link(defaultProcessor);
046        defaultProcessor.addHandler(ConfigurationModel.class, ConfigurationModelHandler::makeInstance);
047        defaultProcessor.addHandler(AppenderModel.class, AppenderModelHandler::makeInstance);
048        defaultProcessor.addHandler(AppenderRefModel.class, AppenderRefModelHandler::makeInstance);
049
050        defaultProcessor.addAnalyser(AppenderModel.class,
051                () -> new RefContainerDependencyAnalyser(context, AppenderModel.class));
052        defaultProcessor.addAnalyser(AppenderRefModel.class, () -> new AppenderRefDependencyAnalyser(context));
053
054        sealModelFilters(defaultProcessor);
055    }
056}