1 package org.musicontroller.dao;
2
3 import java.util.Calendar;
4 import java.util.Date;
5 import java.util.GregorianCalendar;
6
7 import org.varienaja.util.DateTools;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 public class PlaylistKey {
28
29 private Long _id;
30 private Integer _kind;
31 private boolean _isSpecial;
32 private int _dd;
33 private int _mm;
34 private int _yyyy;
35
36 public PlaylistKey(long id) {
37 _isSpecial = false;
38 _id = null;
39 _kind = null;
40 decrypt(id);
41 }
42
43
44
45
46
47
48
49 public PlaylistKey(int kind, Date date) {
50 _isSpecial = true;
51 _kind = kind;
52
53 GregorianCalendar g=new GregorianCalendar();
54 g.setTime(date);
55 _yyyy = g.get(Calendar.YEAR);
56 _mm = g.get(Calendar.MONTH)+1;
57 _dd = g.get(Calendar.DAY_OF_MONTH);
58 }
59
60
61
62
63
64 private void decrypt(long id) {
65 _id = id;
66 if (id<0) {
67 _isSpecial = true;
68
69 _kind = Long.valueOf(id % 10000).intValue();
70 if (id<-9999) {
71 _dd = (int) (-id / 10000) % 100;
72 _mm = (int) (-id / 1000000) % 100;
73 _yyyy = (int) (-id / 100000000) % 10000;
74 }
75 }
76 }
77
78
79
80
81
82 public boolean isSpecial() {
83 return _isSpecial;
84 }
85
86
87
88
89 public long getId() {
90 if (_isSpecial) {
91 return calcId();
92 } else {
93 return _id;
94 }
95 }
96
97
98
99
100
101 public int getKind() {
102 return _kind;
103 }
104
105
106
107
108
109 public Date getFilter() {
110 if (_isSpecial && _yyyy!=0) {
111 return DateTools.getDate(_yyyy, _mm-1, _dd);
112 } else {
113 return null;
114 }
115 }
116
117
118
119
120 public void addMonth() {
121 if (_isSpecial) {
122 _mm++;
123 if (_mm>12) {
124 _yyyy++;
125 _mm=1;
126 }
127 }
128 }
129
130
131
132
133 public void substractMonth() {
134 if (_isSpecial) {
135 _mm--;
136 if (_mm<1) {
137 _yyyy--;
138 _mm=12;
139 }
140 }
141 }
142
143
144
145
146 private long calcId() {
147 return _kind - 10000l*_dd - 1000000l*_mm - 100000000l*_yyyy;
148 }
149
150
151 }