/** * Inspect an annotation to see if it specifies a view in which it should be. Fall back on default * view otherwise. * * @param annotation * @param currentPhase * @param defaultPhases * @return true if the annotation is applicable to this view and phase, false otherwise */ public boolean isAnnotationApplicableToPhase( Annotation annotation, PhaseIdType currentPhase, PhaseIdType[] defaultPhases) { Method restrictAtViewMethod = getRestrictAtViewMethod(annotation); PhaseIdType[] phasedIds = null; if (restrictAtViewMethod != null) { log.warnf( "Annotation %s is using the restrictAtViewMethod. Use a @RestrictAtPhase qualifier on the annotation instead."); phasedIds = getRestrictedPhaseIds(restrictAtViewMethod, annotation); } RestrictAtPhase restrictAtPhaseQualifier = AnnotationInspector.getAnnotation( annotation.annotationType(), RestrictAtPhase.class, beanManager); if (restrictAtPhaseQualifier != null) { log.debug("Using Phases found in @RestrictAtView qualifier on the annotation."); phasedIds = restrictAtPhaseQualifier.value(); } if (phasedIds == null) { log.debug("Falling back on default phase ids"); phasedIds = defaultPhases; } if (Arrays.binarySearch(phasedIds, currentPhase) >= 0) { return true; } return false; }
/** * Get the default phases at which restrictions should be applied, by looking for * a @RestrictAtPhase on a matching @ViewPattern, falling back on global defaults if none are * found * * @param viewId * @return default phases for a view */ public PhaseIdType[] getDefaultPhases(String viewId) { PhaseIdType[] defaultPhases = null; RestrictAtPhase restrictAtPhase = viewConfigStore.getAnnotationData(viewId, RestrictAtPhase.class); if (restrictAtPhase != null) { defaultPhases = restrictAtPhase.value(); } if (defaultPhases == null) { defaultPhases = RestrictAtPhaseDefault.DEFAULT_PHASES; } return defaultPhases; }