Creating Entity Actions

목표 : 앞서 만든 Guestbook portlet에는 개별 entry를 수정, 삭제, 권한 부여 같은 기능들이 없다. 이 페이지에서는 이러한 기능들으 구현하는 법을 배우고, 유저에게 이런 모든 기능들을 제공할 수 있는 UI를 제공하는 것을 목표로 한다.

  1. Guestbook entry 삭제 -> Service layer 수정 필요

  2. Guestbook entry 수정 -> Service layer 수정 필요

  3. Guestbook entry 권한 설정 -> Built-in 기능 사용

1.Guestbook entry 삭제

EntryLocalServiceImpl.java에 deleteEntry method를 추가한다.

public Entry deleteEntry(long entryId, ServiceContext serviceContext)
    throws PortalException, SystemException {

    Entry entry = getEntry(entryId);

    resourceLocalService.deleteResource(
        serviceContext.getCompanyId(), Entry.class.getName(),
        ResourceConstants.SCOPE_INDIVIDUAL, entryId);

        entry = deleteEntry(entryId);

        return entry;
}

여기서 중요한 것은 Entry entity를 지울 때 해당 entity의 resource (permission)까지도 같이 지워야한다는 것이다. Entry의 소유자는 User이기 때문에 resource 또한 scope를 SCOPE_INDIVIDUAL로 하여 삭제한다.

2.Guestbook entry 수정

마찬가지로 EntryLocalServiceImpl.java에 updateaEntry method를 추가한다.

public Entry updateEntry(
        long userId, long guestbookId, long entryId, String name,
        String email, String message, ServiceContext serviceContext)
    throws PortalException, SystemException {

    long groupId = serviceContext.getScopeGroupId();

    User user = userPersistence.findByPrimaryKey(userId);

    Date now = new Date();

    validate(name, email, message);

    Entry entry = getEntry(entryId);

    entry.setUserId(userId);
    entry.setUserName(user.getFullName());
    entry.setName(name);
    entry.setEmail(email);
    entry.setMessage(message);
    entry.setModifiedDate(serviceContext.getModifiedDate(now));
    entry.setExpandoBridgeAttributes(serviceContext);

    entryPersistence.update(entry);

    resourceLocalService.updateResources(
        user.getCompanyId(), groupId, Entry.class.getName(), entryId,
        serviceContext.getGroupPermissions(),
        serviceContext.getGuestPermissions());

    return entry;
}

원하는 Entry를 가져와서(Entry entry = getEntry(entryID)) 값을 변경해주는 것 말고는 addEntry method와 거의 비슷하다.

results matching ""

    No results matching ""