protected String buildCreateRolesQuery()

in software/database/src/main/java/org/apache/brooklyn/entity/database/postgresql/PostgreSqlSshDriver.java [359:402]


    protected String buildCreateRolesQuery() {
        Map<String, Map<String, ?>> roles = entity.getConfig(PostgreSqlNode.ROLES);
        StringBuilder builder = new StringBuilder("\"");

        for (Map.Entry<String, ? extends Map<String, ?>> entry : roles.entrySet()) {
            String roleName = entry.getKey();
            Map<String, ?> roleConfig = entry.getValue();
            if (roleConfig == null) roleConfig = ImmutableMap.of();
            
            if (Strings.isBlank(roleName)) {
                throw new NullPointerException("Role name must not be blank, but got "+roles);
            }
            validateInput(roleName, "role name '"+roleName+"'");
                
            builder.append(String.format("CREATE ROLE %s", roleName));
            
            
            if (roleConfig != null && roleConfig.containsKey(PostgreSqlNode.ROLE_PROPERTIES_KEY)) {
                Object rawProps = roleConfig.get("properties");
                String props = validateInput((String) rawProps, "role '"+roleName+"' property "+rawProps);;
                builder.append(String.format(" WITH %s; ", props));
            } else {
                builder.append("; ");
            }

            if (roleConfig.containsKey(PostgreSqlNode.ROLE_PRIVILEGES_KEY)) {
                List<String> privileges = toListOfStrings(roleConfig.get(PostgreSqlNode.ROLE_PRIVILEGES_KEY));
                for (Object rawPrivilege : privileges) {
                    String privilege = validateInput((String) rawPrivilege, "role '"+roleName+"' privilege "+rawPrivilege);
                    builder.append(String.format("GRANT %s TO %s; ", privilege, roleName));
                }
            }
            
            Set<String> otherConfig = Sets.difference(roleConfig.keySet(), 
                    ImmutableSet.of(PostgreSqlNode.ROLE_PROPERTIES_KEY, PostgreSqlNode.ROLE_PRIVILEGES_KEY));
            if (!otherConfig.isEmpty()) {
                throw new IllegalArgumentException("Invalid configuration for role "+roleName+", got "+roles);
            }
        }

        builder.append("\"");

        return builder.toString();
    }