예제 #1
0
 @Override
 protected Void doExecute(PartakeConnection con, IPartakeDAOs daos)
     throws DAOException, PartakeException {
   this.imageIds =
       MessageDAOFacade.findUserMessageExByReceiverId(con, daos, user.getId(), offset, limit);
   this.count = daos.getUserReceivedMessageAccess().countByReceiverId(con, user.getId());
   return null;
 }
예제 #2
0
  @Override
  protected Void doExecute(PartakeConnection con, IPartakeDAOs daos)
      throws DAOException, PartakeException {
    event = daos.getEventAccess().find(con, eventId);
    if (event == null) throw new PartakeException(UserErrorCode.INVALID_EVENT_ID);
    if (!EventEditPermission.check(event, user))
      throw new PartakeException(UserErrorCode.FORBIDDEN_EVENT_EDIT);

    event = new Event(event);
    updateEvent(con, daos);

    event.setModifiedAt(TimeUtil.getCurrentDateTime());
    EventDAOFacade.modify(con, daos, event);

    tickets = daos.getEventTicketAccess().findEventTicketsByEventId(con, eventId);

    return null;
  }
  private UserTwitterLink updateTwitterLinkage(
      PartakeConnection con, IPartakeDAOs daos, UserTwitterLink twitterLinkageEmbryo)
      throws DAOException, TwitterException {
    UserTwitterLink twitterLinkage =
        daos.getTwitterLinkageAccess().findByTwitterId(con, twitterLinkageEmbryo.getTwitterId());

    if (twitterLinkage == null || twitterLinkage.getUserId() == null) {
      String userId = daos.getUserAccess().getFreshId(con);
      UUID id = daos.getTwitterLinkageAccess().getFreshId(con);
      twitterLinkageEmbryo.setId(id);
      twitterLinkageEmbryo.setUserId(userId);
    } else {
      twitterLinkageEmbryo.setId(twitterLinkage.getId());
      twitterLinkageEmbryo.setUserId(twitterLinkage.getUserId());
    }

    daos.getTwitterLinkageAccess().put(con, twitterLinkageEmbryo);
    return twitterLinkageEmbryo;
  }
  private UserEx getUserFromTwitterLinkage(
      PartakeConnection con, IPartakeDAOs daos, UserTwitterLink twitterLinkage)
      throws DAOException, TwitterException {
    String userId = twitterLinkage.getUserId();
    User user = daos.getUserAccess().find(con, userId);
    if (user != null) return new UserEx(user, twitterLinkage);

    // If no user was associated to UserTwitterLink, we create a new user.
    User newUser =
        new User(
            userId,
            twitterLinkage.getScreenName(),
            twitterLinkage.getProfileImageURL(),
            TimeUtil.getCurrentDateTime(),
            null);
    daos.getUserAccess().put(con, newUser);
    newUser.freeze();

    return new UserEx(newUser, twitterLinkage);
  }
