/*
 * Aipo is a groupware program developed by Aimluck,Inc.
 * Copyright (C) 2004-2008 Aimluck,Inc.
 * http://aipostyle.com/
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU 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 General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
 */
package com.aimluck.eip.modules.screens;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;

import org.apache.jetspeed.services.logging.JetspeedLogFactoryService;
import org.apache.jetspeed.services.logging.JetspeedLogger;
import org.apache.turbine.util.RunData;
import org.apache.velocity.context.Context;

import com.aimluck.eip.cayenne.om.security.TurbineUser;
import com.aimluck.eip.user.beans.UserGroupLiteBean;
import com.aimluck.eip.user.beans.UserLiteBean;
import com.aimluck.eip.user.util.UserUtils;
import com.aimluck.eip.util.ALEipUtils;

/**
 * ユーザー情報をJSONデータとして出力するクラスです。 <br />
 * 
 */
public class UserAndGroupLiteJSONScreen extends ALJSONScreen {
  /** logger */
  private static final JetspeedLogger logger = JetspeedLogFactoryService
      .getLogger(UserLiteJSONScreen.class.getName());

  protected String getJSONString(RunData rundata, Context context)
      throws Exception {
    String result = "";
    JSONArray json;

    try {
      List userList = new ArrayList();

      String mode = rundata.getParameters().getString("mode");
      if ("group".equals(mode)) {
        String groupname = rundata.getParameters().getString("groupname");

        // グループ名がLoginUserの場合はグループリストを含める。
        if(groupname.equals("LoginUser")) {
          List grlist = UserUtils.getUserGroupLiteBeans(rundata, true, true);
          
          for(Object obj : grlist) {
            UserGroupLiteBean group = (UserGroupLiteBean)obj;
            
            UserLiteBean user = new UserLiteBean();
            user.initField();
            // ユーザIDは使用禁止とする。-1固定で入れておく。
            user.setUserId(-1);
            // キーとなるのはName
            // ユーザーと区別するため、グループIDには頭に「G」を付加する。
            user.setName("G" + group.getGroupId());
            // 値はAliasName
            user.setAliasName(group.getName(), "");
            userList.add(user);
          }
        }
        // ログインユーザをリストに含める場合、true
        boolean include_loginuser = rundata.getParameters().getBoolean(
            "inc_luser", true);
        
        /* ユーザのリストを作成 */
        List userOnlyList = new ArrayList();
        userOnlyList.addAll(UserUtils.getUserLiteBeansFromGroup(
            rundata, groupname, include_loginuser));
        
        for(Object obj : userOnlyList) {
          UserLiteBean user = (UserLiteBean)obj;
          // ユーザには頭に"U"を付加。
          user.setName("U" + user.getName());
        }
        
        /* グループとユーザのリストを併せる */
        userList.addAll(userOnlyList);
       
        json = JSONArray.fromObject(userList);
      } else {
        json = new JSONArray();
      }
      result = json.toString();
    } catch (Exception e) {
      logger.error("[UserLiteJSONScreen]", e);
    }

    return result;
  }
}
