@Override
  public synchronized boolean check(CueSheet cs) {
    if (checkstring(cs.getTitle())) {
      return true;
    }

    if (checkstring(cs.getPerformer())) {
      return true;
    }
    log.info("Album(Title= ,{} Performer= {})", cs.getTitle(), cs.getPerformer());
    Iterator<TrackData> it_t = cs.getAllTrackData().iterator();
    return checkTrack(it_t);
  }
  @Override
  public final synchronized boolean check(CueSheet cs) {
    boolean Ret = true;
    try {
      // タイトルの重複を検査するためのマップ。
      Set<String> testSet = Collections.synchronizedSet(new HashSet<>());
      Iterator<TrackData> it_t;
      it_t = cs.getAllTrackData().iterator();
      while (it_t.hasNext()) {
        TrackData TD = it_t.next();

        final String s;
        if (TD.getTitle() != null) {
          s = TD.getTitle();
          if (testSet.contains(s) == false) {
            testSet.add(TD.getTitle());
            log.info("タイトルは重複していません。 {}", TD.getTitle());
            log.info("正常");
            Ret = Ret & true;
          } else {
            log.info("タイトルが重複しています。  {}", TD.getTitle());
            Ret = Ret & false;
          }
        } else {
          log.info("タイトルがセットされていません。");
          return false;
        }
      }
      log.info("判定結果  {}", Ret);
      return Ret;
    } catch (Exception e) {
      log.error(" エラーです。", e);
      return false;
    }
  }