Package net.infopeers.restrant.util

Source Code of net.infopeers.restrant.util.ServletConfigUrlParserArranger

package net.infopeers.restrant.util;

import java.util.Comparator;
import java.util.Enumeration;
import java.util.TreeSet;

import javax.servlet.ServletConfig;

import net.infopeers.restrant.engine.ParserHolder;
import net.infopeers.restrant.engine.PlaceholderFormatter;
import net.infopeers.restrant.engine.parser.TextUrlParser;
import net.infopeers.restrant.engine.parser.PatternParserArranger;

public class ServletConfigUrlParserArranger implements PatternParserArranger {

  private static final String ROUTE_FORMAT_LABEL = "RouteFormat"; // Web.xmlのURLテンプレート指定ラベル
 
  ServletConfig config;
  PlaceholderFormatter phFormatter;

  @SuppressWarnings("unchecked")
  protected Enumeration<String> getEnumration() {
    return config.getInitParameterNames();
  }
 
  protected String getFormatByName(String name) {
    return config.getInitParameter(name);
  }

  public ServletConfigUrlParserArranger(PlaceholderFormatter phFormatter,
      ServletConfig config) {
    this.phFormatter = phFormatter;
    this.config = config;
  }

  @Override
  public void arrange(ParserHolder parserHolder) {
   
    TreeSet<RouteInfo> routes = new TreeSet<RouteInfo>(
        new Comparator<RouteInfo>() {
          @Override
          public int compare(RouteInfo lhv, RouteInfo rhv) {
            return lhv.index - rhv.index;
          }
        });

    for (Enumeration<String> e = getEnumration(); e.hasMoreElements();) {
      String name = e.nextElement();
      if (name.startsWith(ROUTE_FORMAT_LABEL)) {

        String suffix = name.substring(ROUTE_FORMAT_LABEL.length());
        try {
          RouteInfo info = new RouteInfo();
          info.index = Integer.parseInt(suffix);
          info.format = getFormatByName(name);
          routes.add(info);
        } catch (NumberFormatException ex) {
          // 例外なら無視する
        }
      }
    }

    for (RouteInfo route : routes) {
      parserHolder.addParser(new TextUrlParser(route.format, phFormatter));
    }

  }

}
TOP

Related Classes of net.infopeers.restrant.util.ServletConfigUrlParserArranger

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.