package railo.commons.io.res.type.s3;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class AccessControlPolicy {
private String id;
private String displayName;
private List<AccessControl> accessControlList=new ArrayList<AccessControl>();
/**
* @param accessControlList the accessControlList to set
*/
public void setAccessControlList(List<AccessControl> accessControlList) {
this.accessControlList = accessControlList;
}
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the displayName
*/
public String getDisplayName() {
return displayName;
}
/**
* @param displayName the displayName to set
*/
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
/**
* @return the accessControlList
*/
public List<AccessControl> getAccessControlList() {
return accessControlList;
}
public String toString(){
return toXMLString();
}
public String toXMLString(){
StringBuilder sb=new StringBuilder("<AccessControlPolicy xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">\n");
// Owner
sb.append("\t<Owner>\n");
sb.append("\t\t<ID>"+getId()+"</ID>\n");
sb.append("\t\t<DisplayName>"+getDisplayName()+"</DisplayName>\n");
sb.append("\t</Owner>\n");
// ACL
sb.append("\t<AccessControlList>\n");
AccessControl ac;
Iterator<AccessControl> it = accessControlList.iterator();
while(it.hasNext()){
ac=it.next();
sb.append("\t\t<Grant>\n");
// Grantee
sb.append("\t\t\t<Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\""+AccessControl.toType(ac.getType(),"Group")+"\">\n");
switch(ac.getType()){
case AccessControl.TYPE_CANONICAL_USER:
sb.append("\t\t\t\t<ID>"+ac.getId()+"</ID>\n");
sb.append("\t\t\t\t<DisplayName>"+ac.getDisplayName()+"</DisplayName>\n");
break;
case AccessControl.TYPE_GROUP:
sb.append("\t\t\t\t<URI>"+ac.getUri()+"</URI>\n");
break;
case AccessControl.TYPE_EMAIL:
sb.append("\t\t\t\t<EmailAddress>"+ac.getEmail()+"</EmailAddress>\n");
break;
}
sb.append("\t\t\t</Grantee>\n");
// Permission
sb.append("\t\t\t<Permission>"+ac.getPermission()+"</Permission>\n");
sb.append("\t\t</Grant>\n");
}
sb.append("\t</AccessControlList>\n");
sb.append("</AccessControlPolicy>");
return sb.toString();
}
public static void removeDuplicates(List<AccessControl> acl){
Map<String,AccessControl> map=new LinkedHashMap<String,AccessControl>();
Iterator<AccessControl> it = acl.iterator();
while(it.hasNext()){
AccessControl ac = it.next();
map.put(ac.hash(),ac);
}
acl.clear();
it = map.values().iterator();
while(it.hasNext()){
AccessControl ac = it.next();
acl.add(ac);
}
}
}