Package jodd.madvoc.injector

Source Code of jodd.madvoc.injector.ActionPathMacroInjector

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

package jodd.madvoc.injector;

import jodd.madvoc.ActionConfig;
import jodd.madvoc.ActionConfigSet;
import jodd.madvoc.ActionRequest;
import jodd.madvoc.ScopeData;
import jodd.madvoc.ScopeType;
import jodd.madvoc.component.ScopeDataResolver;
import jodd.util.StringUtil;

/**
* Injects macro values from action path into the action bean.
* Path macros are considered to be in {@link jodd.madvoc.ScopeType#REQUEST request scope}.
*/
public class ActionPathMacroInjector extends BaseScopeInjector implements Injector {

  public ActionPathMacroInjector(ScopeDataResolver scopeDataResolver) {
    super(ScopeType.REQUEST, scopeDataResolver);
    silent = true;
  }

  public void inject(ActionRequest actionRequest) {
    ActionConfig config = actionRequest.getActionConfig();
    ActionConfigSet set = config.getActionConfigSet();

    if (set.actionPathMacros == null) {
      // no action path macros at all, just exit
      return;
    }

    ScopeData[] injectData = lookupScopeData(actionRequest);
    if (injectData == null) {
      return;
    }

    // inject

    Target[] targets = actionRequest.getTargets();

    String[] names = set.actionPathMacros.getNames();
    String[] values = set.actionPathMacros.extract(actionRequest.getActionPath());

    for (int ndx = 0; ndx < values.length; ndx++) {
      String value = values[ndx];

      if (StringUtil.isEmpty(value)) {
        continue;
      }

      String macroName = names[ndx];

      for (int i = 0; i < targets.length; i++) {
        Target target = targets[i];
        if (injectData[i] == null) {
          continue;
        }
        ScopeData.In[] scopes = injectData[i].in;
        if (scopes == null) {
          continue;
        }

        for (ScopeData.In in : scopes) {
          String name = getMatchedPropertyName(in, macroName);

          if (name != null) {
            setTargetProperty(target, name, value);
          }
        }
      }
    }
  }
}
TOP

Related Classes of jodd.madvoc.injector.ActionPathMacroInjector

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.