@Override protected List<VEipTScheduleList> getScheduleList(RunData rundata, Context context) { if (view_date == null || userid <= 0) { return new ArrayList<VEipTScheduleList>(); } Calendar cal = Calendar.getInstance(); cal.setTime(view_date.getValue()); cal.add(Calendar.DATE, 1); cal.add(Calendar.MILLISECOND, -1); ALDateTimeField field = new ALDateTimeField(); field.setValue(cal.getTime()); List<Integer> ulist = new ArrayList<Integer>(); if (ScheduleUtils.SCHEDULEMAP_TYPE_USER.equals(type)) { ulist.add(userid); } List<Integer> flist = new ArrayList<Integer>(); if (ScheduleUtils.SCHEDULEMAP_TYPE_FACILITY.equals(type)) { ulist.add(userid); } return ScheduleUtils.getScheduleList( loginuserid, view_date.getValue(), field.getValue(), ulist, flist); }
@Override public void loadToDo(RunData rundata, Context context) { try { SelectQuery<EipTTodo> query = getSelectQueryForTodo(rundata, context); List<EipTTodo> todos = query.fetchList(); int todossize = todos.size(); for (int i = 0; i < todossize; i++) { EipTTodo record = todos.get(i); ScheduleToDoResultData rd = new ScheduleToDoResultData(); rd.initField(); // ポートレット ToDo のへのリンクを取得する. String todo_url = ""; if (userid == record.getTurbineUser().getUserId().intValue()) { todo_url = ScheduleUtils.getPortletURItoTodoDetailPane( rundata, "ToDo", record.getTodoId().longValue(), portletId); } else { todo_url = ScheduleUtils.getPortletURItoTodoPublicDetailPane( rundata, "ToDo", record.getTodoId().longValue(), portletId); } rd.setTodoId(record.getTodoId().intValue()); rd.setTodoName(record.getTodoName()); rd.setUserId(record.getTurbineUser().getUserId().intValue()); rd.setStartDate(record.getStartDate()); rd.setEndDate(record.getEndDate()); rd.setTodoUrl(todo_url); // 公開/非公開を設定する. rd.setPublicFlag("T".equals(record.getPublicFlag())); List<ScheduleToDoResultData> usertodos1 = todomap.get(record.getTurbineUser().getUserId()); if (usertodos1 != null) { // ToDo を格納 usertodos1.add(rd); } } } catch (Exception ex) { logger.error("schedule", ex); return; } }
public boolean canAddTerm(AjaxScheduleResultData rd) { boolean canAdd = true; Date startDate = rd.getStartDate().getValue(); Date endDate = rd.getEndDate().getValue(); AjaxTermScheduleDayContainer con; int size = dayList.size(); for (int i = 0; i < size; i++) { con = dayList.get(i); Date conDate = con.getDate().getValue(); boolean isEmptyStartDate = ScheduleUtils.equalsToDate(ScheduleUtils.getEmptyDate(), startDate, false); boolean isEmptyEndDate = ScheduleUtils.equalsToDate(ScheduleUtils.getEmptyDate(), endDate, false); if (isEmptyStartDate && isEmptyEndDate) { // 開始日と入稿日が未設定の場合 if (con.isHasTerm()) { canAdd = false; } } else { if (isEmptyStartDate) { // 開始日が未設定の場合 if (ScheduleUtils.equalsToDate(endDate, conDate, false) || conDate.before(endDate)) { if (con.isHasTerm()) { canAdd = false; } } } else if (isEmptyEndDate) { // 入稿日が未設定の場合 if (ScheduleUtils.equalsToDate(startDate, conDate, false) || conDate.after(startDate)) { if (con.isHasTerm()) { canAdd = false; } } } else { // 開始日と入稿日が設定されている場合 if ((ScheduleUtils.equalsToDate(startDate, conDate, false) || conDate.after(startDate)) && (ScheduleUtils.equalsToDate(endDate, conDate, false) || conDate.before(endDate))) { if (con.isHasTerm()) { canAdd = false; } } } } } return canAdd; }
/** * @param record * @return * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override protected Object getResultData(VEipTScheduleList record) throws ALPageNotFoundException, ALDBErrorException { ScheduleOnedayResultData rd = new ScheduleOnedayResultData(); rd.initField(); try { if ("R".equals(record.getStatus())) { return rd; } if (!ScheduleUtils.isView( getViewDate(), record.getRepeatPattern(), record.getStartDate(), record.getEndDate())) { return rd; } boolean is_member = record.isMember(); // Dummy スケジュールではない // 完全に隠す // 自ユーザー以外 // 共有メンバーではない // オーナーではない if ((!"D".equals(record.getStatus())) && "P".equals(record.getPublicFlag()) && (userid != record.getUserId().intValue()) && (userid != record.getOwnerId().intValue()) && !is_member) { return rd; } else if (!hasAclviewOther && !is_member) { // 閲覧権限がなく、グループでもない return rd; } if ("C".equals(record.getPublicFlag()) && (userid != record.getUserId().intValue()) && (userid != record.getOwnerId().intValue()) && !is_member) { rd.setName(ALLocalizationUtils.getl10n("SCHEDULE_CLOSE_PUBLIC_WORD")); // 仮スケジュールかどうか rd.setTmpreserve(false); } else { rd.setName(record.getName()); // 仮スケジュールかどうか rd.setTmpreserve("T".equals(record.getStatus())); } // ID rd.setScheduleId(record.getScheduleId().intValue()); // 親スケジュール ID rd.setParentId(record.getParentId().intValue()); // 開始日時 rd.setStartDate(record.getStartDate()); // 終了日時 rd.setEndDate(record.getEndDate()); // 公開するかどうか rd.setPublic("O".equals(record.getPublicFlag())); // 非表示にするかどうか rd.setHidden("P".equals(record.getPublicFlag())); // ダミーか rd.setDummy("D".equals(record.getStatus())); // ログインユーザかどうか rd.setLoginuser(record.getUserId().intValue() == userid); // オーナーかどうか rd.setOwner(record.getOwnerId().intValue() == userid); // 共有メンバーかどうか rd.setMember(is_member); // 繰り返しパターン rd.setPattern(record.getRepeatPattern()); // ユーザもしくは設備のコンテナを取得する. ScheduleOnedayContainer con = null; if (ScheduleUtils.SCHEDULEMAP_TYPE_USER.equals(record.getType())) { con = map.get(record.getUserId()); } else { // if (ScheduleUtils.SCHEDULEMAP_TYPE_FACILITY.equals(record.getType())) // の場合 con = facilitymap.get(record.getUserId()); } // 期間スケジュールの場合 if (rd.getPattern().equals("S")) { is_hasspan = true; List<ScheduleOnedayResultData> terms = termmap.get(record.getUserId()); if (terms != null) { // 期間スケジュールを格納 terms.add(rd); } return rd; } if (!rd.getPattern().equals("N")) { // 繰り返しスケジュール if (!ScheduleUtils.isView( getViewDate(), rd.getPattern(), rd.getStartDate().getValue(), rd.getEndDate().getValue())) { return rd; } rd.setRepeat(true); } con.addResultData(rd, startHour, endHour, getViewDate()); } catch (Exception e) { logger.error("schedule", e); return null; } return rd; }
protected List<VEipTScheduleList> getScheduleList(RunData rundata, Context context) { Calendar cal = Calendar.getInstance(); cal.setTime(getViewDate().getValue()); cal.add(Calendar.DATE, 1); cal.add(Calendar.MILLISECOND, -1); ALDateTimeField field = new ALDateTimeField(); field.setValue(cal.getTime()); String filter = ALEipUtils.getTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE); String filter_type = ALEipUtils.getTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE_TYPE); if ("all".equals(filter)) { filter = filter_type = null; ALEipUtils.removeTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE); ALEipUtils.removeTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE_TYPE); } if (filter == null || filter_type == null || filter.equals("") || tmpViewDate2 != null) { members = new ArrayList<ALEipUser>(); members.add(ALEipUtils.getALEipUser(rundata)); ScheduleOnedayContainer con = new ScheduleOnedayContainer(); con.initField(); con.initHour(startHour, endHour); Integer uid = Integer.valueOf(ALEipUtils.getUserId(rundata)); this.termmap.put(uid, new ArrayList<ScheduleOnedayResultData>()); this.map.put(uid, con); this.todomap.put(uid, new ArrayList<ScheduleToDoResultData>()); return ScheduleUtils.getScheduleList( userid, getViewDate().getValue(), field.getValue(), Arrays.asList(userid), null); } // グループ名からユーザを取得 List<Integer> ulist = ALEipUtils.getUserIds(filter); // グループにユーザが存在しない場合はダミーユーザを設定し、検索します。(0件ヒット) // ダミーユーザーID = -1 int size = ulist.size(); if (size == 0) { ulist.add(Integer.valueOf(-1)); } else { for (int i = 0; i < size; i++) { Integer id = ulist.get(i); ScheduleOnedayContainer con = new ScheduleOnedayContainer(); con.initField(); con.initHour(startHour, endHour); this.termmap.put(id, new ArrayList<ScheduleOnedayResultData>()); this.map.put(id, con); this.todomap.put(id, new ArrayList<ScheduleToDoResultData>()); } } // List facilityIds = FacilitiesUtils.getFacilityIds(filter); List<Integer> facilityIds = null; String[] filteres = filter.split(";"); if ("Facility".equals(filter)) { facilityIds = getFacilityIdAllList(); } else if (("group".equals(filter_type)) && !("f".equals(filteres[0]))) { facilityIds = FacilitiesUtils.getFacilityIds(filteres[0]); } else { if ("f".equals(filteres[0])) { facilityIds = FacilitiesUtils.getFacilityGroupIds(Integer.valueOf(filteres[1])); } else { if (ScheduleUtils.isNumberValue(filter)) { facilityIds = FacilitiesUtils.getFacilityGroupIds(Integer.valueOf(filter)); } else { facilityIds = new ArrayList<Integer>(); String[] split = filter.split(","); if (split.length == 2) { // URLパラメータにfilterが含まれてしまっていた場合 // デフォルト値のセットしなおし // facilityIds初期化 VelocityPortlet portlet = ALEipUtils.getPortlet(rundata, context); String groupName = portlet.getPortletConfig().getInitParameter("p3a-group"); if (groupName != null) { ALEipUtils.setTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE, groupName); ALEipUtils.setTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE_TYPE, "group"); } } } } } int f_size = facilityIds.size(); if (f_size == 0) { facilityIds.add(Integer.valueOf(-1)); } else { for (int i = 0; i < f_size; i++) { Integer id = facilityIds.get(i); ScheduleOnedayContainer con = new ScheduleOnedayContainer(); con.initField(); con.initHour(startHour, endHour); this.facilitymap.put(id, con); } } members = ALEipUtils.getUsers(filter); String flag_changeturn = ALEipUtils.getTemp(rundata, context, ScheduleUtils.FLAG_CHANGE_TURN_STR); if ("0".equals(flag_changeturn)) { // ログインユーザの行けジュールを一番上に表示させるため, // メンバリストの初めの要素にログインユーザを配置する. ALEipUser eipUser = null; int memberSize = members.size(); for (int i = 0; i < memberSize; i++) { eipUser = members.get(i); if (eipUser.getUserId().getValue() == userid) { members.remove(i); members.add(0, eipUser); } } } if ("Facility".equals(filter)) { facilityList = FacilitiesUtils.getFacilityList(filter); } else if ("facilitygroup".equals(filter_type) || "f".equals(filteres[0])) { if ("f".equals(filteres[0])) { facilityList = FacilitiesUtils.getFacilityGroupList(Integer.valueOf(filteres[1])); } else { if (ScheduleUtils.isNumberValue(filter)) { facilityList = FacilitiesUtils.getFacilityGroupList(Integer.valueOf(filter)); } } } else { facilityList = FacilitiesUtils.getFacilityList(filter); } if (!("f".equals(filteres[0]))) { current_filter = filter; } else { current_filter = filteres[1]; } current_filter_type = filter_type; return ScheduleUtils.getScheduleList( userid, getViewDate().getValue(), field.getValue(), ulist, facilityIds); }
@Override protected ResultList<VEipTScheduleList> selectList(RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { try { List<VEipTScheduleList> resultBaseList = getScheduleList(rundata, context); List<VEipTScheduleList> resultList = ScheduleUtils.sortByDummySchedule(resultBaseList); List<VEipTScheduleList> list = new ArrayList<VEipTScheduleList>(); List<VEipTScheduleList> delList = new ArrayList<VEipTScheduleList>(); int delSize = 0; int resultSize = resultList.size(); int size = 0; boolean canAdd = true; for (int i = 0; i < resultSize; i++) { VEipTScheduleList record = resultList.get(i); delList.clear(); canAdd = true; size = list.size(); for (int j = 0; j < size; j++) { VEipTScheduleList record2 = list.get(j); if (!record.getRepeatPattern().equals("N") && "D".equals(record2.getStatus()) && record.getScheduleId().intValue() == record2.getParentId().intValue() && record.getUserId().intValue() == record2.getUserId().intValue()) { canAdd = false; break; } if (!record2.getRepeatPattern().equals("N") && "D".equals(record.getStatus()) && record2.getScheduleId().intValue() == record.getParentId().intValue() && record2.getUserId().intValue() == record.getUserId().intValue()) { // [繰り返しスケジュール] 親の ID を検索 if (!delList.contains(record2)) { delList.add(record2); } canAdd = true; } } delSize = delList.size(); for (int k = 0; k < delSize; k++) { list.remove(delList.get(k)); } if (canAdd) { list.add(record); } } // ダミーを削除する. delList.clear(); size = list.size(); for (int i = 0; i < size; i++) { VEipTScheduleList record = list.get(i); if ("D".equals(record.getStatus())) { delList.add(record); } } delSize = delList.size(); for (int i = 0; i < delSize; i++) { list.remove(delList.get(i)); } // ソート Collections.sort( list, new Comparator<VEipTScheduleList>() { @Override public int compare(VEipTScheduleList a, VEipTScheduleList b) { Calendar cal = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal.setTime(a.getStartDate()); cal.set(0, 0, 0); cal2.setTime(b.getStartDate()); cal2.set(0, 0, 0); if ((cal.getTime()).compareTo(cal2.getTime()) != 0) { return (cal.getTime()).compareTo(cal2.getTime()); } else { cal.setTime(a.getEndDate()); cal.set(0, 0, 0); cal2.setTime(b.getEndDate()); cal2.set(0, 0, 0); return (cal.getTime()).compareTo(cal2.getTime()); } } }); if (viewToDo == 1) { // ToDo の読み込み loadToDo(rundata, context); } return new ResultList<VEipTScheduleList>(list); } catch (Exception e) { logger.error("[ScheduleOnedayGroupSelectData]", e); throw new ALDBErrorException(); } }
/** * @param action * @param rundata * @param context * @throws ALPageNotFoundException * @throws ALDBErrorException */ @Override public void init(ALAction action, RunData rundata, Context context) throws ALPageNotFoundException, ALDBErrorException { super.init(action, rundata, context); if (rundata.getParameters().containsKey(ALEipConstants.LIST_FILTER)) { ALEipUtils.setTemp( rundata, context, ScheduleUtils.FILTER_NAMESPACE, rundata.getParameters().getString(ALEipConstants.LIST_FILTER)); } if (rundata.getParameters().containsKey(ALEipConstants.LIST_FILTER_TYPE)) { ALEipUtils.setTemp( rundata, context, ScheduleUtils.FILTER_NAMESPACE_TYPE, rundata.getParameters().getString(ALEipConstants.LIST_FILTER_TYPE)); } viewtype = "oneday-group"; try { termmap = new LinkedHashMap<Integer, List<ScheduleOnedayResultData>>(); map = new LinkedHashMap<Integer, ScheduleOnedayContainer>(); todomap = new LinkedHashMap<Integer, List<ScheduleToDoResultData>>(); facilitymap = new LinkedHashMap<Integer, ScheduleOnedayContainer>(); groups = ALEipUtils.getMyGroups(rundata); facilitiyGroups = ALEipUtils.getALEipGroups(); userid = ALEipUtils.getUserId(rundata); rows = new int[(endHour - startHour) * 12 + 1]; int size = rows.length; for (int i = 0; i < size; i++) { rows[i] = 1; } String filter = ALEipUtils.getTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE); target_group_name = getGroup(filter); if (filter == null) { VelocityPortlet portlet = ALEipUtils.getPortlet(rundata, context); String groupName = portlet.getPortletConfig().getInitParameter("p3a-group"); if (groupName != null) { ALEipUtils.setTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE, groupName); ALEipUtils.setTemp(rundata, context, ScheduleUtils.FILTER_NAMESPACE_TYPE, "group"); } } // ポートレット MyGroup のへのリンクを取得する. myGroupURI = ScheduleUtils.getPortletURIinPersonalConfigPane(rundata, "MyGroup"); // アクセス権限 ALAccessControlFactoryService aclservice = (ALAccessControlFactoryService) ((TurbineServices) TurbineServices.getInstance()) .getService(ALAccessControlFactoryService.SERVICE_NAME); ALAccessControlHandler aclhandler = aclservice.getAccessControlHandler(); hasAclviewOther = aclhandler.hasAuthority( userid, ALAccessControlConstants.POERTLET_FEATURE_SCHEDULE_OTHER, ALAccessControlConstants.VALUE_ACL_LIST); hasAuthoritySelfInsert = aclhandler.hasAuthority( userid, ALAccessControlConstants.POERTLET_FEATURE_SCHEDULE_SELF, ALAccessControlConstants.VALUE_ACL_INSERT); hasAuthorityFacilityInsert = aclhandler.hasAuthority( userid, ALAccessControlConstants.POERTLET_FEATURE_SCHEDULE_FACILITY, ALAccessControlConstants.VALUE_ACL_INSERT); } catch (Exception ex) { logger.error("[ScheduleOnedayGroupSelectData]", ex); } }
@Override protected Object getResultData(VEipTScheduleList record) throws ALPageNotFoundException, ALDBErrorException { ScheduleOnedayResultData rd = new ScheduleOnedayResultData(); rd.initField(); try { if ("R".equals(record.getStatus())) { return rd; } if (!ScheduleUtils.isView( view_date, record.getRepeatPattern(), record.getStartDate(), record.getEndDate())) { return rd; } boolean is_member = record.isMember(); // Dummy スケジュールではない // 完全に隠す // 自ユーザー以外 // 共有メンバーではない // オーナーではない if ((!"D".equals(record.getStatus())) && "P".equals(record.getPublicFlag()) && (userid != record.getUserId().intValue()) && (userid != record.getOwnerId().intValue()) && !is_member) { return rd; } else if (!hasAclviewOther && !is_member) { // 閲覧権限がなく、グループでもない return rd; } if ("C".equals(record.getPublicFlag()) && (userid != record.getUserId().intValue()) && (userid != record.getOwnerId().intValue()) && !is_member) { rd.setName(ALLocalizationUtils.getl10n("SCHEDULE_CLOSE_PUBLIC_WORD")); // 仮スケジュールかどうか rd.setTmpreserve(false); } else { rd.setName(record.getName()); // 仮スケジュールかどうか rd.setTmpreserve("T".equals(record.getStatus())); } // ID rd.setScheduleId(record.getScheduleId().intValue()); // 親スケジュール ID rd.setParentId(record.getParentId().intValue()); // 開始日時 rd.setStartDate(record.getStartDate()); // 終了日時 rd.setEndDate(record.getEndDate()); // 公開するかどうか rd.setPublic("O".equals(record.getPublicFlag())); // 非表示にするかどうか rd.setHidden("P".equals(record.getPublicFlag())); // ダミーか rd.setDummy("D".equals(record.getStatus())); // ログインユーザかどうか rd.setLoginuser(record.getUserId().intValue() == userid); // オーナーかどうか rd.setOwner(record.getOwnerId().intValue() == userid); // 共有メンバーかどうか rd.setMember(is_member); // 繰り返しパターン rd.setPattern(record.getRepeatPattern()); // 期間スケジュールの場合 if (rd.getPattern().equals("S")) { return rd; } if (!rd.getPattern().equals("N")) { // 繰り返しスケジュール if (!ScheduleUtils.isView( view_date, rd.getPattern(), rd.getStartDate().getValue(), rd.getEndDate().getValue())) { return rd; } rd.setRepeat(true); } con.addResultData(rd, 0, 24, view_date); } catch (Exception e) { logger.error("schedule", e); return null; } return rd; }