/** * Converts the soap model instance into a normal model instance. * * @param soapModel the soap model instance to convert * @return the normal model instance */ public static SocialActivity toModel(SocialActivitySoap soapModel) { if (soapModel == null) { return null; } SocialActivity model = new SocialActivityImpl(); model.setActivityId(soapModel.getActivityId()); model.setGroupId(soapModel.getGroupId()); model.setCompanyId(soapModel.getCompanyId()); model.setUserId(soapModel.getUserId()); model.setCreateDate(soapModel.getCreateDate()); model.setActivitySetId(soapModel.getActivitySetId()); model.setMirrorActivityId(soapModel.getMirrorActivityId()); model.setClassNameId(soapModel.getClassNameId()); model.setClassPK(soapModel.getClassPK()); model.setParentClassNameId(soapModel.getParentClassNameId()); model.setParentClassPK(soapModel.getParentClassPK()); model.setType(soapModel.getType()); model.setExtraData(soapModel.getExtraData()); model.setReceiverUserId(soapModel.getReceiverUserId()); return model; }
/** * Records an activity with the given time in the database. * * <p>This method records a social activity done on an asset, identified by its class name and * class primary key, in the database. Additional information (such as the original message ID for * a reply to a forum post) is passed in via the <code>extraData</code> in JSON format. For * activities affecting another user, a mirror activity is generated that describes the action * from the user's point of view. The target user's ID is passed in via the <code>receiverUserId * </code>. * * <p>Example for a mirrored activity:<br> * When a user replies to a message boards post, the reply action is stored in the database with * the <code>receiverUserId</code> being the ID of the author of the original message. The <code> * extraData</code> contains the ID of the original message in JSON format. A mirror activity is * generated with the values of the <code>userId</code> and the <code>receiverUserId</code> * swapped. This mirror activity basically describes a "replied to" event. * * <p>Mirror activities are most often used in relation to friend requests and activities. * * @param userId the primary key of the acting user * @param groupId the primary key of the group * @param createDate the activity's date * @param className the target asset's class name * @param classPK the primary key of the target asset * @param type the activity's type * @param extraData any extra data regarding the activity * @param receiverUserId the primary key of the receiving user * @throws PortalException if the user or group could not be found */ @Override public void addActivity( long userId, long groupId, Date createDate, String className, long classPK, int type, String extraData, long receiverUserId) throws PortalException { if (ExportImportThreadLocal.isImportInProcess()) { return; } User user = userPersistence.findByPrimaryKey(userId); long classNameId = classNameLocalService.getClassNameId(className); if (groupId > 0) { Group group = groupLocalService.getGroup(groupId); if (group.isLayout()) { Layout layout = layoutLocalService.getLayout(group.getClassPK()); groupId = layout.getGroupId(); } } final SocialActivity activity = socialActivityPersistence.create(0); activity.setGroupId(groupId); activity.setCompanyId(user.getCompanyId()); activity.setUserId(user.getUserId()); activity.setCreateDate(createDate.getTime()); activity.setMirrorActivityId(0); activity.setClassNameId(classNameId); activity.setClassPK(classPK); SocialActivityHierarchyEntry activityHierarchyEntry = SocialActivityHierarchyEntryThreadLocal.peek(); if (activityHierarchyEntry != null) { activity.setParentClassNameId(activityHierarchyEntry.getClassNameId()); activity.setParentClassPK(activityHierarchyEntry.getClassPK()); } activity.setType(type); activity.setExtraData(extraData); activity.setReceiverUserId(receiverUserId); AssetEntry assetEntry = assetEntryPersistence.fetchByC_C(classNameId, classPK); activity.setAssetEntry(assetEntry); SocialActivity mirrorActivity = null; if ((receiverUserId > 0) && (userId != receiverUserId)) { mirrorActivity = socialActivityPersistence.create(0); mirrorActivity.setGroupId(groupId); mirrorActivity.setCompanyId(user.getCompanyId()); mirrorActivity.setUserId(receiverUserId); mirrorActivity.setCreateDate(createDate.getTime()); mirrorActivity.setClassNameId(classNameId); mirrorActivity.setClassPK(classPK); if (activityHierarchyEntry != null) { mirrorActivity.setParentClassNameId(activityHierarchyEntry.getClassNameId()); mirrorActivity.setParentClassPK(activityHierarchyEntry.getClassPK()); } mirrorActivity.setType(type); mirrorActivity.setExtraData(extraData); mirrorActivity.setReceiverUserId(user.getUserId()); mirrorActivity.setAssetEntry(assetEntry); } final SocialActivity finalMirrorActivity = mirrorActivity; Callable<Void> callable = new Callable<Void>() { @Override public Void call() throws Exception { socialActivityLocalService.addActivity(activity, finalMirrorActivity); return null; } }; TransactionCommitCallbackUtil.registerCallback(callable); }