data.metadata    = encodeMetadata(); data.modMetadata = mMailbox.getOperationChangeID(); data.modContent  = mMailbox.getOperationChangeID();
data.metadata = encodeMetadata(); data.contentChanged(mMailbox);
    MailItem copy(Folder folder, int id) throws IOException, ServiceException {        if (!isCopyable())            throw MailServiceException.CANNOT_COPY(mId);        if (!folder.canContain(this))            throw MailServiceException.CANNOT_CONTAIN();        // mark as copied for indexing purposes        if (!isTagged(mMailbox.mCopiedFlag))            alterTag(mMailbox.mCopiedFlag, true);        mMailbox.updateContactCount(this instanceof Contact ? 1 : 0);        // if the copy or original is in Spam, put the copy in its own conversation        MailItem parent = getParent();        boolean detach = parent == null || parent.getId() <= 0 || isTagged(mMailbox.mDraftFlag) || inSpam() != folder.inSpam();        UnderlyingData data = mData.duplicate(id, folder.getId());        if (detach)            data.parentId = -1;        data.metadata    = encodeMetadata();        data.modMetadata = mMailbox.getOperationChangeID();        data.modContent  = mMailbox.getOperationChangeID();        DbMailItem.copy(this, id, folder.getId(), data.parentId, data.metadata);        MailItem item = constructItem(mMailbox, data);        item.finishCreation(detach ? null : parent);        MailboxBlob srcBlob = getBlob();        if (srcBlob != null) {            MailboxBlob blob = StoreManager.getInstance().link(srcBlob.getBlob(), mMailbox, item.getId(), data.modContent, item.getVolumeId());            mMailbox.markOtherItemDirty(blob);        }        return item;    }