Ignore:
Timestamp:
19/03/10 10:39:33 (11 years ago)
Author:
pjkersha
Message:

Added parsing for Resource type and also a reader factory to return the reader class for a given XACML type.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TI12-security/trunk/NDG_XACML/ndg/xacml/parsers/etree/policyreader.py

    r6751 r6752  
    1717from ndg.xacml.parsers.etree import QName 
    1818from ndg.xacml.parsers.etree.reader import ETreeAbstractReader 
    19 from ndg.xacml.parsers.etree.targetreader import TargetReader 
    20 from ndg.xacml.parsers.etree.rulereader import RuleReader 
     19from ndg.xacml.parsers.etree.factory import ReaderFactory 
    2120     
    2221     
     
    3231         
    3332        # XACML type to instantiate 
    34         cls = PolicyReader.TYPE 
    35         policy = cls() 
     33        xacmlType = PolicyReader.TYPE 
     34        policy = xacmlType() 
    3635         
    3736        localName = QName.getLocalPart(elem.tag) 
    38         if localName != cls.ELEMENT_LOCAL_NAME: 
     37        if localName != xacmlType.ELEMENT_LOCAL_NAME: 
    3938            raise XMLParseError("No \"%s\" element found" %  
    40                                 cls.ELEMENT_LOCAL_NAME) 
     39                                xacmlType.ELEMENT_LOCAL_NAME) 
    4140         
    4241        # Unpack *required* attributes from top-level element 
    4342        attributeValues = [] 
    44         for attributeName in (cls.POLICY_ID_ATTRIB_NAME, 
    45                               cls.RULE_COMBINING_ALG_ID_ATTRIB_NAME): 
     43        for attributeName in (xacmlType.POLICY_ID_ATTRIB_NAME, 
     44                              xacmlType.RULE_COMBINING_ALG_ID_ATTRIB_NAME): 
    4645            attributeValue = elem.attrib.get(attributeName) 
    4746            if attributeValue is None: 
     
    4948                                        'element' % 
    5049                                        (attributeName, 
    51                                          cls.ELEMENT_LOCAL_NAME)) 
     50                                         xacmlType.ELEMENT_LOCAL_NAME)) 
    5251                 
    5352            attributeValues.append(attributeValue)  
     
    5756        # Defaults to XACML version 1.0 
    5857        # TODO: version check 
    59         policy.version = (elem.attrib.get(cls.VERSION_ATTRIB_NAME) or  
    60                           cls.DEFAULT_XACML_VERSION) 
     58        policy.version = (elem.attrib.get(xacmlType.VERSION_ATTRIB_NAME) or  
     59                          xacmlType.DEFAULT_XACML_VERSION) 
    6160             
    6261        # Parse sub-elements 
     
    6463            localName = QName.getLocalPart(childElem.tag) 
    6564             
    66             if localName == cls.DESCRIPTION_LOCAL_NAME: 
     65            if localName == xacmlType.DESCRIPTION_LOCAL_NAME: 
    6766                if childElem.text is not None: 
    6867                    policy.description = childElem.text.strip() 
    6968                     
    70             elif localName == cls.POLICY_DEFAULTS_LOCAL_NAME: 
     69            elif localName == xacmlType.POLICY_DEFAULTS_LOCAL_NAME: 
    7170                raise NotImplementedError() 
    7271                    
    7372            elif localName == Target.ELEMENT_LOCAL_NAME: 
     73                TargetReader = ReaderFactory.getReader(Target) 
    7474                policy.target = TargetReader.parse(childElem) 
    7575              
    76             elif localName == cls.COMBINER_PARAMETERS_LOCAL_NAME: 
     76            elif localName == xacmlType.COMBINER_PARAMETERS_LOCAL_NAME: 
    7777                raise NotImplementedError() 
    7878              
    79             elif localName == cls.RULE_COMBINER_PARAMETERS_LOCAL_NAME: 
     79            elif localName == xacmlType.RULE_COMBINER_PARAMETERS_LOCAL_NAME: 
    8080                raise NotImplementedError() 
    8181             
    8282            elif localName == VariableDefinition.ELEMENT_LOCAL_NAME: 
     83                VariableDefinitionReader = ReaderFactory.getReader( 
     84                                                            VariableDefinition) 
    8385                variableDefinition = VariableDefinitionReader.parse(childElem) 
    8486                 
    8587            elif localName == Rule.ELEMENT_LOCAL_NAME: 
     88                RuleReader = ReaderFactory.getReader(Rule) 
    8689                policy.rules.append(RuleReader.parse(childElem)) 
    8790                    
    88             elif localName == cls.OBLIGATIONS_LOCAL_NAME: 
     91            elif localName == xacmlType.OBLIGATIONS_LOCAL_NAME: 
    8992                raise NotImplementedError() 
    9093             
Note: See TracChangeset for help on using the changeset viewer.