1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.tika.parser.mp3;
18
19 import java.io.IOException;
20
21 import org.apache.tika.exception.TikaException;
22 import org.apache.tika.parser.mp3.ID3v2Frame.RawTag;
23 import org.apache.tika.parser.mp3.ID3v2Frame.RawTagIterator;
24 import org.xml.sax.SAXException;
25
26
27
28
29
30
31
32 public class ID3v22Handler implements ID3Tags {
33 private String title;
34 private String artist;
35 private String album;
36 private String year;
37 private String comment;
38 private String genre;
39 private String trackNumber;
40
41 public ID3v22Handler(ID3v2Frame frame)
42 throws IOException, SAXException, TikaException {
43 RawTagIterator tags = new RawV22TagIterator(frame);
44 while (tags.hasNext()) {
45 RawTag tag = tags.next();
46 if (tag.name.equals("TT2")) {
47 title = getTagString(tag.data, 0, tag.data.length);
48 } else if (tag.name.equals("TP1")) {
49 artist = getTagString(tag.data, 0, tag.data.length);
50 } else if (tag.name.equals("TAL")) {
51 album = getTagString(tag.data, 0, tag.data.length);
52 } else if (tag.name.equals("TYE")) {
53 year = getTagString(tag.data, 0, tag.data.length);
54 } else if (tag.name.equals("COM")) {
55 comment = getTagString(tag.data, 0, tag.data.length);
56 } else if (tag.name.equals("TRK")) {
57 trackNumber = getTagString(tag.data, 0, tag.data.length);
58 } else if (tag.name.equals("TCO")) {
59 String rawGenre = getTagString(tag.data, 0, tag.data.length);
60 int open = rawGenre.indexOf("(");
61 int close = rawGenre.indexOf(")");
62 if (open < close) {
63 try {
64 int genreID = Integer.parseInt(rawGenre.substring(open+1, close));
65 genre = ID3Tags.GENRES[genreID];
66 } catch(NumberFormatException ignore) {
67 }
68 }
69 }
70 }
71 }
72
73 private String getTagString(byte[] data, int offset, int length) {
74 return ID3v2Frame.getTagString(data, offset, length);
75 }
76
77 public boolean getTagsPresent() {
78 return true;
79 }
80
81 public String getTitle() {
82 return title;
83 }
84
85 public String getArtist() {
86 return artist;
87 }
88
89 public String getAlbum() {
90 return album;
91 }
92
93 public String getYear() {
94 return year;
95 }
96
97 public String getComment() {
98 return comment;
99 }
100
101 public String getGenre() {
102 return genre;
103 }
104
105 public String getTrackNumber() {
106 return trackNumber;
107 }
108
109 private class RawV22TagIterator extends RawTagIterator {
110 private RawV22TagIterator(ID3v2Frame frame) {
111 frame.super(3, 3, 1, 0);
112 }
113 }
114
115 }