class Permission implements Serializable {

    public String getSymbol() {
        final StringBuilder symbolic = new StringBuilder();
        symbolic.append(setuid ? user.implies(Action.execute) ?
            StringUtils.substring(user.symbolic, 0, 2) + "s" : StringUtils.substring(user.symbolic, 0, 2) + "S" :
            user.symbolic);
        symbolic.append(setgid ? group.implies(Action.execute) ?
            StringUtils.substring(group.symbolic, 0, 2) + "s" : StringUtils.substring(group.symbolic, 0, 2) + "S" :
            group.symbolic);
        symbolic.append(sticky ? other.implies(Action.execute) ?
            StringUtils.substring(other.symbolic, 0, 2) + "t" : StringUtils.substring(other.symbolic, 0, 2) + "T" :
            other.symbolic);
        return symbolic.toString();
    }

    public  Permission();
    public  Permission(final String mode);
    public  Permission(final Action u, final Action g, final Action o);
    public  Permission(final Action u, final Action g, final Action o,
                      final boolean stickybit, final boolean setuid, final boolean setgid);
    public  Permission(final int mode);
    public  Permission(final Permission other);

}