/** * Get binders followint the path except the last item. To be used in methods like {@link #getStringOrThrow(String...)} * to get the outmost binder * * @param path * @return the outmost binder */ private Binder getBinderPathOrThrow(String[] path) { Binder b = this; for (int i = 0; i < path.length - 1; i++) { b = b.getBinderOrThrow(path[i]); } return b; }
/** * Create binder using a path, e.g. calling {@link #getBinderOrThrow(String)} sequentally to all strings in path * argument array. For example * <p> * <pre><code> * Binder res = source.getBinderOrThrow("foo", "bar", "baz") * </code></pre> * <p> * does exactly same as * <p> * <pre><code> * Binder res = source.getBinderOrThrow("foo").getBinderOrThrow("bar").getBinderOrThrow("baz"); * </code></pre> * * @param path array of pah components * @return nonnull Binder instance * @throws IllegalArgumentException if such a binder does not exist in this Binder */ public Binder getBinderOrThrow(String... path) { Binder b = this; for (String p : path) { b = b.getBinderOrThrow(p); } return b; }
private void loadNetworkFrom(String someNodeUrl) throws IOException { URL url = new URL(someNodeUrl + "/network"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestProperty("User-Agent", "Universa JAVA API Client"); connection.setRequestMethod("GET"); if (connection.getResponseCode() != 200) throw new IOException("failed to access " + url + ", reponseCode " + connection.getResponseCode()); Binder bres = Boss.unpack((Do.read(connection.getInputStream()))) .getBinderOrThrow("response"); nodes.clear(); this.version = bres.getStringOrThrow("version"); for (Binder b : bres.getBinders("nodes")) nodes.add(new NodeRecord(b)); }
private Answer(int code, @NonNull Binder data) { this.code = code; Binder got; try { got = data.getBinderOrThrow("response"); } catch (IllegalArgumentException e) { got = Binder.fromKeysValues("errors", Arrays.asList( new ErrorRecord(Errors.FAILURE, "", data.getString("error", "Got data has not response field.")))); } this.data = got; }
Binder files = notaryContract.getDefinition().getData().getBinderOrThrow("files"); File path = new File(filePaths); final String normalPath; Binder file = files.getBinderOrThrow(key); try { String filePath = normalPath;
@Override public void deserialize(Binder data, BiDeserializer deserializer) { publicKey = deserializer.deserialize(data.getBinderOrThrow("publicKey")); publicHost = data.getStringOrThrow("publicHost"); String host = data.getStringOrThrow("host"); nodeAddress = new InetSocketAddress(host, data.getIntOrThrow("udpPort")); clientAddress = new InetSocketAddress(host, data.getIntOrThrow("clientPort")); serverAddress = new InetSocketAddress(host, data.getIntOrThrow("serverPort")); nodeName = data.getStringOrThrow("name"); number = data.getIntOrThrow("number"); }
/** * 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) throws IOException { createdAt = deserializer.deserialize(data.getZonedDateTimeOrThrow("createdAt")); subscriptionsSet.addAll(deserializer.deserialize(data.getListOrThrow("subscriptions"))); storagesSet.addAll(deserializer.deserialize(data.getListOrThrow("storages"))); nameRecordsSet.addAll(deserializer.deserialize(data.getListOrThrow("nameRecords"))); contract = (NSmartContract) Contract.fromPackedTransaction(data.getBinary("contract")); kvStore = deserializer.deserialize(data.getBinderOrThrow("kvStore")); }
public void deserealizeWith(Binder data, BiDeserializer d) { createdAt = data.getZonedDateTimeOrThrow("created_at"); expiresAt = data.getZonedDateTime("expires_at", null); revision = data.getIntOrThrow("revision"); this.references = d.deserialize(data.getList("references", null)); if (revision <= 0) throw new IllegalArgumentException("illegal revision number: " + revision); Role r = registerRole(d.deserialize(data.getBinderOrThrow("owner"))); if (!r.getName().equals("owner")) throw new IllegalArgumentException("bad owner role name"); r = registerRole(d.deserialize(data.getBinderOrThrow("created_by"))); if (!r.getName().equals("creator")) throw new IllegalArgumentException("bad creator role name"); this.data = data.getBinder("data", Binder.EMPTY); branchId = data.getString("branch_id", null); parent = d.deserialize(data.get("parent")); origin = d.deserialize(data.get("origin")); }
definition.deserializeWith(data.getBinderOrThrow("definition"), deserializer); state.deserealizeWith(data.getBinderOrThrow("state"), deserializer);
public static JSApiScriptParameters fromBinder(Binder binder) { JSApiScriptParameters scriptParameters = new JSApiScriptParameters(); JSApiCompressionEnum compression = JSApiCompressionEnum.valueOf(binder.getStringOrThrow("compression")); scriptParameters.isCompressed = (compression != JSApiCompressionEnum.RAW); scriptParameters.timeLimitMillis = binder.getIntOrThrow("time_limit"); scriptParameters.permissions = binder.getBinderOrThrow("permissions"); scriptParameters.domainMasks = binder.getListOrThrow("domainMasks"); scriptParameters.ipMasks = binder.getListOrThrow("ipMasks"); return scriptParameters; }
/** * Collect all permissions and create links to roles or new roles as appropriate */ private void scanDslPermissions() { definition.getBinderOrThrow("permissions").forEach((name, params) -> { // this complex logic is needed to process both yaml-imported structures // and regular serialized data in the same place if (params instanceof Object[]) for (Object x : (Object[]) params) loadDslPermission(name, x); else if (params instanceof List) for (Object x : (List) params) loadDslPermission(name, x); else if (params instanceof Permission) addPermission((Permission) params); else loadDslPermission(name, params); }); }
Binder requires = serializedRole.getBinderOrThrow("requires"); if(requires.containsKey("all_of")) { result.requiredAllReferences.addAll(requires.getListOrThrow("all_of"));
static public Reference fromDslBinder(Binder ref, Contract contract) { String name = ref.getString("name"); String comment = ref.getString("comment", null); Binder where = null; try { where = ref.getBinderOrThrow("where"); } catch (Exception e) { // Insert simple condition to binder with key all_of List<String> simpleConditions = ref.getList("where", null); if (simpleConditions != null) where = new Binder(all_of.name(), simpleConditions); } Reference reference = new Reference(contract); if (name == null) throw new IllegalArgumentException("Expected reference name"); reference.setName(name); reference.setComment(comment); if (where != null) reference.setConditions(where); return reference; }
@Test public void validPermissionIds() throws Exception { Contract c = Contract.fromDslFile(ROOT_CONTRACT); c.addSignerKeyFromFile(PRIVATE_KEY_PATH); byte[] sealed = c.seal(); assertTrue(c.check()); Binder s = DefaultBiMapper.serialize(c); s.getBinderOrThrow("definition","permissions"); }
public void deserializeWith(Binder data, BiDeserializer d) { registerRole(d.deserialize(data.getBinderOrThrow("issuer"))); createdAt = data.getZonedDateTimeOrThrow("created_at"); expiresAt = data.getZonedDateTime("expires_at", null); extendedType = data.getString("extended_type", null); this.data = d.deserialize(data.getBinder("data", Binder.EMPTY)); references = d.deserialize(data.getList("references", null)); Map<String, Permission> perms = d.deserialize(data.getOrThrow("permissions")); perms.forEach((id, perm) -> { perm.setId(id); addPermission(perm); }); }
deserialize(payload.getBinderOrThrow("contract"), bm);
@Test public void timeIssues() throws Exception { Binder x = Binder.fromKeysValues( "tt", ZonedDateTime.now() ); x = (Binder) DefaultBiMapper.serialize(x); // System.out.println(x); x.getBinderOrThrow("tt").put("seconds", 0); DefaultBiMapper.deserializeInPlace(x); ZonedDateTime t = x.getZonedDateTimeOrThrow("tt"); assertEquals( "1970-01-01T00:00Z", t.withZoneSameInstant(ZoneOffset.UTC).toString()); // System.out.println(""+Boss.serializeToBinder(x)); } }
@Test public void cachingNestedMaps() throws Exception { Binder a = Binder.fromKeysValues("foo", "bar"); Binder b = Binder.fromKeysValues("foo", "bar"); b.put("bar", "buzz"); Binder root = Binder.fromKeysValues("a", b, "b", b, "c", b); Binder res = Boss.unpack(Boss.pack(root)); assertEquals("buzz", res.getBinderOrThrow("c").getStringOrThrow("bar")); }
assertEquals(200, con.getResponseCode()); Binder bres = Boss.unpack((Do.read(con.getInputStream()))) .getBinderOrThrow("response"); List<Binder> ni = bres.getBinders("nodes"); String pubUrls = ni.stream().map(x -> x.getStringOrThrow("url"))