/** * Resolve object describing role and create either: - new role object - symlink to named role instance, ensure it * is register and return it, if it is a Map, tries to construct and register {@link Role} then return it. * * @param roleName is name of the role * @param roleObject is object for role creating * * @return created {@link Role} */ @NonNull public Role createRole(String roleName, Object roleObject) { if (roleObject instanceof CharSequence) { return registerRole(new RoleLink(roleName, roleObject.toString())); } if (roleObject instanceof Role) if(((Role)roleObject).getName() != null && ((Role)roleObject).getName().equals(roleName)) return registerRole(((Role) roleObject)); else return registerRole(((Role) roleObject).linkAs(roleName)); if (roleObject instanceof Map) { Role r = Role.fromDslBinder(roleName, Binder.from(roleObject)); return registerRole(r); } throw new IllegalArgumentException("cant make role from " + roleObject); }