1 8 package org.codehaus.loom.xmlpolicy.reader; 9 10 import java.util.ArrayList ; 11 12 import org.codehaus.loom.xmlpolicy.metadata.GrantMetaData; 13 import org.codehaus.loom.xmlpolicy.metadata.KeyStoreMetaData; 14 import org.codehaus.loom.xmlpolicy.metadata.PermissionMetaData; 15 import org.codehaus.loom.xmlpolicy.metadata.PolicyMetaData; 16 import org.w3c.dom.Element ; 17 import org.w3c.dom.NodeList ; 18 19 26 public class PolicyReader 27 { 28 35 public PolicyMetaData readPolicy( final Element element ) 36 throws Exception 37 { 38 final String version = element.getAttribute( "version" ); 39 if( !"1.0".equals( version ) ) 40 { 41 final String message = "Bad version:" + version; 42 throw new Exception ( message ); 43 } 44 45 final NodeList keyStoreConfigs = element.getElementsByTagName( "keystore" ); 46 final KeyStoreMetaData[] keyStores = buildKeyStores( keyStoreConfigs ); 47 48 final NodeList grantConfigs = 49 element.getElementsByTagName( "grant" ); 50 final GrantMetaData[] grants = buildGrants( grantConfigs ); 51 52 return new PolicyMetaData( keyStores, grants ); 53 } 54 55 61 private GrantMetaData[] buildGrants( final NodeList elements ) 62 throws Exception 63 { 64 final ArrayList grants = new ArrayList (); 65 final int length = elements.getLength(); 66 67 for( int i = 0; i < length; i++ ) 68 { 69 final Element element = (Element )elements.item( i ); 70 final GrantMetaData grant = buildGrant( element ); 71 grants.add( grant ); 72 } 73 74 return (GrantMetaData[])grants.toArray( new GrantMetaData[ grants.size() ] ); 75 } 76 77 83 private GrantMetaData buildGrant( final Element element ) 84 throws Exception 85 { 86 final String codeBase = getAttribute( element, "code-base" ); 87 final String signedBy = getAttribute( element, "signed-by" ); 88 String keyStore = getAttribute( element, "key-store" ); 89 if( null != signedBy && null == keyStore ) 90 { 91 keyStore = "default"; 92 } 93 final NodeList permissionElements = 94 element.getElementsByTagName( "permission" ); 95 final PermissionMetaData[] permissions = buildPermissions( permissionElements ); 96 return new GrantMetaData( codeBase, signedBy, keyStore, permissions ); 97 } 98 99 105 private PermissionMetaData[] buildPermissions( final NodeList elements ) 106 throws Exception 107 { 108 final ArrayList grants = new ArrayList (); 109 final int length = elements.getLength(); 110 111 for( int i = 0; i < length; i++ ) 112 { 113 final Element element = (Element )elements.item( i ); 114 final PermissionMetaData permission = buildPermission( element ); 115 grants.add( permission ); 116 } 117 118 return (PermissionMetaData[])grants.toArray( new PermissionMetaData[ grants.size() ] ); 119 } 120 121 127 private PermissionMetaData buildPermission( final Element element ) 128 throws Exception 129 { 130 final String classname = getAttribute( element, "class" ); 131 final String target = getAttribute( element, "target" ); 132 final String action = getAttribute( element, "action" ); 133 final String signedBy = getAttribute( element, "signed-by" ); 134 String keyStore = getAttribute( element, "key-store" ); 135 if( null != signedBy && null == keyStore ) 136 { 137 keyStore = "default"; 138 } 139 return new PermissionMetaData( classname, target, action, 140 signedBy, keyStore ); 141 } 142 143 149 private KeyStoreMetaData[] buildKeyStores( final NodeList elements ) 150 throws Exception 151 { 152 final ArrayList keyStores = new ArrayList (); 153 final int length = elements.getLength(); 154 155 for( int i = 0; i < length; i++ ) 156 { 157 final Element element = (Element )elements.item( i ); 158 final KeyStoreMetaData keyStore = buildKeyStore( element ); 159 keyStores.add( keyStore ); 160 } 161 162 return (KeyStoreMetaData[])keyStores.toArray( new KeyStoreMetaData[ keyStores.size() ] ); 163 } 164 165 171 private KeyStoreMetaData buildKeyStore( final Element element ) 172 throws Exception 173 { 174 final String name = element.getAttribute( "name" ); 175 final String location = getAttribute( element, "location" ); 176 final String type = getAttribute( element, "type" ); 177 return new KeyStoreMetaData( name, location, type ); 178 } 179 180 189 private String getAttribute( final Element element, 190 final String name ) 191 { 192 final String value = element.getAttribute( name ); 193 if( "".equals( value ) ) 194 { 195 return null; 196 } 197 else 198 { 199 return value; 200 } 201 } 202 } 203 | Popular Tags |