@Override protected void doImportStagedModel(PortletDataContext portletDataContext, MBMessage message) throws Exception { long userId = portletDataContext.getUserId(message.getUserUuid()); String userName = message.getUserName(); Map<Long, Long> categoryIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBCategory.class); long parentCategoryId = MapUtil.getLong(categoryIds, message.getCategoryId(), message.getCategoryId()); Map<Long, Long> threadIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBThread.class); long threadId = MapUtil.getLong(threadIds, message.getThreadId(), 0); Map<Long, Long> messageIds = (Map<Long, Long>) portletDataContext.getNewPrimaryKeysMap(MBMessage.class); long parentMessageId = MapUtil.getLong(messageIds, message.getParentMessageId(), message.getParentMessageId()); Element element = portletDataContext.getImportDataStagedModelElement(message); List<ObjectValuePair<String, InputStream>> inputStreamOVPs = getAttachments(portletDataContext, element, message); try { ServiceContext serviceContext = portletDataContext.createServiceContext(message, MBPortletDataHandler.NAMESPACE); if (message.getStatus() != WorkflowConstants.STATUS_APPROVED) { serviceContext.setWorkflowAction(WorkflowConstants.ACTION_SAVE_DRAFT); } if ((parentCategoryId != MBCategoryConstants.DEFAULT_PARENT_CATEGORY_ID) && (parentCategoryId != MBCategoryConstants.DISCUSSION_CATEGORY_ID) && (parentCategoryId == message.getCategoryId())) { String categoryPath = ExportImportPathUtil.getModelPath( portletDataContext, MBCategory.class.getName(), parentCategoryId); MBCategory category = (MBCategory) portletDataContext.getZipEntryAsObject(categoryPath); StagedModelDataHandlerUtil.importStagedModel(portletDataContext, category); parentCategoryId = MapUtil.getLong(categoryIds, message.getCategoryId(), message.getCategoryId()); } MBMessage importedMessage = null; if (portletDataContext.isDataStrategyMirror()) { MBMessage existingMessage = MBMessageUtil.fetchByUUID_G(message.getUuid(), portletDataContext.getScopeGroupId()); if (existingMessage == null) { serviceContext.setUuid(message.getUuid()); importedMessage = MBMessageLocalServiceUtil.addMessage( userId, userName, portletDataContext.getScopeGroupId(), parentCategoryId, threadId, parentMessageId, message.getSubject(), message.getBody(), message.getFormat(), inputStreamOVPs, message.getAnonymous(), message.getPriority(), message.getAllowPingbacks(), serviceContext); } else { importedMessage = MBMessageLocalServiceUtil.updateMessage( userId, existingMessage.getMessageId(), message.getSubject(), message.getBody(), inputStreamOVPs, new ArrayList<String>(), message.getPriority(), message.getAllowPingbacks(), serviceContext); } } else { importedMessage = MBMessageLocalServiceUtil.addMessage( userId, userName, portletDataContext.getScopeGroupId(), parentCategoryId, threadId, parentMessageId, message.getSubject(), message.getBody(), message.getFormat(), inputStreamOVPs, message.getAnonymous(), message.getPriority(), message.getAllowPingbacks(), serviceContext); } importedMessage.setAnswer(message.getAnswer()); if (importedMessage.isRoot()) { MBThreadLocalServiceUtil.updateQuestion( importedMessage.getThreadId(), GetterUtil.getBoolean(element.attributeValue("question"))); } threadIds.put(message.getThreadId(), importedMessage.getThreadId()); portletDataContext.importClassedModel( message, importedMessage, MBPortletDataHandler.NAMESPACE); } finally { for (ObjectValuePair<String, InputStream> inputStreamOVP : inputStreamOVPs) { InputStream inputStream = inputStreamOVP.getValue(); StreamUtil.cleanUp(inputStream); } } }
@Test public void testUpdateExisting() throws Exception { long pk = RandomTestUtil.nextLong(); MBMessage newMBMessage = _persistence.create(pk); newMBMessage.setUuid(RandomTestUtil.randomString()); newMBMessage.setGroupId(RandomTestUtil.nextLong()); newMBMessage.setCompanyId(RandomTestUtil.nextLong()); newMBMessage.setUserId(RandomTestUtil.nextLong()); newMBMessage.setUserName(RandomTestUtil.randomString()); newMBMessage.setCreateDate(RandomTestUtil.nextDate()); newMBMessage.setModifiedDate(RandomTestUtil.nextDate()); newMBMessage.setClassNameId(RandomTestUtil.nextLong()); newMBMessage.setClassPK(RandomTestUtil.nextLong()); newMBMessage.setCategoryId(RandomTestUtil.nextLong()); newMBMessage.setThreadId(RandomTestUtil.nextLong()); newMBMessage.setRootMessageId(RandomTestUtil.nextLong()); newMBMessage.setParentMessageId(RandomTestUtil.nextLong()); newMBMessage.setSubject(RandomTestUtil.randomString()); newMBMessage.setBody(RandomTestUtil.randomString()); newMBMessage.setFormat(RandomTestUtil.randomString()); newMBMessage.setAnonymous(RandomTestUtil.randomBoolean()); newMBMessage.setPriority(RandomTestUtil.nextDouble()); newMBMessage.setAllowPingbacks(RandomTestUtil.randomBoolean()); newMBMessage.setAnswer(RandomTestUtil.randomBoolean()); newMBMessage.setStatus(RandomTestUtil.nextInt()); newMBMessage.setStatusByUserId(RandomTestUtil.nextLong()); newMBMessage.setStatusByUserName(RandomTestUtil.randomString()); newMBMessage.setStatusDate(RandomTestUtil.nextDate()); _mbMessages.add(_persistence.update(newMBMessage)); MBMessage existingMBMessage = _persistence.findByPrimaryKey(newMBMessage.getPrimaryKey()); Assert.assertEquals(existingMBMessage.getUuid(), newMBMessage.getUuid()); Assert.assertEquals(existingMBMessage.getMessageId(), newMBMessage.getMessageId()); Assert.assertEquals(existingMBMessage.getGroupId(), newMBMessage.getGroupId()); Assert.assertEquals(existingMBMessage.getCompanyId(), newMBMessage.getCompanyId()); Assert.assertEquals(existingMBMessage.getUserId(), newMBMessage.getUserId()); Assert.assertEquals(existingMBMessage.getUserName(), newMBMessage.getUserName()); Assert.assertEquals( Time.getShortTimestamp(existingMBMessage.getCreateDate()), Time.getShortTimestamp(newMBMessage.getCreateDate())); Assert.assertEquals( Time.getShortTimestamp(existingMBMessage.getModifiedDate()), Time.getShortTimestamp(newMBMessage.getModifiedDate())); Assert.assertEquals(existingMBMessage.getClassNameId(), newMBMessage.getClassNameId()); Assert.assertEquals(existingMBMessage.getClassPK(), newMBMessage.getClassPK()); Assert.assertEquals(existingMBMessage.getCategoryId(), newMBMessage.getCategoryId()); Assert.assertEquals(existingMBMessage.getThreadId(), newMBMessage.getThreadId()); Assert.assertEquals(existingMBMessage.getRootMessageId(), newMBMessage.getRootMessageId()); Assert.assertEquals(existingMBMessage.getParentMessageId(), newMBMessage.getParentMessageId()); Assert.assertEquals(existingMBMessage.getSubject(), newMBMessage.getSubject()); Assert.assertEquals(existingMBMessage.getBody(), newMBMessage.getBody()); Assert.assertEquals(existingMBMessage.getFormat(), newMBMessage.getFormat()); Assert.assertEquals(existingMBMessage.getAnonymous(), newMBMessage.getAnonymous()); AssertUtils.assertEquals(existingMBMessage.getPriority(), newMBMessage.getPriority()); Assert.assertEquals(existingMBMessage.getAllowPingbacks(), newMBMessage.getAllowPingbacks()); Assert.assertEquals(existingMBMessage.getAnswer(), newMBMessage.getAnswer()); Assert.assertEquals(existingMBMessage.getStatus(), newMBMessage.getStatus()); Assert.assertEquals(existingMBMessage.getStatusByUserId(), newMBMessage.getStatusByUserId()); Assert.assertEquals( existingMBMessage.getStatusByUserName(), newMBMessage.getStatusByUserName()); Assert.assertEquals( Time.getShortTimestamp(existingMBMessage.getStatusDate()), Time.getShortTimestamp(newMBMessage.getStatusDate())); }