| package com.fasterxml.jackson.databind.util; |
| |
| /** |
| * Helper class used for checking whether a property is visible |
| * in the active view |
| */ |
| public class ViewMatcher implements java.io.Serializable |
| { |
| private static final long serialVersionUID = 1L; |
| |
| protected final static ViewMatcher EMPTY = new ViewMatcher(); |
| |
| public boolean isVisibleForView(Class<?> activeView) { return false; } |
| |
| public static ViewMatcher construct(Class<?>[] views) |
| { |
| if (views == null) { |
| return EMPTY; |
| } |
| switch (views.length) { |
| case 0: |
| return EMPTY; |
| case 1: |
| return new Single(views[0]); |
| } |
| return new Multi(views); |
| } |
| |
| /* |
| /********************************************************** |
| /* Concrete sub-classes |
| /********************************************************** |
| */ |
| |
| private final static class Single extends ViewMatcher |
| { |
| private static final long serialVersionUID = 1L; |
| |
| private final Class<?> _view; |
| public Single(Class<?> v) { _view = v; } |
| @Override |
| public boolean isVisibleForView(Class<?> activeView) { |
| return (activeView == _view) || _view.isAssignableFrom(activeView); |
| } |
| } |
| |
| private final static class Multi extends ViewMatcher |
| implements java.io.Serializable |
| { |
| private static final long serialVersionUID = 1L; |
| |
| private final Class<?>[] _views; |
| |
| public Multi(Class<?>[] v) { _views = v; } |
| |
| @Override |
| public boolean isVisibleForView(Class<?> activeView) |
| { |
| for (int i = 0, len = _views.length; i < len; ++i) { |
| Class<?> view = _views[i]; |
| if ((activeView == view) || view.isAssignableFrom(activeView)) { |
| return true; |
| } |
| } |
| return false; |
| } |
| } |
| } |