Чистый код. Создание, анализ и рефакторинг — страница 70 из 94

235                 return true;

236             default:

237                 return false;

238         }

239

240     }

241

242     /**

243      * Преобразует переданную строку в день недели.

244      *

245      * @param s  строка, представляющая день недели.

246      *

247      * @return -1, если строка не преобразуется, день недели

248      *         в противном случае.

249      */

250     public static int stringToWeekdayCode(String s) {

251

252         final String[] shortWeekdayNames

253             = DATE_FORMAT_SYMBOLS.getShortWeekdays();

254         final String[] weekDayNames = DATE_FORMAT_SYMBOLS.getWeekdays();

255

256         int result = -1;

257         s = s.trim();

258         for (int i = 0; i < weekDayNames.length; i++) {

259             if (s.equals(shortWeekdayNames[i])) {

260                 result = i;

261                 break;

262             }

263             if (s.equals(weekDayNames[i])) {

264                 result = i;

265                 break;

266             }

267         }

268         return result;

269

270     }

271

272     /**

273      * Возвращает строку, представляющую заданный день недели.

274      * 

275      * Необходимо поискать более элегантное решение.

276      *

277      * @param weekday  день недели.

278      *

279      * @return строка, представляющая заданный день недели.

280      */

281     public static String weekdayCodeToString(final int weekday) {

282

283         final String[] weekdays = DATE_FORMAT_SYMBOLS.getWeekdays();

284         return weekdays[weekday];

285

286     }


Листинг Б.1 (продолжение)

287

288     /**

289      * Возвращает массив названий месяцев.

290      *

291      * @return массив названий месяцев.

292      */

293     public static String[] getMonths() {

294

295         return getMonths(false);

296

297     }

298

299     /**

300      * Возвращает массив названий месяцев.

301      *

302      * @param shortened  флаг, указывающий на необходимость возврата

303      *                   сокращенных названий месяцев.

304      *

305      * @return массив названий месяцев.

306      */

307     public static String[] getMonths(final boolean shortened) {

308

309         if (shortened) {

310             return DATE_FORMAT_SYMBOLS.getShortMonths();

311         }

312         else {

313             return DATE_FORMAT_SYMBOLS.getMonths();

314         }

315

316     }

317

318     /**

319      * Возвращает true, если целое число code соответствует действительному месяцу.

320      *

321      * @param code  Код, проверяемый на действительность.

322      *

323      * @return true, если целое число code соответствует

324      *         действительному месяцу.

325      */

326     public static boolean isValidMonthCode(final int code) {

327

328         switch(code) {

329             case JANUARY:

330             case FEBRUARY:

331             case MARCH:

332             case APRIL:

333             case MAY:

334             case JUNE:

335             case JULY:

336             case AUGUST:

337             case SEPTEMBER:

338             case OCTOBER:

339             case NOVEMBER:

340             case DECEMBER:

341                 return true;

342             default:

343                 return false;

344         }

345

346     }

347

348     /**

349      * Возвращает квартал для заданного месяца.

350      *

351      * @param code  код месяца (1–12).

352      *

353      * @return квартал, к которому относится месяц.

354      * @throws java.lang.IllegalArgumentException

355      */

356     public static int monthCodeToQuarter(final int code) {

357

358         switch(code) {

359             case JANUARY:

360             case FEBRUARY:

361             case MARCH: return 1;

362             case APRIL:

363             case MAY:

364             case JUNE: return 2;

365             case JULY:

366             case AUGUST:

367             case SEPTEMBER: return 3;

368             case OCTOBER:

369             case NOVEMBER:

370             case DECEMBER: return 4;

371             default: throw new IllegalArgumentException(

372                 "SerialDate.monthCodeToQuarter: invalid month code.");

373         }

374

375     }

376

377     /**

378      * Возвращает строку, представляющую заданный месяц.