001 package railo.commons.io.res.type.s3; 002 003 import java.io.IOException; 004 import java.io.InputStream; 005 import java.util.List; 006 007 import org.xml.sax.Attributes; 008 import org.xml.sax.SAXException; 009 010 011 public final class ACLFactory extends S3Factory { 012 013 private boolean insideAccessControlList=false; 014 private boolean insideGrant=false; 015 private boolean insideGrantee=false; 016 017 private boolean insideOwners=false; 018 019 private AccessControl ac; 020 private AccessControlPolicy acp=new AccessControlPolicy(); 021 private List<AccessControl> acl=acp.getAccessControlList(); 022 private String type; 023 024 025 /** 026 * @param saxParser String Klassenpfad zum Sax Parser. 027 * @param file File Objekt auf die TLD. 028 * @throws IOException 029 * @throws SAXException 030 */ 031 public ACLFactory(InputStream in,S3 s3) throws IOException, SAXException { 032 super(); 033 init(in); 034 } 035 036 public void doStartElement(String uri, String name, String qName, Attributes atts) { 037 if(insideGrant) { 038 if(qName.equals("Grantee")) { 039 for(int i=atts.getLength()-1;i>=0;i--){ 040 if("type".equalsIgnoreCase(atts.getLocalName(i))) 041 type=atts.getValue(i); 042 } 043 044 045 insideGrantee=true; 046 } 047 } 048 else if(insideAccessControlList) { 049 if(qName.equals("Grant")) startGrant(); 050 } 051 else if(qName.equals("AccessControlList")) insideAccessControlList=true; 052 else if(qName.equals("Owner")) insideOwners=true; 053 054 } 055 056 public void doEndElement(String uri, String name, String qName) throws SAXException { 057 if(insideGrant) { 058 if(qName.equals("Grant")) endGrant(); 059 else if(qName.equals("Grantee")) insideGrantee=false; 060 } 061 else if(qName.equals("AccessControlList")) insideAccessControlList=false; 062 else if(qName.equals("Owner")) insideOwners=false; 063 } 064 065 066 protected void setContent(String value) throws SAXException { 067 if(insideGrant) { 068 if(insideGrantee){ 069 if(inside.equals("ID")) ac.setId(value); 070 else if(inside.equals("DisplayName")) ac.setDisplayName(value); 071 else if(inside.equals("URI")) ac.setUri(value); 072 else if(inside.equals("Email")) ac.setEmail(value); 073 else if(inside.equals("EmailAddress")) ac.setEmail(value); 074 075 } 076 else { 077 if(inside.equals("Permission")) ac.setPermission(value); 078 } 079 } 080 else if(insideOwners) { 081 if(inside.equals("ID")) acp.setId(value); 082 else if(inside.equals("DisplayName")) acp.setDisplayName(value); 083 } 084 } 085 086 087 /** 088 * Wird jedesmal wenn das Tag attribute beginnt aufgerufen, um intern in einen anderen Zustand zu gelangen. 089 */ 090 private void startGrant() { 091 insideGrant=true; 092 ac=new AccessControl(); 093 } 094 095 096 /** 097 * Wird jedesmal wenn das Tag tag endet aufgerufen, um intern in einen anderen Zustand zu gelangen. 098 */ 099 private void endGrant() { 100 ac.setType(AccessControl.toType(type,AccessControl.TYPE_CANONICAL_USER)); 101 acl.add(ac); 102 insideGrant=false; 103 } 104 105 public AccessControlPolicy getAccessControlPolicy() { 106 return acp; 107 } 108 109 110 }