1   /*
2    * Logback: the reliable, generic, fast and flexible logging framework.
3    * Copyright (C) 1999-2026, 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 v2.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.core.model.processor;
16  
17  import ch.qos.logback.core.Context;
18  import ch.qos.logback.core.CoreConstants;
19  import ch.qos.logback.core.model.ImportModel;
20  import ch.qos.logback.core.model.Model;
21  import ch.qos.logback.core.util.OptionHelper;
22  
23  public class ImportModelHandler extends ModelHandlerBase {
24  
25      public ImportModelHandler(Context context) {
26          super(context);
27      }
28  
29      static public ModelHandlerBase makeInstance(Context context, ModelInterpretationContext ic) {
30          return new ImportModelHandler(context);
31      }
32  
33      @Override
34      protected Class<ImportModel> getSupportedModelClass() {
35          return ImportModel.class;
36      }
37  
38      @Override
39      public void handle(ModelInterpretationContext intercon, Model model) throws ModelHandlerException {
40          ImportModel importModel = (ImportModel) model;
41  
42          String className = importModel.getClassName();
43          if (OptionHelper.isNullOrEmptyOrAllSpaces(className)) {
44              addWarn("Empty className not allowed");
45              return;
46          }
47  
48          String stem = extractStem(className);
49          if (stem == null) {
50              addWarn("[" + className + "] could not be imported due to incorrect format");
51              return;
52          }
53  
54          intercon.addImport(stem, className);
55  
56      }
57  
58      String extractStem(String className) {
59          if (className == null)
60              return null;
61  
62          int lastDotIndex = className.lastIndexOf(CoreConstants.DOT);
63          if (lastDotIndex == -1)
64              return null;
65          if ((lastDotIndex + 1) == className.length())
66              return null;
67          return className.substring(lastDotIndex + 1);
68      }
69  
70  }