/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2011 Aimluck,Inc.
 * http://www.aipo.com
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.aimluck.eip.schedule;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import com.aimluck.commons.field.ALDateTimeField;
import com.aimluck.commons.field.ALStringField;
import com.aimluck.eip.common.ALEipUser;
import com.aimluck.eip.fileupload.beans.FileuploadBean;
import com.aimluck.eip.util.ALEipUtils;

/**
 * 詳細スケジュールの検索データを管理するクラスです。
 * 
 */
public class ScheduleDetailResultData extends ScheduleResultData {

  /** <code>user</code> ユーザー */
  private ALEipUser user;

  /** <code>place</code> 場所 */
  private ALStringField place;

  /** <code>note</code> 内容 */
  private ALStringField note;

  /** <code>createUser</code> 登録ユーザー */
  private ALEipUser createUser;

  /** <code>updateUser</code> 更新ユーザー */
  private ALEipUser updateUser;

  /** <code>createDate</code> 登録日時 */
  private ALDateTimeField createDate;

  /** <code>updateDate</code> 更新日時 */
  private ALDateTimeField updateDate;

  /** <code>text</code> テキスト */
  private ALStringField text;

  // add start
  // 主催者
  /** <code>ownerUser</code> 主催ユーザー */
  private ALEipUser ownerUser;

  // 有効期限対応
  /** <code>text</code> 期限テキスト */
  private ALStringField limitText;

  // add end

  /** <code>is_span</code> 期間スケジュールかどうか */
  boolean is_span;

  /** <code>is_limit</code> 期限があるかどうか */
  boolean is_limit;

  /** <code>is_createuser</code> 登録ユーザーかどうか */
  private boolean is_createuser;

  // add start 要件No.18 会議案内ファイル添付
  /** 添付ファイルリスト */
  private List<FileuploadBean> attachmentFileList;

  // add end

  /*
   * 
   */
  @Override
  public void initField() {
    // スーパークラスのメソッドを呼び出します。
    super.initField();
    // 場所
    place = new ALStringField();
    // 内容
    note = new ALStringField();
    note.setTrim(false);
    // テキスト
    text = new ALStringField();
    text.setValue("");
    // add start
    // 期限テキスト
    limitText = new ALStringField();
    limitText.setValue("");
    // add end
    // 登録日時
    createDate = new ALDateTimeField("yyyy年M月d日");
    // 更新日時
    updateDate = new ALDateTimeField("yyyy年M月d日");

    // add start 要件No.18 会議案内ファイル添付
    attachmentFileList = new ArrayList<FileuploadBean>();
    // add end
  }

  /**
   * 内容を取得します。
   * 
   * @return
   */
  public String getNote() {
    return ALEipUtils.getMessageList(note.getValue());
  }

  public String getNoteStr() {
    return note.getValue();
  }

  /**
   * 場所を取得します。
   * 
   * @return
   */
  @Override
  public ALStringField getPlace() {
    return place;
  }

  /**
   * 内容を取得します。
   * 
   * @param string
   */
  public void setNote(String string) {
    note.setValue(string);
  }

  /**
   * 場所を設定します。
   * 
   * @param string
   */
  @Override
  public void setPlace(String string) {
    place.setValue(string);
  }

  /**
   * ユーザーを取得します。
   * 
   * @return
   */
  public ALEipUser getUser() {
    return user;
  }

  /**
   * 主催ユーザーを設定します。
   * 
   * @param ownerUser
   *            設定する主催ユーザー
   */
  public void setOwnerUser(ALEipUser ownerUser) {
    this.ownerUser = ownerUser;
  }

  /**
   * 主催ユーザーを取得します。
   * 
   * @return 主催ユーザー
   */
  public ALEipUser getOwnerUser() {
    return ownerUser;
  }

  /**
   * ユーザーを設定します。
   * 
   * @param user
   */
  public void setUser(ALEipUser user) {
    this.user = user;
  }

  /**
   * 登録日時を取得します。
   * 
   * @return
   */
  public ALDateTimeField getCreateDate() {
    return createDate;
  }

  /**
   * 登録ユーザーを取得します。
   * 
   * @return
   */
  public ALEipUser getCreateUser() {
    return createUser;
  }

  /**
   * 更新日時を取得します。
   * 
   * @return
   */
  public ALDateTimeField getUpdateDate() {
    return updateDate;
  }

  /**
   * 更新ユーザーを取得します。
   * 
   * @return
   */
  public ALEipUser getUpdateUser() {
    return updateUser;
  }

  /**
   * 登録日時を設定します。
   * 
   * @param date
   */
  public void setCreateDate(Date date) {
    createDate.setValue(date);
  }

  /**
   * 登録ユーザーを設定します。
   * 
   * @param user
   */
  public void setCreateUser(ALEipUser user) {
    createUser = user;
  }

