View Javadoc

1   package org.springframework.security.config;
2   
3   import org.springframework.security.util.PortMapperImpl;
4   import org.springframework.beans.factory.xml.BeanDefinitionParser;
5   import org.springframework.beans.factory.xml.ParserContext;
6   import org.springframework.beans.factory.config.BeanDefinition;
7   import org.springframework.beans.factory.support.RootBeanDefinition;
8   import org.springframework.util.StringUtils;
9   import org.springframework.util.xml.DomUtils;
10  
11  import org.w3c.dom.Element;
12  
13  import java.util.List;
14  import java.util.Iterator;
15  import java.util.Map;
16  import java.util.HashMap;
17  
18  /**
19   * Parses a port-mappings element, producing a single {@link org.springframework.security.util.PortMapperImpl}
20   * bean.
21   *
22   * @author Luke Taylor
23   * @version $Id: PortMappingsBeanDefinitionParser.java 2611 2008-02-07 15:03:27Z luke_t $
24   */
25  public class PortMappingsBeanDefinitionParser implements BeanDefinitionParser {
26      public static final String ATT_HTTP_PORT = "http";
27      public static final String ATT_HTTPS_PORT = "https";
28  
29      public BeanDefinition parse(Element element, ParserContext parserContext) {
30          RootBeanDefinition portMapper = new RootBeanDefinition(PortMapperImpl.class);
31          portMapper.setSource(parserContext.extractSource(element));
32  
33          if (element != null) {
34              List mappingElts = DomUtils.getChildElementsByTagName(element, Elements.PORT_MAPPING);
35              if(mappingElts.isEmpty()) {
36                  parserContext.getReaderContext().error("No port-mapping child elements specified", element);
37              }
38  
39              Map mappings = new HashMap();
40  
41              Iterator iterator = mappingElts.iterator();
42              while (iterator.hasNext()) {
43                  Element elt = (Element) iterator.next();
44                  String httpPort = elt.getAttribute(ATT_HTTP_PORT);
45                  String httpsPort = elt.getAttribute(ATT_HTTPS_PORT);
46  
47                  if (!StringUtils.hasText(httpPort)) {
48                      parserContext.getReaderContext().error("No http port supplied in port mapping", elt);
49                  }
50  
51                  if (!StringUtils.hasText(httpsPort)) {
52                      parserContext.getReaderContext().error("No https port supplied in port mapping", elt);
53                  }
54  
55                  mappings.put(httpPort, httpsPort);
56              }
57  
58              portMapper.getPropertyValues().addPropertyValue("portMappings", mappings);
59          }
60  
61          return portMapper;
62      }
63  }