102 * Назначает субправило.
103 *
104 * @param subrule Правило ежегодной даты, определяющее эталонную дату
105 * для текущего правила.
106 */
107 public void setSubrule(final AnnualDateRule subrule) {
108 this.subrule = subrule;
109 }
110
111 /**
112 * Возвращает день недели для текущего правила.
113 *
114 * @return день недели для текущего правила.
115 */
116 public int getDayOfWeek() {
117 return this.dayOfWeek;
118 }
119
120 /**
121 * Назначает день недели для текущего правила.
122 *
123 * @param dayOfWeek день недели (SerialDate.MONDAY,
124 * SerialDate.TUESDAY и т.д.).
125 */
126 public void setDayOfWeek(final int dayOfWeek) {
127 this.dayOfWeek = dayOfWeek;
128 }
129
130 /**
131 * Возвращает атрибут ‘relative’, который определяет,
132 * *какой* день недели нас интересует (SerialDate.PRECEDING,
133 * SerialDate.NEAREST или SerialDate.FOLLOWING).
134 *
135 * @return атрибут 'relative'.
136 */
137 public int getRelative() {
138 return this.relative;
139 }
140
141 /**
142 * Задает атрибут 'relative' (SerialDate.PRECEDING, SerialDate.NEAREST,
143 * SerialDate.FOLLOWING).
144 *
145 * @param relative определяет, *какой* день недели выбирается
146 * текущим правилом.
147 */
148 public void setRelative(final int relative) {
149 this.relative = relative;
150 }
151
152 /**
153 * Создает копию текущего правила.
154 *
155 * @return копия текущего правила.
156 *
157 * @throws CloneNotSupportedException this should never happen.
158 */
159 public Object clone() throws CloneNotSupportedException {
160 final RelativeDayOfWeekRule duplicate
161 = (RelativeDayOfWeekRule) super.clone();
162 duplicate.subrule = (AnnualDateRule) duplicate.getSubrule().clone();
163 return duplicate;
164 }
165
166 /**
167 * Возвращает дату, сгенерированную текущим правилом для заданного года.
168 *
169 * @param year год (1900 <= год <= 9999).
170 *
171 * @return дата, сгенерированная правилом для заданного года
172 * (допускается
null
).
173 */
174 public SerialDate getDate(final int year) {
175
176 // Проверить аргумент...
177 if ((year < SerialDate.MINIMUM_YEAR_SUPPORTED)
178 || (year > SerialDate.MAXIMUM_YEAR_SUPPORTED)) {