/*
* 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.util;
import java.util.Calendar;
import java.util.List;
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.eip.cayenne.om.portlet.EipMAddressGroup;
import com.aimluck.eip.cayenne.om.portlet.EipMAddressbook;
import com.aimluck.eip.cayenne.om.portlet.EipMAddressbookCompany;
import com.aimluck.eip.cayenne.om.portlet.EipMMailAccount;
import com.aimluck.eip.cayenne.om.portlet.EipTBlogEntry;
import com.aimluck.eip.cayenne.om.portlet.EipTBlogThema;
import com.aimluck.eip.cayenne.om.portlet.EipTCabinetFile;
import com.aimluck.eip.cayenne.om.portlet.EipTCabinetFolder;
import com.aimluck.eip.cayenne.om.portlet.EipTCommonCategory;
import com.aimluck.eip.cayenne.om.portlet.EipTEventlog;
import com.aimluck.eip.cayenne.om.portlet.EipTMemo;
import com.aimluck.eip.cayenne.om.portlet.EipTMsgboardCategory;
import com.aimluck.eip.cayenne.om.portlet.EipTMsgboardTopic;
import com.aimluck.eip.cayenne.om.portlet.EipTNote;
import com.aimluck.eip.cayenne.om.portlet.EipTSchedule;
import com.aimluck.eip.cayenne.om.portlet.EipTTimecard;
import com.aimluck.eip.cayenne.om.portlet.EipTTodo;
import com.aimluck.eip.cayenne.om.portlet.EipTTodoCategory;
import com.aimluck.eip.cayenne.om.portlet.EipTWorkflowCategory;
import com.aimluck.eip.cayenne.om.portlet.EipTWorkflowRequest;
import com.aimluck.eip.cayenne.om.security.TurbineGroup;
import com.aimluck.eip.common.ALEipConstants;
import com.aimluck.eip.orm.Database;
import com.aimluck.eip.orm.query.SelectQuery;
import com.aimluck.eip.services.eventlog.ALEventlogConstants;
import com.aimluck.eip.util.ALEipUtils;
import com.aimluck.eip.util.ALLocalizationUtils;
/**
* イベントログのユーティリティクラスです。 <BR>
*
*/
public class EventlogUtils {
/** logger */
private static final JetspeedLogger logger = JetspeedLogFactoryService
.getLogger(EventlogUtils.class.getName());
public static final String VIEW_DATE_YEAR = "view_date_year";
public static final String VIEW_DATE_MONTH = "view_date_month";
public static final String VIEW_DATE_DAY = "view_date_day";
public static final String EVENTLOG_PORTLET_NAME = "Eventlog";
/**
* @param start_end
* true=>start, false =>end
* @param rundata
* @param context
* @return
*/
public static Calendar getViewCalendar(boolean start_end, RunData rundata,
Context context) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
if (start_end) {
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1);
}
int[] par = { Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH };
String[] str = { "_date_year", "_date_month", "_date_day" };
String head = (start_end) ? "start" : "end";
for (int i = 0; i < str.length; i++) {
str[i] = head.concat(str[i]);
setCalendar(cal, par[i], str[i], rundata, context);
}
return cal;
}
/**
* @param cal
* @param par
* @param viewdate
* @param rundata
* @param context
*/
private static void setCalendar(Calendar cal, int par, String viewdate,
RunData rundata, Context context) {
String temp = ALEipUtils.getTemp(rundata, context, viewdate);
String idParam = rundata.getParameters().getString(viewdate);
if (idParam == null && temp == null) {
} else if (idParam != null) {
ALEipUtils.setTemp(rundata, context, viewdate, idParam);
int i = Integer.parseInt(idParam);
if (par == Calendar.MONTH) {
i--;
}
cal.set(par, i);
} else if (temp != null) {
ALEipUtils.setTemp(rundata, context, viewdate, temp);
int i = Integer.parseInt(temp);
if (par == Calendar.MONTH) {
i--;
}
cal.set(par, i);
}
}
/**
* イベントログオブジェクトモデルを取得します。 <BR>
*
* @param rundata
* @param context
* @return
*/
public static EipTEventlog getEipTEventlog(RunData rundata, Context context) {
String logid =
ALEipUtils.getTemp(rundata, context, ALEipConstants.ENTITY_ID);
try {
if (logid == null || Integer.valueOf(logid) == null) {
// eventlog IDが空の場合
logger.debug("[EventlogUtils] Empty ID...");
return null;
}
Expression exp =
ExpressionFactory.matchDbExp(EipTEventlog.EVENTLOG_ID_PK_COLUMN, logid);
SelectQuery<EipTEventlog> query = Database.query(EipTEventlog.class, exp);
List<EipTEventlog> logs = query.fetchList();
if (logs == null || logs.size() == 0) {
// 指定した Eventlog ID のレコードが見つからない場合
logger.debug("[EventlogUtils] Not found ID...");
return null;
}
return logs.get(0);
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ポートレットタイプを元に、それぞれのデータ名を取得します。 <BR>
* 返すデータがない操作では、nullを返します
*
* @param portletType
* @param entityId
* @return dataName
*/
public static String getPortletDataName(int portletType, int entityId) {
if (portletType == ALEventlogConstants.PORTLET_TYPE_NONE) {
return null;
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_LOGIN) {
return null;
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_LOGOUT) {
return null;
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_ACCOUNT) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_AJAXSCHEDULEWEEKLY) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_BLOG_ENTRY) {
return getBlogEntryName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_BLOG_THEMA) {
return getBlogEntryThema(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_WORKFLOW) {
return getWorkFlowRequestName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_WORKFLOW_CATEGORY) {
return getWorkFlowCategoryName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_TODO) {
return getTodoName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_TODO_CATEGORY) {
return getTodoCategoryName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_TIMECARD) {
return getTimecardName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_ADDRESSBOOK) {
return getAddressBookName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_ADDRESSBOOK_COMPANY) {
return getAddressBookCompanyName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_ADDRESSBOOK_GROUP) {
return getAddressBookGroupName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_MEMO) {
return getMemoName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_MSGBOARD_TOPIC) {
return getMsgboardTopicName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_MSGBOARD_CATEGORY) {
return getMsgboardCategoryName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_EXTERNALSEARCH) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_MYLINK) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_WHATSNEW) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_CABINET_FILE) {
return getCabinetFileName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_CABINET_FOLDER) {
return getCabinetFolderName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_WEBMAIL) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_WEBMAIL_ACCOUNT) {
return getWebMailAccountName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_SCHEDULE) {
return getScheduleName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_MANHOUR) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_ACCOUNTPERSON) {
return null;
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_MYGROUP) {
return getMyGroupName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_PAGE) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_CELLULAR) {
return "nothing";
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_NOTE) {
return getNoteName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_COMMON_CATEGORY) {
return getCommonCategoryName(entityId);
} else if (portletType == ALEventlogConstants.PORTLET_TYPE_TIMELINE) {
return null;
} else {
return "nothing";
}
}
/**
* 社外グループ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getAddressBookGroupName(int entityId) {
try {
EipMAddressGroup group =
Database.get(EipMAddressGroup.class, (long) entityId);
if (group == null) {
return null;
}
String dataName = group.getGroupName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* 会社名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getAddressBookCompanyName(int entityId) {
try {
EipMAddressbookCompany company =
Database.get(EipMAddressbookCompany.class, (long) entityId);
if (company == null) {
return null;
}
String dataName = company.getCompanyName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* アドレス帳に登録した名前を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getAddressBookName(int entityId) {
try {
EipMAddressbook address =
Database.get(EipMAddressbook.class, (long) entityId);
if (address == null) {
return null;
}
String dataName =
new StringBuffer().append(address.getLastName()).append(" ").append(
address.getLastName()).toString();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ブログテーマ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getBlogEntryThema(int entityId) {
try {
EipTBlogThema thema = Database.get(EipTBlogThema.class, (long) entityId);
if (thema == null) {
return null;
}
String dataName = thema.getThemaName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ToDoデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getTodoName(int entityId) {
try {
EipTTodo todo = Database.get(EipTTodo.class, (long) entityId);
if (todo == null) {
return null;
}
String dataName = todo.getTodoName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ToDoカテゴリのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getTodoCategoryName(int category_id) {
try {
EipTTodoCategory category =
Database.get(EipTTodoCategory.class, (long) category_id);
if (category == null) {
return null;
}
String dataName = category.getCategoryName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ブログのエントリ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getBlogEntryName(int entityId) {
try {
EipTBlogEntry blog = Database.get(EipTBlogEntry.class, (long) entityId);
if (blog == null) {
return null;
}
String dataName = blog.getTitle();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ワークフローを取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getWorkFlowRequestName(int entityId) {
try {
EipTWorkflowRequest request =
Database.get(EipTWorkflowRequest.class, (long) entityId);
if (request == null) {
return null;
}
String dataName =
request.getEipTWorkflowCategory().getCategoryName()
+ " "
+ request.getRequestName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* ワークフローカテゴリのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getWorkFlowCategoryName(int category_id) {
try {
EipTWorkflowCategory category =
Database.get(EipTWorkflowCategory.class, (long) category_id);
if (category == null) {
return null;
}
String dataName = category.getCategoryName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* メールアカウントのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getWebMailAccountName(int entityId) {
try {
EipMMailAccount account =
Database.get(EipMMailAccount.class, (long) entityId);
if (account == null) {
return null;
}
String dataName = account.getAccountName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* タイムカードのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getTimecardName(int entityId) {
try {
EipTTimecard timecard = Database.get(EipTTimecard.class, (long) entityId);
if (timecard == null) {
return null;
}
String dataName = timecard.getReason();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* スケジュールのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getScheduleName(int entityId) {
try {
EipTSchedule schedule = Database.get(EipTSchedule.class, (long) entityId);
if (schedule == null) {
return null;
}
String dataName = schedule.getName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* 伝言メモのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getNoteName(int entityId) {
try {
EipTNote note = Database.get(EipTNote.class, (long) entityId);
if (note == null) {
return null;
}
String subject = "";
if (note.getSubjectType().equals("0")) {
subject = note.getCustomSubject();
} else if (note.getSubjectType().equals("1")) {
subject = ALLocalizationUtils.getl10n("NOTE_CALL_AGAIN");
} else if (note.getSubjectType().equals("2")) {
subject = ALLocalizationUtils.getl10n("NOTE_CALL_BACK");
} else if (note.getSubjectType().equals("3")) {
subject = ALLocalizationUtils.getl10n("NOTE_TELL_ME");
} else if (note.getSubjectType().equals("4")) {
subject = ALLocalizationUtils.getl10n("NOTE_TAKE_A_MESSAGE");
}
String dataName = subject + " (" + note.getClientName() + ")";
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* マイグループのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getMyGroupName(int entityId) {
try {
TurbineGroup group = Database.get(TurbineGroup.class, (long) entityId);
if (group == null) {
return null;
}
String dataName = group.getGroupName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* Msgboardデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getMsgboardTopicName(int entityId) {
try {
EipTMsgboardTopic topic =
Database.get(EipTMsgboardTopic.class, (long) entityId);
if (topic == null) {
return null;
}
String dataName = topic.getTopicName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* Msgboardカテゴリのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getMsgboardCategoryName(int category_id) {
try {
EipTMsgboardCategory category =
Database.get(EipTMsgboardCategory.class, (long) category_id);
if (category == null) {
return null;
}
String dataName = category.getCategoryName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* 共有フォルダのファイル名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getCabinetFileName(int entityId) {
try {
EipTCabinetFile file =
Database.get(EipTCabinetFile.class, (long) entityId);
if (file == null) {
return null;
}
String dataName = file.getFileTitle();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* 共有フォルダのフォルダ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getCabinetFolderName(int entityId) {
try {
EipTCabinetFolder file =
Database.get(EipTCabinetFolder.class, (long) entityId);
if (file == null) {
return null;
}
String dataName = file.getFolderName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* 共有カテゴリのカテゴリ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getCommonCategoryName(int entityId) {
try {
EipTCommonCategory category =
Database.get(EipTCommonCategory.class, (long) entityId);
if (category == null) {
return null;
}
String dataName = category.getName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
/**
* memoのデータ名を取得します。 <BR>
*
* @param entityId
* @return dataName
*/
private static String getMemoName(int memo_id) {
try {
EipTMemo memo = Database.get(EipTMemo.class, (long) memo_id);
if (memo == null) {
return null;
}
String dataName = memo.getMemoName();
return dataName;
} catch (Exception ex) {
logger.error("eventlog", ex);
return null;
}
}
}