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    }