package com.fasterxml.jackson.databind.util;
/**
* Helper class used for checking whether a property is visible
* in the active view
*/
public abstract class ViewMatcher
{
public abstract boolean isVisibleForView(Class<?> activeView);
public static ViewMatcher construct(Class<?>[] views)
{
if (views == null) {
return Empty.instance;
}
switch (views.length) {
case 0:
return Empty.instance;
case 1:
return new Single(views[0]);
}
return new Multi(views);
}
/*
/**********************************************************
/* Concrete sub-classes
/**********************************************************
*/
private final static class Empty extends ViewMatcher
implements java.io.Serializable
{
private static final long serialVersionUID = 1L;
final static Empty instance = new Empty();
@Override
public boolean isVisibleForView(Class<?> activeView) {
return false;
}
}
private final static class Single extends ViewMatcher
implements java.io.Serializable
{
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;
}
}
}