  /**
   * 更新日時を設定します。
   * 
   * @param date
   */
  public void setUpdateDate(Date date) {
    updateDate.setValue(date);
  }

  /**
   * 更新ユーザーを設定します。
   * 
   * @param user
   */
  public void setUpdateUser(ALEipUser user) {
    updateUser = user;
  }

  /**
   * 期限があるかどうかを取得します。
   * 
   * @return is_limit
   */
  public boolean isLimit() {
    return is_limit;
  }

  /**
   * 期限があるかどうかを設定します。
   * 
   * @param is_limit
   */
  public void setLimit(boolean is_limit) {
    this.is_limit = is_limit;
  }

  /**
   * 期間スケジュールかどうかを取得します。
   * 
   * @return is_span
   */
  public boolean isSpan() {
    return is_span;
  }

  /**
   * 期間スケジュールかどうかを設定します。
   * 
   * @param is_span
   */
  public void setSpan(boolean is_span) {
    this.is_span = is_span;
  }

  /**
   * テキストを追加します。
   * 
   * @param string
   */
  public void addText(String string) {
    text.setValue(new StringBuffer().append(text.getValue()).append(string).toString());
  }

  /**
   * テキストを取得します。
   * 
   * @return
   */
  public ALStringField getText() {
    return text;
  }

  /**
   * 登録ユーザーかどうかのフラグ。
   * 
   * @return
   */
  public boolean isCreateuser() {
    return is_createuser;
  }

  /**
   * 登録ユーザーかどうかを設定します。
   * 
   * @param is_span
   */
  public void setIsCreateuser(boolean is_createuser) {
    this.is_createuser = is_createuser;
  }

  /**
   * 日付を取得します。
   * 
   * @return
   */
  public String getDateForCell() {
    if (getStartDate().getValue().equals(getEndDate().getValue())) {
      return getStartDate().toString();
    } else if ((getStartDate().getYear().equals(getEndDate().getYear()) && getStartDate().getMonth().equals(getEndDate().getMonth()) && getStartDate()
      .getDay()
      .equals(getEndDate().getDay()))
      || isRepeat()) {
      return new StringBuffer().append(getStartDate().toString()).append('-').append(getEndDate().toString()).toString();
    } else {
      return new StringBuffer().append(getStartDate().toString()).append('-').append("24:00").toString();
    }
  }

  // add start
  // 有効期限対応

  /**
   * 有効期限テキストに文字列を追加します。
   * 
   * @param string
   *            有効期限テキストに追加したい文字列
   */
  public void addLimitText(String string) {
    limitText.setValue(limitText.getValue() + string);
  }

  /**
   * 有効期限テキストを返します。
   * 
   * @return 有効期限テキスト
   */
  public ALStringField getLimitText() {
    return limitText;
  }

  // 日またぎ対応
  /**
   * 開始日時より、年月日のみの日付オブジェクトを返します。
   * 
   * @return 開始日時より年月日のみの日付オブジェクト
   */
  public Date getStartDateYMD() {
    Calendar cal = new GregorianCalendar();
    cal.clear();
    cal.set(Integer.parseInt(getStartDate().getYear()), Integer.parseInt(getStartDate().getMonth()) - 1, Integer.parseInt(getStartDate().getDay()));
    return cal.getTime();
  }

  /**
   * 終了日時より、年月日のみの日付オブジェクトを返します。
   * 
   * @return 終了日時より年月日のみの日付オブジェクト
   */
  public Date getEndDateYMD() {
    Calendar cal = new GregorianCalendar();
    cal.clear();
    cal.set(Integer.parseInt(getEndDate().getYear()), Integer.parseInt(getEndDate().getMonth()) - 1, Integer.parseInt(getEndDate().getDay()));
    return cal.getTime();
  }

  /**
   * 開始日時より、時刻の文字列を返します。
   * 
   * @return 開始日時の[時間（24時間表記1～2桁）":"分（2桁固定）]形式文字列
   */
  public String getStartTimeText() {
    SimpleDateFormat df = new SimpleDateFormat("H:mm");
    return df.format(getStartDate().getValue());
  }

  /**
   * 終了日時より、時刻の文字列を返します。
   * 
   * @return 終了日時の[時間（24時間表記1～2桁）":"分（2桁固定）]形式文字列
   */
  public String getEndTimeText() {
    SimpleDateFormat df = new SimpleDateFormat("H:mm");
    return df.format(getEndDate().getValue());
  }

  // add end

  // add start 要件No.18 会議案内ファイル添付
  public List<FileuploadBean> getAttachmentFileList() {
    return attachmentFileList;
  }

  public void setAttachmentFiles(List<FileuploadBean> list) {
    attachmentFileList = list;
  }
  // add end
}
