/* * 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.eventlog; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.jar.Attributes; import org.apache.cayenne.exp.Expression; import org.apache.cayenne.exp.ExpressionFactory; 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.commons.field.ALDateTimeField; import com.aimluck.eip.cayenne.om.portlet.EipTEventlog; import com.aimluck.eip.cayenne.om.security.TurbineUser; import com.aimluck.eip.common.ALAbstractSelectData; import com.aimluck.eip.common.ALDBErrorException; import com.aimluck.eip.common.ALData; import com.aimluck.eip.common.ALEipConstants; import com.aimluck.eip.common.ALPageNotFoundException; import com.aimluck.eip.eventlog.util.ALEventlogUtils; import com.aimluck.eip.eventlog.util.EventlogUtils; import com.aimluck.eip.modules.actions.common.ALAction; import com.aimluck.eip.orm.Database; import com.aimluck.eip.orm.query.ResultList; import com.aimluck.eip.orm.query.SelectQuery; import com.aimluck.eip.util.ALEipUtils; /** * イベントログ検索データを管理するクラスです。 <BR> * */ public class EventlogSelectData extends ALAbstractSelectData<EipTEventlog, EipTEventlog> implements ALData { /** logger */ private static final JetspeedLogger logger = JetspeedLogFactoryService .getLogger(EventlogSelectData.class.getName()); /** イベントログの書き出し可能最大数 */ private static final int MAX_SIZE = 50000; /** イベントログの総数 */ private int eventlogSum; private ALDateTimeField start_date, end_date; private int start_date_max_day, end_date_max_day; private int view_date_max_year; /** * * @param action * @param rundata * @param context */ @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { String sort = ALEipUtils.getTemp(rundata, context, LIST_SORT_STR); if (sort == null || sort.equals("")) { ALEipUtils.setTemp(rundata, context, LIST_SORT_STR, ALEipUtils .getPortlet(rundata, context) .getPortletConfig() .getInitParameter("p2a-sort")); } String sort_type = ALEipUtils.getTemp(rundata, context, LIST_SORT_TYPE_STR); if (sort_type == null || "".equals(sort_type)) { ALEipUtils.setTemp( rundata, context, LIST_SORT_TYPE_STR, ALEipConstants.LIST_SORT_TYPE_DESC); } Calendar cal = Calendar.getInstance(); view_date_max_year = cal.get(Calendar.YEAR); start_date = new ALDateTimeField(); cal = EventlogUtils.getViewCalendar(true, rundata, context); start_date.setValue(cal.getTime()); start_date_max_day = cal.getActualMaximum(Calendar.DATE); end_date = new ALDateTimeField(); cal = EventlogUtils.getViewCalendar(false, rundata, context); end_date.setValue(cal.getTime()); end_date_max_day = cal.getActualMaximum(Calendar.DATE); super.init(action, rundata, context); } public ALDateTimeField getStartDate() { return start_date; } public int getMaxSize() { return MAX_SIZE; } public ALDateTimeField getEndDate() { return end_date; } public int getStartDateMaxDay() { return start_date_max_day; } public int getEndDateMaxDay() { return end_date_max_day; } public int getViewDateMaxYear() { return view_date_max_year; } /** * 一覧データを取得します。 <BR> * * @param rundata * @param context * @return */ @Override public ResultList<EipTEventlog> selectList(RunData rundata, Context context) { try { SelectQuery<EipTEventlog> query = getSelectQuery(rundata, context); buildSelectQueryForListView(query); buildSelectQueryForListViewSort(query, rundata, context); buildSelectQueryForDate(query, rundata, context); ResultList<EipTEventlog> list = query.getResultList(); // イベントログの総数をセットする. eventlogSum = list.getTotalCount(); return list; } catch (Exception ex) { logger.error("eventlog", ex); return null; } } /** * @param query * @param rundata * @param context */ private void buildSelectQueryForDate(SelectQuery<EipTEventlog> query, RunData rundata, Context context) { Expression exp1 = ExpressionFactory.greaterOrEqualExp( EipTEventlog.EVENT_DATE_PROPERTY, start_date.getValue()); Calendar cal = Calendar.getInstance(); cal.setTime(end_date.getValue()); cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1); Expression exp2 = ExpressionFactory .lessExp(EipTEventlog.EVENT_DATE_PROPERTY, cal.getTime()); query.andQualifier(exp1.andExp(exp2)); } public boolean isOverSize() { return getCount() > MAX_SIZE; } /** * 検索条件を設定した SelectQuery を返します。 <BR> * * @param rundata * @param context * @return */ private SelectQuery<EipTEventlog> getSelectQuery(RunData rundata, Context context) { SelectQuery<EipTEventlog> query = Database.query(EipTEventlog.class); return buildSelectQueryForFilter(query, rundata, context); } /** * ResultData に値を格納して返します。(一覧データ) <BR> * * @param obj * @return */ @Override protected Object getResultData(EipTEventlog record) { try { DateFormat df = new SimpleDateFormat("yyyy年M月d日(EE)HH:mm:ss"); EventlogResultData rd = new EventlogResultData(); rd.initField(); rd.setEventlogId(record.getEventlogId().longValue()); TurbineUser user = record.getTurbineUser(); rd.setUserFullName(user == null ? "" : new StringBuffer().append( user.getLastName()).append(" ").append(user.getFirstName()).toString()); if (user != null && user.getLastName().trim().equals("") && user.getFirstName().trim().equals("")) { rd.setUserFullName(record.getTurbineUser().getEmail()); } rd.setEventDate(df.format(record.getUpdateDate())); rd.setPortletName(ALEventlogUtils.getPortletAliasName(record .getPortletType())); rd.setEntityId(record.getEntityId().longValue()); rd.setIpAddr(record.getIpAddr()); rd.setEventName(ALEventlogUtils.getEventAliasName(record.getEventType())); rd.setNote(record.getNote()); return rd; } catch (Exception ex) { logger.error("eventlog", ex); return null; } } /** * 詳細データを取得します。 <BR> * * @param rundata * @param context * @return */ @Override public EipTEventlog selectDetail(RunData rundata, Context context) { return EventlogUtils.getEipTEventlog(rundata, context); } /** * ResultData に値を格納して返します。(詳細データ) <BR> * * @param obj * @return */ @Override protected Object getResultDataDetail(EipTEventlog record) { try { DateFormat df = new SimpleDateFormat("yyyy年MM月dd日(EE)HH:mm:ss"); EventlogResultData rd = new EventlogResultData(); rd.initField(); rd.setEventlogId(record.getEventlogId().longValue()); String userFullName = ALEipUtils.getUserFullName(record .getTurbineUser() .getUserId() .intValue()); if (userFullName != null && !userFullName.trim().equals("")) { rd.setUserFullName(userFullName); } if (userFullName == null || userFullName.trim().equals("")) { rd.setUserFullName(record.getTurbineUser().getEmail()); } rd.setEventDate(df.format(record.getUpdateDate())); rd.setPortletName(ALEventlogUtils.getPortletAliasName(record .getPortletType())); rd.setEntityId(record.getEntityId().longValue()); rd.setIpAddr(record.getIpAddr()); rd.setEventName(ALEventlogUtils.getEventAliasName(record.getEventType())); rd.setNote(record.getNote()); // 各ポートレットのデータ名を取得 String dataName = EventlogUtils.getPortletDataName(record.getPortletType(), record .getEntityId()); if (dataName != null && !"".equals(dataName)) { rd.setDataName(dataName); rd.setDataNameFlag(true); } else { // データが削除された可能性あり-DBのNOTEカラムから取得する String tmp_dataName = record.getNote(); if (tmp_dataName != null && !"".equals(tmp_dataName)) { rd.setDataName(tmp_dataName); rd.setDataNameFlag(true); } } return rd; } catch (Exception ex) { logger.error("eventlog", ex); return null; } } /** * イベントログの総数を返す. <BR> * * @return */ public int getEventlogSum() { return eventlogSum; } /** * @return * */ @Override protected Attributes getColumnMap() { Attributes map = new Attributes(); map.putValue("event_date", EipTEventlog.EVENT_DATE_PROPERTY); map.putValue("user_name", EipTEventlog.TURBINE_USER_PROPERTY + "." + TurbineUser.LAST_NAME_KANA_PROPERTY); map.putValue("portlet_id", EipTEventlog.PORTLET_TYPE_PROPERTY); map.putValue("event_type", EipTEventlog.EVENT_TYPE_PROPERTY); map.putValue("ip_addr", EipTEventlog.IP_ADDR_PROPERTY); return map; } /** * * @param id * @return */ public boolean isMatch(int id1, long id2) { return id1 == (int) id2; } }