/** * Initializes combining role from dsl. * * @param serializedRole is {@link Binder} from dsl with data of combining role */ @Override public void initWithDsl(Binder serializedRole) { List<Object> roleBinders = serializedRole.getListOrThrow("roles"); mode = Mode.valueOf(serializedRole.getStringOrThrow("mode").toUpperCase()); if(mode == Mode.QUORUM) quorumSize = serializedRole.getIntOrThrow("quorumSize"); roleBinders.stream().forEach(x -> { if(x instanceof String) { roles.add(new RoleLink(x+"link"+ Instant.now().toEpochMilli(), (String) x)); } else { Binder binder = Binder.of(x); if (binder.size() == 1) { String name = binder.keySet().iterator().next(); roles.add(Role.fromDslBinder(name, binder.getBinderOrThrow(name))); } else { roles.add(Role.fromDslBinder(null, binder)); } } }); }
/** * 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); }
try (FileReader r = new FileReader(fileName)) { Binder binder = Binder.from(DefaultBiMapper.deserialize((Map) yaml.load(r))); Role role = Role.fromDslBinder("role",binder); assertTrue(role instanceof SimpleRole); assertTrue(role.getKeyRecords().size() == 1); try (FileReader r = new FileReader(fileName)) { Binder binder = Binder.from(DefaultBiMapper.deserialize((Map) yaml.load(r))); Role role = Role.fromDslBinder("role",binder); assertTrue(role instanceof SimpleRole); assertTrue(role.getKeyRecords().size() == 2); try (FileReader r = new FileReader(fileName)) { Binder binder = Binder.from(DefaultBiMapper.deserialize((Map) yaml.load(r))); Role role = Role.fromDslBinder("role",binder); assertTrue(role instanceof SimpleRole); assertTrue(role.getKeyRecords().size() == 1); try (FileReader r = new FileReader(fileName)) { Binder binder = Binder.from(DefaultBiMapper.deserialize((Map) yaml.load(r))); Role role = Role.fromDslBinder("role",binder); assertTrue(role instanceof SimpleRole); assertTrue(role.getKeyAddresses().size() == 1); try (FileReader r = new FileReader(fileName)) { Binder binder = Binder.from(DefaultBiMapper.deserialize((Map) yaml.load(r))); Role role = Role.fromDslBinder("role",binder); assertTrue(role instanceof SimpleRole); assertTrue(role.getKeyAddresses().size() == 2);