예제 #5
0
  private void updateEvent(PartakeConnection con, IPartakeDAOs daos)
      throws PartakeException, DAOException {
    if (params.containsKey("title")) {
      String title = getString("title");
      if (StringUtils.isBlank(title) || title.length() > 100)
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "title", "タイトルは 100 文字以下で必ず入力してください。");
      else event.setTitle(title);
    }

    if (params.containsKey("summary")) {
      String summary = getString("summary");
      if (summary != null && summary.length() > 100)
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "summary", "概要は 100 文字以下で入力してください。");
      else event.setSummary(summary);
    }

    if (params.containsKey("category")) {
      String category = getString("category");
      if (category == null || !EventCategory.isValidCategoryName(category))
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "category", "カテゴリーは正しいものを必ず入力してください。");
      else event.setCategory(category);
    }

    if (params.containsKey("beginDate")) {
      DateTime beginDate = getDateTime("beginDate");
      if (beginDate == null)
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "beginDate", "開始日時は必ず入力してください。");

      Calendar beginCalendar = TimeUtil.calendar(beginDate.toDate());
      if (beginCalendar.get(Calendar.YEAR) < 2000 || 2100 < beginCalendar.get(Calendar.YEAR))
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "beginDate", "開始日時の範囲が不正です。");
      else event.setBeginDate(beginDate);

      json.put("eventDuration", Helper.readableDuration(event.getBeginDate(), event.getEndDate()));
    }

    // TODO: What happend if beginDate is set after endDate is set and endDate <= beginDate. It
    // should be an error.
    if (params.containsKey("endDate")) {
      String endDateStr = getString("endDate");
      if (StringUtils.isBlank(endDateStr)) event.setEndDate(null);
      else {
        DateTime endDate = TimeUtil.parseForEvent(endDateStr);
        if (endDate == null)
          throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "endDate", "終了日時が不正です。");
        else {
          Calendar endCalendar = TimeUtil.calendar(endDate.toDate());
          if (endCalendar.get(Calendar.YEAR) < 2000 || 2100 < endCalendar.get(Calendar.YEAR))
            throw new PartakeException(
                UserErrorCode.INVALID_PARAMETERS, "endDate", "終了日時の範囲が不正です。");
          else if (event.getBeginDate() != null && endDate.isBefore(event.getBeginDate()))
            throw new PartakeException(
                UserErrorCode.INVALID_PARAMETERS, "endDate", "終了日時が開始日時より前になっています。");
          else event.setEndDate(endDate);
        }
      }
      json.put("eventDuration", Helper.readableDuration(event.getBeginDate(), event.getEndDate()));
    }

    if (params.containsKey("url")) {
      String urlStr = getString("url");
      if (StringUtils.isBlank(urlStr)) event.setUrl(urlStr);
      else if (3000 < urlStr.length())
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "url", "URL が長すぎます。");
      else if (!urlStr.startsWith("http://") && !urlStr.startsWith("https://"))
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "url", "URL が不正です。");
      else {
        try {
          new URL(urlStr); // Confirms URL is not malformed.
          event.setUrl(urlStr);
        } catch (MalformedURLException e) {
          throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "url", "URL が不正です。");
        }
      }
    }

    if (params.containsKey("place")) {
      String place = getString("place");
      if (place != null && 300 < place.length())
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "place", "場所が長すぎます");
      else event.setPlace(place);
    }

    if (params.containsKey("address")) {
      String address = getString("address");
      if (address != null && 300 < address.length())
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "address", "住所が長すぎます。");
      else event.setAddress(address);
    }

    if (params.containsKey("description")) {
      String description = getString("description");
      if (description != null && 1000000 < description.length())
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "description", "説明は 1000000 文字以下で入力してください。");
      else event.setDescription(description);
    }

    if (params.containsKey("hashTag")) {
      String hashTag = getString("hashTag");
      if (StringUtils.isBlank(hashTag)) event.setHashTag(null);
      else if (100 < hashTag.length())
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "hashTag", "ハッシュタグは100文字以内で記述してください。");
      else if (!Util.isValidHashtag(hashTag))
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "hashTag", "ハッシュタグは # から始まる英数字や日本語が指定できます。記号は使えません。");
      else event.setHashTag(hashTag);
    }

    if (params.containsKey("passcode")) {
      String passcode = getString("passcode");
      if (StringUtils.isBlank(passcode)) event.setPasscode(null);
      else if (20 < passcode.length())
        throw new PartakeException(
            UserErrorCode.INVALID_PARAMETERS, "passcode", "パスコードは20文字以下で記入してください。");
      else event.setPasscode(passcode);
    }

    if (params.containsKey("foreImageId")) {
      String foreImageId = getString("foreImageId");
      if (StringUtils.isBlank(foreImageId) || "null".equals(foreImageId))
        event.setForeImageId(null);
      else if (!Util.isUUID(foreImageId))
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "foreImageId", "画像IDが不正です。");
      else {
        // Check foreImageId is owned by the owner.
        UserImage image = daos.getImageAccess().find(con, foreImageId);
        if (image == null)
          throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "foreImageId", "画像IDが不正です。");
        if (!user.getId().equals(image.getUserId()))
          throw new PartakeException(
              UserErrorCode.INVALID_PARAMETERS, "foreImageId", "あなたが所持していない画像の ID が指定されています。");

        // OK.
        event.setForeImageId(foreImageId);
      }
    }

    if (params.containsKey("backImageId")) {
      String backImageId = getString("backImageId");
      if (StringUtils.isBlank(backImageId) || "null".equals(backImageId))
        event.setBackImageId(null);
      else if (!Util.isUUID(backImageId))
        throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "backImageId", "画像IDが不正です。");
      else {
        // Check foreImageId is owned by the owner.
        UserImage image = daos.getImageAccess().find(con, backImageId);
        if (image == null)
          throw new PartakeException(UserErrorCode.INVALID_PARAMETERS, "backImageId", "画像IDが不正です。");
        if (!user.getId().equals(image.getUserId()))
          throw new PartakeException(
              UserErrorCode.INVALID_PARAMETERS, "backImageId", "あなたが所持していない画像の ID が指定されています。");

        // OK.
        event.setBackImageId(backImageId);
      }
    }

    if (params.containsKey("relatedEventIds[]")) {
      Set<String> visitedIds = new HashSet<String>();
      String[] relatedEventIds = getStrings("relatedEventIds[]");

      List<String> eventIds = new ArrayList<String>();
      JSONArray array = new JSONArray();
      for (String relatedEventId : relatedEventIds) {
        if (!Util.isUUID(relatedEventId)) continue;

        if (eventId.equals(relatedEventId)) continue;

        if (visitedIds.contains(relatedEventId)) continue;

        visitedIds.add(relatedEventId);

        Event relatedEvent = daos.getEventAccess().find(con, relatedEventId);
        if (relatedEvent == null) continue;

        eventIds.add(relatedEventId);

        JSONObject obj = new JSONObject();
        obj.put("id", relatedEvent.getId());
        obj.put("title", relatedEvent.getTitle());
        array.add(obj);
      }
      event.setRelatedEventIds(eventIds);

      // OK. We want to return event.id and event.title.
      json.put("relatedEvents", array);
    }

    if (params.containsKey("editorIds[]")) {
      JSONArray array = new JSONArray();
      List<String> editorIds = new ArrayList<String>();
      Set<String> visitedIds = new HashSet<String>();
      for (String editorId : getStrings("editorIds[]")) {
        // Skips invalid users here.
        if (!Util.isUUID(editorId)) continue;

        if (visitedIds.contains(editorId)) continue;
        visitedIds.add(editorId);

        UserEx editor = UserDAOFacade.getUserEx(con, daos, editorId);
        if (editor == null) continue;

        // OK.
        editorIds.add(editor.getId());
        array.add(editor.toSafeJSON());
      }

      event.setEditorIds(editorIds);
      json.put("editors", array);
    }
  }