/* * Aipo is a groupware program developed by TOWN, Inc. * Copyright (C) 2004-2015 TOWN, 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.userfacility.util; import java.util.ArrayList; import java.util.List; import org.apache.cayenne.DataRow; import org.apache.jetspeed.services.logging.JetspeedLogFactoryService; import org.apache.jetspeed.services.logging.JetspeedLogger; import org.apache.turbine.util.RunData; import com.aimluck.eip.cayenne.om.account.VEipMUserGroupList; import com.aimluck.eip.orm.Database; import com.aimluck.eip.orm.query.ResultList; import com.aimluck.eip.orm.query.SQLTemplate; import com.aimluck.eip.userfacility.beans.UserAllLiteBean; import com.aimluck.eip.userfacility.beans.UserAllLiteBean.Type; /** * */ public class UserAllUtils { /** logger */ @SuppressWarnings("unused") private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(UserAllUtils.class.getName()); public static List<UserAllLiteBean> getUserAllLiteBeans(RunData rundata, int filterId, Type filterType, boolean groupOnly) { List<VEipMUserGroupList> list = getUserAllList(rundata, filterId, filterType, -1, -1, groupOnly); List<UserAllLiteBean> results = new ArrayList<UserAllLiteBean>(); for (VEipMUserGroupList model : list) { UserAllLiteBean bean = new UserAllLiteBean(); bean.initField(); bean.setId(model.getId()); bean.setType(Type.valueOf(model.getType())); bean.setName(model.getName()); results.add(bean); } return results; } public static ResultList<VEipMUserGroupList> getUserAllList(RunData rundata, int filterId, Type filterType) { return getUserAllList(rundata, filterId, filterType, -1, -1, false); } public static ResultList<VEipMUserGroupList> getUserAllList(RunData rundata, int filterId, Type filterType, int page, int limit, boolean groupOnly) { StringBuilder select = new StringBuilder(); boolean isFirst = true; if (Type.fg.equals(filterType) && filterId > 0) { } else { select .append(" SELECT 10 * t0.group_id + 1 AS uid, t0.group_id AS id, t0.group_alias_name AS name, 'ug' AS type, t0.group_id AS sort, 1 as pos FROM turbine_group t0"); select.append(" WHERE t0.owner_id = 1 "); isFirst = false; } if (Type.ug.equals(filterType) && filterId > 0) { select.append(" AND t0.group_id = #bind($filterId) "); } else { if (!groupOnly) { if (!isFirst) { select.append(" UNION ALL"); } select .append(" SELECT 10 * t0.group_id + 2 AS uid, t0.group_id AS id, t0.group_name AS name, 'fg' AS type, t0.group_id AS sort, 2 as pos FROM eip_m_facility_group t0"); if (Type.fg.equals(filterType) && filterId > 0) { select.append(" WHERE t0.group_id = #bind($filterId) "); } } } if (Type.fg.equals(filterType) && filterId > 0) { } else { select.append(" UNION ALL"); if (Database.isJdbcPostgreSQL()) { select .append(" SELECT DISTINCT 10 * t1.user_id + 3 AS uid, t1.user_id AS id, t1.last_name || ' ' || t1.first_name AS name, 'u' AS type, t3.position AS sort, 3 as pos"); select.append(" FROM turbine_user_group_role AS t0"); } else { select .append(" SELECT DISTINCT 10 * t1.user_id + 3 AS uid, t1.user_id AS id, CONCAT(t1.last_name,' ',t1.first_name) AS name, 'u' AS type, t3.position AS sort, 3 as pos"); select.append(" FROM turbine_user_group_role AS t0"); } select.append(" LEFT JOIN turbine_user AS t1 ON t0.user_id = t1.user_id"); select .append(" LEFT JOIN turbine_group AS t2 ON t0.group_id = t2.group_id"); select .append(" LEFT JOIN eip_m_user_position AS t3 ON t1.user_id = t3.user_id WHERE ((t1.user_id > 3) AND (t1.company_id = 1) AND (t1.disabled <> 'T'))"); } if (Type.ug.equals(filterType) && filterId > 0) { select.append(" AND t0.group_id = #bind($filterId) "); } else { if (!groupOnly) { select.append(" UNION ALL"); select .append(" SELECT 10 * t0.facility_id + 4 AS uid, t0.facility_id AS id, t0.facility_name AS name, 'f' AS type, t0.sort AS sort, 4 as pos"); select.append(" FROM eip_m_facility AS t0"); select .append(" LEFT JOIN eip_m_facility_group_map AS t1 ON t0.facility_id = t1.facility_id"); select .append(" LEFT JOIN eip_m_facility_group AS t2 ON t1.group_id = t2.group_id"); if (Type.fg.equals(filterType) && filterId > 0) { select.append(" WHERE t1.group_id = #bind($filterId) "); } } } StringBuilder last = new StringBuilder(); last.append(" ORDER BY pos, sort"); SQLTemplate<VEipMUserGroupList> countQuery = Database.sql(VEipMUserGroupList.class, "SELECT COUNT(*) as c FROM (" + select.toString() + ") as uCount"); if (filterType != null && filterId > 0) { countQuery.param("filterId", filterId); } int countValue = 0; if (page > 0 && limit > 0) { List<DataRow> fetchCount = countQuery.fetchListAsDataRow(); for (DataRow row : fetchCount) { countValue = ((Long) row.get("c")).intValue(); } int offset = 0; if (limit > 0) { int num = ((int) (Math.ceil(countValue / (double) limit))); if ((num > 0) && (num < page)) { page = num; } offset = limit * (page - 1); } else { page = 1; } last.append(" LIMIT "); last.append(limit); last.append(" OFFSET "); last.append(offset); } SQLTemplate<VEipMUserGroupList> query = Database.sql(VEipMUserGroupList.class, select.toString() + last.toString()); if (filterType != null && filterId > 0) { query.param("filterId", filterId); } List<VEipMUserGroupList> list = query.fetchList(); if (page > 0 && limit > 0) { return new ResultList<VEipMUserGroupList>(list, page, limit, countValue); } else { return new ResultList<VEipMUserGroupList>(list, -1, -1, list.size()); } } }