001 package railo.commons.io.res.type.s3; 002 003 import java.util.ArrayList; 004 import java.util.Iterator; 005 import java.util.LinkedHashMap; 006 import java.util.List; 007 import java.util.Map; 008 009 public class AccessControlPolicy { 010 011 private String id; 012 private String displayName; 013 014 private List<AccessControl> accessControlList=new ArrayList<AccessControl>(); 015 016 /** 017 * @param accessControlList the accessControlList to set 018 */ 019 public void setAccessControlList(List<AccessControl> accessControlList) { 020 this.accessControlList = accessControlList; 021 } 022 /** 023 * @return the id 024 */ 025 public String getId() { 026 return id; 027 } 028 /** 029 * @param id the id to set 030 */ 031 public void setId(String id) { 032 this.id = id; 033 } 034 /** 035 * @return the displayName 036 */ 037 public String getDisplayName() { 038 return displayName; 039 } 040 /** 041 * @param displayName the displayName to set 042 */ 043 public void setDisplayName(String displayName) { 044 this.displayName = displayName; 045 } 046 /** 047 * @return the accessControlList 048 */ 049 public List<AccessControl> getAccessControlList() { 050 return accessControlList; 051 } 052 053 054 055 public String toString(){ 056 return toXMLString(); 057 } 058 059 public String toXMLString(){ 060 StringBuilder sb=new StringBuilder("<AccessControlPolicy xmlns=\"http://s3.amazonaws.com/doc/2006-03-01/\">\n"); 061 062 // Owner 063 sb.append("\t<Owner>\n"); 064 sb.append("\t\t<ID>"+getId()+"</ID>\n"); 065 sb.append("\t\t<DisplayName>"+getDisplayName()+"</DisplayName>\n"); 066 sb.append("\t</Owner>\n"); 067 068 // ACL 069 sb.append("\t<AccessControlList>\n"); 070 AccessControl ac; 071 Iterator<AccessControl> it = accessControlList.iterator(); 072 while(it.hasNext()){ 073 ac=it.next(); 074 sb.append("\t\t<Grant>\n"); 075 076 // Grantee 077 sb.append("\t\t\t<Grantee xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\""+AccessControl.toType(ac.getType(),"Group")+"\">\n"); 078 079 switch(ac.getType()){ 080 case AccessControl.TYPE_CANONICAL_USER: 081 sb.append("\t\t\t\t<ID>"+ac.getId()+"</ID>\n"); 082 sb.append("\t\t\t\t<DisplayName>"+ac.getDisplayName()+"</DisplayName>\n"); 083 break; 084 case AccessControl.TYPE_GROUP: 085 sb.append("\t\t\t\t<URI>"+ac.getUri()+"</URI>\n"); 086 break; 087 case AccessControl.TYPE_EMAIL: 088 sb.append("\t\t\t\t<EmailAddress>"+ac.getEmail()+"</EmailAddress>\n"); 089 break; 090 } 091 092 093 094 095 096 097 sb.append("\t\t\t</Grantee>\n"); 098 099 // Permission 100 sb.append("\t\t\t<Permission>"+ac.getPermission()+"</Permission>\n"); 101 102 sb.append("\t\t</Grant>\n"); 103 } 104 sb.append("\t</AccessControlList>\n"); 105 sb.append("</AccessControlPolicy>"); 106 107 return sb.toString(); 108 } 109 110 public static void removeDuplicates(List<AccessControl> acl){ 111 Map<String,AccessControl> map=new LinkedHashMap<String,AccessControl>(); 112 Iterator<AccessControl> it = acl.iterator(); 113 114 while(it.hasNext()){ 115 AccessControl ac = it.next(); 116 map.put(ac.hash(),ac); 117 } 118 119 acl.clear(); 120 it = map.values().iterator(); 121 while(it.hasNext()){ 122 AccessControl ac = it.next(); 123 acl.add(ac); 124 } 125 126 } 127 128 }