예제 #1
0
  /**
   * 根据设置的参数构造相应的 {@code Fetcher} 对象。<br>
   * 构造完成后,将会重置该 {@code FetcherBuilder}。<br>
   * 如果参数未设置或设置不全将会抛出 {@code IllegalStateException} 异常。
   *
   * @return {@code Fetcher} 对象
   * @throws IOException 构造失败
   */
  public Fetcher build() throws IOException {
    try {
      requireNonNull(site, "The parameter 'site' haven't been set yet.");
      requireNonNull(page, "The parameter 'page' haven't been set yet.");
    } catch (NullPointerException e) {
      throw new IllegalStateException(e);
    }

    if (isNullOrEmpty(userAgent)) userAgent = UserAgent.getUserAgent();

    if (site.equals("*")) site = matchSiteFromPage(page);

    Fetcher fetcher;

    switch (site) {
      case "uta-net.com":
        fetcher = new UtaNetFetcher(page, userAgent);
        break;
      case "j-lyric.net":
        fetcher = new JLyricFetcher(page, userAgent);
        break;
      case "utamap.com":
        fetcher = new UtaMapFetcher(page, userAgent);
        break;
      case "kasi-time.com":
        fetcher = new KasiTimeFetcher(page, userAgent);
        break;
      case "kashinavi.com":
        fetcher = new KashiNaviFetcher(page, userAgent);
        break;
      case "kget.jp":
        fetcher = new KGetFetcher(page, userAgent);
        break;
      case "utaten.com":
        fetcher = new UtaTenFetcher(page, userAgent);
        break;
      case "animap.jp":
        fetcher = new AniMapFetcher(page, userAgent);
        break;
      case "evesta.jp":
        fetcher = new EvestaFetcher(page, userAgent);
        break;
      case "jtw.zaq.ne.jp/animesong":
        fetcher = new AnimeSongFetcher(page, userAgent);
        break;
      case "joysound.com":
        fetcher = new JoySoundFetcher(page, userAgent);
        break;
      case "petitlyrics.com":
        fetcher = new PetitLyricsFetcher(page, userAgent);
        break;
      default:
        throw new IllegalArgumentException("Unable to resolve the parameter 'site': " + site);
    }

    return fetcher;
  }