private void saveMetadata(Map<String, String> metadata) { if (metadata != null) { KeanuSavedBayesNet.Metadata.Builder metadataBuilder = KeanuSavedBayesNet.Metadata.newBuilder(); String[] metadataKeys = metadata.keySet().toArray(new String[0]); Arrays.sort(metadataKeys); for (String metadataKey : metadataKeys) { metadataBuilder.putMetadataInfo(metadataKey, metadata.get(metadataKey)); } modelBuilder.setMetadata(metadataBuilder); } }
@Test public void metadataCanBeSavedToProtobuf() throws IOException { Vertex vertex = new ConstantIntegerVertex(1); BayesianNetwork net = new BayesianNetwork(vertex.getConnectedGraph()); Map<String, String> metadata = ImmutableMap.of("Author", "Some Author", "Tag", "MyBayesNet"); ByteArrayOutputStream writer = new ByteArrayOutputStream(); ProtobufSaver protobufSaver = new ProtobufSaver(net); protobufSaver.save(writer, true, metadata); KeanuSavedBayesNet.Model parsedModel = KeanuSavedBayesNet.Model.parseFrom(writer.toByteArray()); KeanuSavedBayesNet.Metadata.Builder metadataBuilder = KeanuSavedBayesNet.Metadata.newBuilder(); String[] metadataKeys = metadata.keySet().toArray(new String[0]); Arrays.sort(metadataKeys); for (String metadataKey : metadataKeys) { metadataBuilder.putMetadataInfo(metadataKey, metadata.get(metadataKey)); } assertEquals(parsedModel.getMetadata().getMetadataInfoMap(), metadataBuilder.getMetadataInfoMap()); }
@Test public void jsonSaverSavesMetadata() throws IOException { KeanuSavedBayesNet.Metadata.Builder metadataBuilder = KeanuSavedBayesNet.Metadata.newBuilder(); for (Map.Entry<String, String> entry : someMetadata.entrySet()) { metadataBuilder.putMetadataInfo(entry.getKey(), entry.getValue()); } KeanuSavedBayesNet.Model.Builder modelBuilder = KeanuSavedBayesNet.Model.newBuilder(); JsonFormat.parser().merge(outputStream.toString(), modelBuilder); KeanuSavedBayesNet.Model parsedModel = modelBuilder.build(); assertTrue(parsedModel.hasMetadata()); assertEquals(parsedModel.getMetadata().getMetadataInfoMap().size(), (metadataBuilder.getMetadataInfoMap().size())); assertThat(parsedModel.getMetadata().getMetadataInfoMap().entrySet(), everyItem(isIn(metadataBuilder.getMetadataInfoMap().entrySet()))); }