package railo.commons.io.res.type.s3;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
public final class ACLFactory extends S3Factory {
private boolean insideAccessControlList=false;
private boolean insideGrant=false;
private boolean insideGrantee=false;
private boolean insideOwners=false;
private AccessControl ac;
private AccessControlPolicy acp=new AccessControlPolicy();
private List<AccessControl> acl=acp.getAccessControlList();
private String type;
/**
* @param saxParser String Klassenpfad zum Sax Parser.
* @param file File Objekt auf die TLD.
* @throws IOException
* @throws SAXException
*/
public ACLFactory(InputStream in,S3 s3) throws IOException, SAXException {
super();
init(in);
}
public void doStartElement(String uri, String name, String qName, Attributes atts) {
if(insideGrant) {
if(qName.equals("Grantee")) {
for(int i=atts.getLength()-1;i>=0;i--){
if("type".equalsIgnoreCase(atts.getLocalName(i)))
type=atts.getValue(i);
}
insideGrantee=true;
}
}
else if(insideAccessControlList) {
if(qName.equals("Grant")) startGrant();
}
else if(qName.equals("AccessControlList")) insideAccessControlList=true;
else if(qName.equals("Owner")) insideOwners=true;
}
public void doEndElement(String uri, String name, String qName) throws SAXException {
if(insideGrant) {
if(qName.equals("Grant")) endGrant();
else if(qName.equals("Grantee")) insideGrantee=false;
}
else if(qName.equals("AccessControlList")) insideAccessControlList=false;
else if(qName.equals("Owner")) insideOwners=false;
}
protected void setContent(String value) throws SAXException {
if(insideGrant) {
if(insideGrantee){
if(inside.equals("ID")) ac.setId(value);
else if(inside.equals("DisplayName")) ac.setDisplayName(value);
else if(inside.equals("URI")) ac.setUri(value);
else if(inside.equals("Email")) ac.setEmail(value);
else if(inside.equals("EmailAddress")) ac.setEmail(value);
}
else {
if(inside.equals("Permission")) ac.setPermission(value);
}
}
else if(insideOwners) {
if(inside.equals("ID")) acp.setId(value);
else if(inside.equals("DisplayName")) acp.setDisplayName(value);
}
}
/**
* Wird jedesmal wenn das Tag attribute beginnt aufgerufen, um intern in einen anderen Zustand zu gelangen.
*/
private void startGrant() {
insideGrant=true;
ac=new AccessControl();
}
/**
* Wird jedesmal wenn das Tag tag endet aufgerufen, um intern in einen anderen Zustand zu gelangen.
*/
private void endGrant() {
ac.setType(AccessControl.toType(type,AccessControl.TYPE_CANONICAL_USER));
acl.add(ac);
insideGrant=false;
}
public AccessControlPolicy getAccessControlPolicy() {
return acp;
}
}