/
AlbumDemo.java
90 lines (84 loc) · 3.11 KB
/
AlbumDemo.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package dustin.examples.protobuf;
import static java.lang.System.out;
import com.google.protobuf.InvalidProtocolBufferException;
import java.util.List;
/**
* Demonstrates using Protocol Buffers with Album.
*/
public class AlbumDemo
{
/**
* Generates instance of Album to be used in demonstration.
*
* @return Instance of Album to be used in demonstration.
*/
public Album generateAlbum()
{
return new Album.Builder("Songs from the Big Chair", 1985)
.artist("Tears For Fears")
.songTitle("Shout")
.songTitle("The Working Hour")
.songTitle("Everybody Wants to Rule the World")
.songTitle("Mothers Talk")
.songTitle("I Believe")
.songTitle("Broken")
.songTitle("Head Over Heels")
.songTitle("Listen")
.build();
}
/**
* Generates an instance of Album based on the provided
* bytes array.
*
* @param binaryAlbum Bytes array that should represent an
* AlbumProtos.Album based on Google Protocol Buffers
* binary format.
* @return Instance of Album based on the provided binary form
* of an Album; may be {@code null} if an error is encountered
* while trying to process the provided binary data.
*/
public Album instantiateAlbumFromBinary(final byte[] binaryAlbum)
{
Album album = null;
try
{
final AlbumProtos.Album copiedAlbumProtos = AlbumProtos.Album.parseFrom(binaryAlbum);
final List<String> copiedArtists = copiedAlbumProtos.getArtistList();
final List<String> copiedSongsTitles = copiedAlbumProtos.getSongTitleList();
album = new Album.Builder(
copiedAlbumProtos.getTitle(), copiedAlbumProtos.getReleaseYear())
.artists(copiedArtists)
.songsTitles(copiedSongsTitles)
.build();
}
catch (InvalidProtocolBufferException ipbe)
{
out.println("ERROR: Unable to instantiate AlbumProtos.Album instance from provided binary data - "
+ ipbe);
}
return album;
}
/**
* Demonstrates use of Google Protocol Buffers to write an
* {@code Album} to a Google Protocol Buffers's binary form
* and to instantiate an {@code Album} from that binary form.
*
* @param arguments Command-line arguments: none expected.
*/
public static void main(final String[] arguments)
{
final AlbumDemo instance = new AlbumDemo();
final Album album = instance.generateAlbum();
final AlbumProtos.Album albumMessage
= AlbumProtos.Album.newBuilder()
.setTitle(album.getTitle())
.addAllArtist(album.getArtists())
.setReleaseYear(album.getReleaseYear())
.addAllSongTitle(album.getSongsTitles())
.build();
final byte[] binaryAlbum = albumMessage.toByteArray();
final Album copiedAlbum = instance.instantiateAlbumFromBinary(binaryAlbum);
out.println("BEFORE Album (" + System.identityHashCode(album) + "): " + album);
out.println(" AFTER Album (" + System.identityHashCode(copiedAlbum) + "): " + String.valueOf(copiedAlbum));
}
}