/** * Registers action configuration for given type. */ protected ActionConfig registerNewActionConfiguration(final Class<? extends ActionConfig> actionConfigClass) { final ActionConfig newActionConfig = createActionConfig(actionConfigClass); actionConfigs.put(actionConfigClass, newActionConfig); return newActionConfig; }
/** * Fetch some action config and consumes it. */ public <T extends ActionConfig> void with(final Class<T> actionConfigType, final Consumer<T> actionConfigConsumer) { final T actionConfig = (T) lookup(actionConfigType); actionConfigConsumer.accept(actionConfig); }
/** * Detects {@link jodd.madvoc.meta.ActionAnnotationValues}. Returns {@code null} if annotation does not exist. */ protected ActionAnnotationValues detectActionAnnotationValues(final Method actionMethod) { return actionConfigManager.readAnnotationValue(actionMethod); }
/** * Registers action configuration for given annotation. New {@link ActionConfig} is created * and stored. */ public void registerAnnotation(final Class<? extends Annotation> annotationType) { final ActionConfiguredBy actionConfiguredBy = annotationType.getAnnotation(ActionConfiguredBy.class); if (actionConfiguredBy == null) { throw new MadvocException("Action annotation is missing it's " + ActionConfiguredBy.class.getSimpleName() + " configuration."); } bindAnnotationConfig(annotationType, actionConfiguredBy.value()); }
/** * Configure defaults. */ protected void configureDefaults() { final ActionConfigManager actionConfigManager = madvocContainer.lookupComponent(ActionConfigManager.class); actionConfigManager.registerAnnotation(Action.class); actionConfigManager.registerAnnotation(RestAction.class); }
/** * Configures the action configurations. */ public <A extends ActionConfig> WebApp withActionConfig(final Class<A> actionConfigType, final Consumer<A> actionConfigConsumer) { withRegisteredComponent(ActionConfigManager.class, acm -> acm.with(actionConfigType, actionConfigConsumer)); return this; }
/** * Binds action annotation and the action config. This can overwrite the default annotation * configuration of an annotation. */ public void bindAnnotationConfig(final Class<? extends Annotation> annotationType, final Class<? extends ActionConfig> actionConfigClass) { final ActionConfig actionConfig = registerNewActionConfiguration(actionConfigClass); actionConfigs.put(annotationType, actionConfig); for (final AnnotationParser annotationParser : annotationParsers) { if (annotationType.equals(annotationParser.getAnnotationType())) { // parser already exists return; } } annotationParsers = ArraysUtil.append(annotationParsers, new AnnotationParser(annotationType, Action.class)); }
/** * Builds action runtime configuration on founded action class. * Action classes are annotated with {@link jodd.madvoc.meta.MadvocAction} annotation. */ @SuppressWarnings("NonConstantStringShouldBeStringBuffer") protected void acceptActionClass(final Class<?> actionClass) { if (actionClass == null) { return; } if (!checkClass(actionClass)) { return; } if (actionClass.getAnnotation(MadvocAction.class) == null) { return; } ClassDescriptor cd = ClassIntrospector.get().lookup(actionClass); MethodDescriptor[] allMethodDescriptors = cd.getAllMethodDescriptors(); for (MethodDescriptor methodDescriptor : allMethodDescriptors) { if (!methodDescriptor.isPublic()) { continue; } // just public methods final Method method = methodDescriptor.getMethod(); final boolean hasAnnotation = actionConfigManager.hasActionAnnotationOn(method); if (!hasAnnotation) { continue; } webappConfigurations.add(() -> actionsManager.registerAction(actionClass, method, null)); } }
acm.bindAnnotationConfig(Action.class, JoyActionConfig.class); acm.bindAnnotationConfig(RestAction.class, JoyRestActionConfig.class); });
acm.bindAnnotationConfig(Action.class, JoyActionConfig.class); acm.bindAnnotationConfig(RestAction.class, JoyRestActionConfig.class); });
/** * Resolves action config. */ protected ActionConfig resolveActionConfig(final ActionAnnotationValues annotationValues) { final Class<? extends Annotation> annotationType; if (annotationValues == null) { annotationType = Action.class; } else { annotationType = annotationValues.annotationType(); } return actionConfigManager.lookup(annotationType); }