xref: /aosp_15_r20/external/jackson-databind/src/main/java/com/fasterxml/jackson/databind/util/ViewMatcher.java (revision 0ed15c778abdfe0f5f51f6133673e1619d6e56e4)
1 package com.fasterxml.jackson.databind.util;
2 
3 /**
4  * Helper class used for checking whether a property is visible
5  * in the active view
6  */
7 public class ViewMatcher implements java.io.Serializable
8 {
9     private static final long serialVersionUID = 1L;
10 
11     protected final static ViewMatcher EMPTY = new ViewMatcher();
12 
isVisibleForView(Class<?> activeView)13     public boolean isVisibleForView(Class<?> activeView) { return false; }
14 
construct(Class<?>[] views)15     public static ViewMatcher construct(Class<?>[] views)
16     {
17         if (views == null) {
18             return EMPTY;
19         }
20         switch (views.length) {
21         case 0:
22             return EMPTY;
23         case 1:
24             return new Single(views[0]);
25         }
26         return new Multi(views);
27     }
28 
29     /*
30     /**********************************************************
31     /* Concrete sub-classes
32     /**********************************************************
33      */
34 
35     private final static class Single extends ViewMatcher
36     {
37         private static final long serialVersionUID = 1L;
38 
39         private final Class<?> _view;
Single(Class<?> v)40         public Single(Class<?> v) { _view = v; }
41         @Override
isVisibleForView(Class<?> activeView)42         public boolean isVisibleForView(Class<?> activeView) {
43             return (activeView == _view) || _view.isAssignableFrom(activeView);
44         }
45     }
46 
47     private final static class Multi extends ViewMatcher
48         implements java.io.Serializable
49     {
50         private static final long serialVersionUID = 1L;
51 
52         private final Class<?>[] _views;
53 
Multi(Class<?>[] v)54         public Multi(Class<?>[] v) { _views = v; }
55 
56         @Override
isVisibleForView(Class<?> activeView)57         public boolean isVisibleForView(Class<?> activeView)
58         {
59             for (int i = 0, len = _views.length; i < len; ++i) {
60                 Class<?> view = _views[i];
61                 if ((activeView == view) || view.isAssignableFrom(activeView)) {
62                     return true;
63                 }
64             }
65             return false;
66         }
67     }
68 }
69