Package jodd.madvoc.proxetta

Source Code of jodd.madvoc.proxetta.ProxettaAwareActionsManager

// Copyright (c) 2003-2014, Jodd Team (jodd.org). All Rights Reserved.

package jodd.madvoc.proxetta;

import jodd.madvoc.component.ActionsManager;
import jodd.madvoc.ActionConfig;
import jodd.proxetta.impl.ProxyProxetta;

import java.lang.reflect.Method;
import java.util.Map;
import java.util.HashMap;

/**
* Madvoc {@link jodd.madvoc.component.ActionsManager actions manager} that works with Proxetta.
*/
public class ProxettaAwareActionsManager extends ActionsManager {

  protected final ProxyProxetta proxetta;
  protected final Map<Class, Class> proxyActionClasses;

  public ProxettaAwareActionsManager() {
    this(null);
  }
  public ProxettaAwareActionsManager(ProxyProxetta proxetta) {
    this.proxetta = proxetta;
    this.proxyActionClasses = new HashMap<Class, Class>();
  }

  /**
   * Registers actions and applies proxetta on actions that are not already registered.
   */
  @Override
  protected synchronized ActionConfig registerAction(Class actionClass, Method actionMethod, String actionPath) {
    if (proxetta != null) {
      // create action path from existing class (if not already exist)
      if (actionPath == null) {
        ActionConfig cfg = actionMethodParser.parse(actionClass, actionMethod, actionPath);
        actionPath = cfg.actionPath;
      }
      // create proxy for action class if not already created
      Class existing = proxyActionClasses.get(actionClass);
      if (existing == null) {
        existing = proxetta.builder(actionClass).define();
        proxyActionClasses.put(actionClass, existing);
      }
      actionClass = existing;
    }
    return super.registerAction(actionClass, actionMethod, actionPath);
  }
}
TOP

Related Classes of jodd.madvoc.proxetta.ProxettaAwareActionsManager

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.