package com.idega.slide.util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.List;
import org.apache.slide.security.NodePermission;
import org.apache.webdav.lib.Ace;
import org.apache.webdav.lib.Privilege;
import org.apache.webdav.lib.properties.AclProperty;
import com.idega.util.ArrayUtil;
import com.idega.util.CoreConstants;
import com.idega.util.ListUtil;
import com.idega.util.StringUtil;
public class LocalAclProperty extends AclProperty {
private Collection<NodePermission> nodePermissions;
public LocalAclProperty(Enumeration<NodePermission> nodePermissions) {
this(Collections.list(nodePermissions));
}
public LocalAclProperty(Collection<NodePermission> nodePermissions) {
super(null, null);
this.nodePermissions = nodePermissions;
}
@Override
public Ace[] getAces() {
if (ListUtil.isEmpty(nodePermissions)) {
return null;
}
List<Ace> aces = new ArrayList<Ace>();
for (NodePermission permission: nodePermissions) {
String subjectUri = permission.getSubjectUri();
if (!StringUtil.isEmpty(subjectUri) && !IWSlideConstants.ALL_STANDARD_SUBJECT_URIS.contains(subjectUri) &&
!subjectUri.startsWith(CoreConstants.WEBDAV_SERVLET_URI)) {
subjectUri = CoreConstants.WEBDAV_SERVLET_URI.concat(subjectUri);
}
Ace ace = new Ace(subjectUri);
ace.setInheritable(permission.isInheritable());
String inheritedFrom = permission.getInheritedFrom();
if (!StringUtil.isEmpty(inheritedFrom) && !inheritedFrom.startsWith(CoreConstants.WEBDAV_SERVLET_URI)) {
inheritedFrom = CoreConstants.WEBDAV_SERVLET_URI.concat(inheritedFrom);
}
ace.setInheritedFrom(inheritedFrom);
ace.setInherited(!StringUtil.isEmpty(inheritedFrom));
ace.setNegative(permission.isNegative());
ace.setProtected(permission.isProtected());
ace.addPrivilege(new Privilege(IWSlideConstants.DAV_NAME_SPACE, permission.getActionUri(), null));
aces.add(ace);
}
return ArrayUtil.convertListToArray(aces);
}
}