1 package org.musicontroller.gui.edit;
2
3 import org.musicontroller.core.Contract_PS;
4 import org.musicontroller.core.Playlist;
5 import org.varienaja.util.DenseSet;
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class TrackList {
21
22
23
24
25 private int _trackcount;
26
27
28
29
30 private DenseSet _tracks;
31
32
33
34
35 private int _highestIndexNr;
36
37
38
39
40
41 public TrackList() {
42 _trackcount = 0;
43 _tracks = new DenseSet();
44 _highestIndexNr = -100;
45 }
46
47
48
49
50
51 public int getTrackCount() {
52 return _trackcount;
53 }
54
55
56
57
58
59
60
61
62 public void add(int trackno) {
63 if (trackno<0) {
64 return;
65 } else if (trackno==0) {
66 _trackcount++;
67 _tracks.add(trackno);
68 } else if(!contains(trackno)) {
69 _trackcount++;
70 _tracks.add(trackno);
71 }
72 }
73
74
75
76
77
78
79 public String getTrackListing() {
80 return _tracks.prettyPrint();
81 }
82
83
84
85
86 public boolean equals(Object other) {
87 if(other==null) {
88 return false;
89 }
90 if (other instanceof TrackList) {
91 TrackList otherList = (TrackList) other;
92 return this.getTrackCount()==otherList.getTrackCount() && this._tracks.equals(otherList._tracks);
93 } else {
94 return false;
95 }
96 }
97
98 public int hashCode() {
99 return 17 * getTrackCount() + _tracks.hashCode();
100 }
101
102
103
104
105
106
107
108 public static TrackList createInstance(String tracks) {
109 TrackList result = new TrackList();
110 if(tracks==null) {
111 return result;
112 }
113 result.setTracks(tracks);
114 return result;
115 }
116
117
118
119
120
121
122 public static TrackList createInstance(Playlist playlist) {
123 TrackList result = new TrackList();
124 if(playlist!=null) {
125 for(Contract_PS contract: playlist.getSongs()) {
126 result.add(contract.getRowno());
127 }
128 }
129 return result;
130 }
131
132
133
134
135
136
137 public boolean contains(int trackno) {
138 return _tracks.contains(trackno);
139 }
140
141
142
143
144
145
146
147 public void setHighestIndexNr(int highestTrackNo) {
148 this._highestIndexNr = highestTrackNo;
149 }
150
151
152
153
154
155 public int getHighestIndexNr() {
156 return this._highestIndexNr;
157 }
158
159
160
161
162
163
164 public boolean containsAllSongs() {
165 return getHighestIndexNr() <= getTrackCount();
166 }
167
168
169
170
171
172
173
174 public void setTracks(String tracks) {
175 String[] tracknos = tracks.split("\\s*,\\s*");
176 for(String range: tracknos) {
177 range = range.trim();
178 String[] rangebounds = range.split("\\s*-\\s*");
179 if(rangebounds.length>1) {
180 String lwb = rangebounds[0];
181 String upb = rangebounds[1];
182 int lwbno = -1;
183 int upbno = -1;
184 try {
185 lwbno = Integer.parseInt(lwb);
186 upbno = Integer.parseInt(upb);
187 } catch(NumberFormatException nfe) {
188
189 }
190 for (int trackindex=lwbno; trackindex<=upbno;trackindex++) {
191 add(trackindex);
192 }
193 } else {
194 try {
195 int inttrackno = Integer.parseInt(range);
196 add(inttrackno);
197 } catch(NumberFormatException nfe) {
198
199 }
200 }
201 }
202 }
203
204
205
206
207 public String toString() {
208 return _tracks.prettyPrint();
209 }
210 }