public static AclEntry parseAclEntry()

in src/main/java/com/microsoft/azure/datalake/store/acl/AclEntry.java [105:152]


    public static AclEntry parseAclEntry(String entryString, boolean removeAcl) throws IllegalArgumentException {
        if (entryString == null || entryString.equals("")) return null;
        AclEntry aclEntry = new AclEntry();
        String aclString = entryString.trim();

        // check if this is default ACL
        int fColonPos = aclString.indexOf(":");
        String firstToken = aclString.substring(0, fColonPos).toLowerCase().trim();
        if (firstToken.equals("default")) {
            aclEntry.scope = com.microsoft.azure.datalake.store.acl.AclScope.DEFAULT;
            aclString = aclString.substring(fColonPos+1);
        } else {
            aclEntry.scope = com.microsoft.azure.datalake.store.acl.AclScope.ACCESS;
        }

        // remaining string should have 3 entries (or 2 for removeacl)
        String[] parts = aclString.split(":", 5);  // without the 5, java discards trailing empty strings
        if (parts.length <2 || parts.length >3) throw new IllegalArgumentException("invalid aclEntryString " + entryString);
        if (parts.length == 2 && !removeAcl) throw new IllegalArgumentException("invalid aclEntryString " + entryString);

        // entry type (user/group/other/mask)
        try {
            aclEntry.type = AclType.valueOf(parts[0].toUpperCase().trim());
        } catch (IllegalArgumentException ex) {
            throw new IllegalArgumentException("Invalid ACL AclType in " + entryString);
        } catch (NullPointerException ex) {
            throw new IllegalArgumentException("ACL Entry AclType missing in " + entryString);
        }

        // user/group name
        aclEntry.name = parts[1].trim();
        if (aclEntry.type == AclType.MASK && !aclEntry.name.equals(""))
                throw new IllegalArgumentException("mask entry cannot contain user/group name: " + entryString);
        if (aclEntry.type == AclType.OTHER && !aclEntry.name.equals(""))
            throw new IllegalArgumentException("entry of type 'other' should not contain user/group name: " + entryString);

        // permission (rwx)
        if (!removeAcl) {
            try {
                aclEntry.action = AclAction.fromRwx(parts[2]);
            } catch (IllegalArgumentException ex) {
                throw new IllegalArgumentException("Invalid ACL action in " + entryString);
            } catch (NullPointerException ex) {
                throw new IllegalArgumentException("ACL action missing in " + entryString);
            }
        }
        return aclEntry;
    }