/** * Get role as string. * * @return string with data of role */ @Override public String toString() { return String.format("ListRole<%s:%s:%s:%s>", System.identityHashCode(this), getName(), this.mode == null ? "" : this.mode == Mode.QUORUM ? this.mode.name().toLowerCase() + "_" + this.quorumSize : this.mode.name().toLowerCase(), this.roles); }
/** * 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)); } } }); }
@Override public void deserialize(Binder data, BiDeserializer deserializer) { super.deserialize(data, deserializer); this.quorumSize = data.getInt("quorumSize", 0); Object mode = data.getOrDefault("mode", null); if (mode != null) { this.mode = Mode.valueOf((String) mode); } List<Binder> roles = data.getList("roles", null); if (roles != null) { this.roles.clear(); roles.forEach(role -> addRole(deserializer.deserialize(role))); } }
@Override public Binder serialize(BiSerializer s) { return super.serialize(s).putAll( "quorumSize", s.serialize(this.quorumSize), "mode", s.serialize(this.mode == null ? null : this.mode.name()), "roles", s.serialize(this.roles)); }