Example usage for org.apache.commons.io FileUtils touch

List of usage examples for org.apache.commons.io FileUtils touch

Introduction

In this page you can find the example usage for org.apache.commons.io FileUtils touch.

Prototype

public static void touch(File file) throws IOException 

Source Link

Document

Implements the same behaviour as the "touch" utility on Unix.

Usage

From source file:org.sipfoundry.sipxconfig.upload.ZipUploadTest.java

public void testDeployUndeployExcludes() throws Exception {
    FileSetting type = new FileSetting();

    // This should do nothing, since it doesn't match any paths.
    type.addZipExclude("zip");

    // An individual file excluded.
    type.addZipExclude("zip-test/file3.bin");

    // An entire directory excluded.
    type.addZipExclude("zip-test/subdir"); // Intentionally no trailing separator.

    // All the files and directories from the zip archive.
    File dir1 = new File(m_expandDir, "zip-test");
    File dir2 = new File(m_expandDir, "zip-test/subdir");
    File file1 = new File(m_expandDir, "zip-test/subdir/file1.txt");
    File file2 = new File(m_expandDir, "zip-test/file2.txt");
    File file3 = new File(m_expandDir, "zip-test/file3.bin");

    // Some should exist, and some should not.
    Upload.deployZipFile(m_expandDir, m_zipFile, type);
    assertTrue(dir1.exists());/*from ww w.  java 2  s.  c  o m*/
    assertTrue(!dir2.exists());
    assertTrue(!file1.exists());
    assertTrue(file2.exists());
    assertTrue(!file3.exists());

    // Now manually create this file that was excluded, to show that an undeploy
    // will not destroy it.
    FileUtils.touch(file3);

    // Some should exist, and some should not.
    Upload.undeployZipFile(m_expandDir, m_zipFile, type);
    assertTrue(dir1.exists()); // do not clean up directory, no guarantee we created them
    assertTrue(!dir2.exists());
    assertTrue(!file1.exists());
    assertTrue(!file2.exists());
    assertTrue(file3.exists());
}

From source file:org.sipfoundry.voicemail.mailbox.FilesystemMailboxManager.java

@Override
protected VmMessage saveTempMessageInStorage(User destUser, TempMessage message, MessageDescriptor descriptor,
        Folder storageFolder, String messageId) {
    File folderDir = getFolder(destUser.getUserName(), storageFolder);
    File audioFile = new File(folderDir, messageId + String.format(AUDIO_IDENTIFIER, getAudioFormat()));
    File descriptorFile = new File(folderDir, messageId + MESSAGE_IDENTIFIER);
    File statusFile = new File(folderDir, messageId + STATUS_IDENTIFIER);
    File urgentFile = new File(folderDir, messageId + URGENT_IDENTIFIER);
    String operation = "storing stuff";
    boolean urgent = message.getPriority() == Priority.URGENT;
    try {//from w ww .j  av  a2s.c  o m
        operation = "creating status file " + statusFile.getPath();
        LOG.debug("FileSystemMailboxManager::newMessage " + operation);
        FileUtils.touch(statusFile);

        if (urgent) {
            operation = "creating urgent file " + urgentFile.getPath();
            LOG.debug("FileSystemMailboxManager::newMessage " + operation);
            FileUtils.touch(urgentFile);
        }

        operation = "copying recording file to " + audioFile.getPath();
        LOG.debug("VmMessage::newMessage " + operation);
        FileUtils.copyFile(new File(message.getTempPath()), audioFile, true);

        operation = "creating messageDescriptor " + descriptorFile.getPath();
        LOG.debug("VmMessage::newMessage " + operation);
        m_descriptorWriter.writeObject(descriptor, descriptorFile);
    } catch (IOException e) {
        LOG.error("VmMessage::newMessage error while " + operation, e);
        return null;
    }
    if (storageFolder == Folder.INBOX) {
        m_mwi.sendMWI(destUser, getMailboxDetails(destUser.getUserName()));
    }
    LOG.info("VmMessage::newMessage created message " + descriptorFile.getPath());
    return new VmMessage(messageId, audioFile, descriptor, urgent);
}

From source file:org.sipfoundry.voicemail.mailbox.FilesystemMailboxManager.java

@Override
protected VmMessage copyMessage(String newMessageId, User destUser, TempMessage message) {
    // destination files
    File destinationInbox = getFolder(destUser.getUserName(), Folder.INBOX);
    File destStatus = new File(destinationInbox, newMessageId + STATUS_IDENTIFIER);
    File destUrg = new File(destinationInbox, newMessageId + URGENT_IDENTIFIER);
    File destAudio = new File(destinationInbox,
            newMessageId + String.format(AUDIO_IDENTIFIER, getAudioFormat()));
    File destDescriptor = new File(destinationInbox, newMessageId + MESSAGE_IDENTIFIER);
    File originalDestAudio = new File(destinationInbox,
            newMessageId + String.format(ORIGINAL_AUDIO_IDENTIFIER, getAudioFormat()));
    File destCombined = new File(destinationInbox,
            newMessageId + String.format(FW_AUDIO_IDENTIFIER, getAudioFormat()));

    // original files
    File originalInbox = getFolder(message.getCurrentUser(), Folder.INBOX);
    FilenameFilter filter = new RegexFileFilter(
            String.format(MESSAGEID_FILE_REGEX, message.getSavedMessageId()));
    File[] originalFiles = originalInbox.listFiles(filter);
    boolean urgent = false;
    MessageDescriptor descriptor = null;

    String operation = "copying stuff";
    try {// w w w .  j  ava 2  s. co  m
        operation = "creating status file " + destStatus.getPath();
        FileUtils.touch(destStatus);
        for (File originalFile : originalFiles) {
            if (originalFile.getName().endsWith(URGENT_IDENTIFIER)) {
                operation = "creating urgent file " + destUrg.getPath();
                FileUtils.touch(destUrg);
                urgent = true;
            } else if (originalFile.getName().endsWith(String.format(AUDIO_IDENTIFIER, getAudioFormat()))) {
                operation = "copying audio file " + destAudio.getPath();
                FileUtils.copyFile(originalFile, destAudio);
            } else if (originalFile.getName().endsWith(MESSAGE_IDENTIFIER)) {
                operation = "copying descriptor file " + destDescriptor.getPath();
                descriptor = m_descriptorReader.readObject(originalFile);
                if (descriptor.getOtherRecipients() != null) {
                    descriptor.addOtherRecipient(ValidUsers.getUserPart(descriptor.getId()));
                    descriptor.removeOtherRecipient(destUser.getUserName());
                }
                descriptor.setId(destUser.getIdentity());
                descriptor.setSubject("Voice Message " + newMessageId);
                m_descriptorWriter.writeObject(descriptor, destDescriptor);
            } else if (originalFile.getName()
                    .endsWith(String.format(ORIGINAL_AUDIO_IDENTIFIER, getAudioFormat()))) {
                operation = "copying original audio file " + originalDestAudio.getPath();
                FileUtils.copyFile(originalFile, originalDestAudio);
            } else if (originalFile.getName().endsWith(String.format(FW_AUDIO_IDENTIFIER, getAudioFormat()))) {
                operation = "copying combined audio file " + destCombined.getPath();
                FileUtils.copyFile(originalFile, destCombined);
            }
        }
    } catch (IOException e) {
        LOG.error("VmMessage::copy error while " + operation, e);
        return null;
    }
    m_mwi.sendMWI(destUser, getMailboxDetails(destUser.getUserName()));
    if (destCombined.exists()) {
        return new VmMessage(newMessageId, destCombined, descriptor, urgent);
    } else {
        return new VmMessage(newMessageId, destAudio, descriptor, urgent);
    }

}

From source file:org.sipfoundry.voicemail.mailbox.FilesystemMailboxManager.java

@Override
protected VmMessage forwardMessage(VmMessage originalMessage, TempMessage comments,
        MessageDescriptor descriptor, User destUser, String newMessageId) {
    boolean urgent = false;
    File destCombined = null;//from w  ww  .  j av  a2  s. c om
    try {
        // destination files
        File destinationInbox = getFolder(destUser.getUserName(), Folder.INBOX);
        File destStatus = new File(destinationInbox, newMessageId + STATUS_IDENTIFIER);
        File destAudio = new File(destinationInbox,
                newMessageId + String.format(AUDIO_IDENTIFIER, getAudioFormat()));
        File destUrg = new File(destinationInbox, newMessageId + URGENT_IDENTIFIER);
        File originalDestAudio = new File(destinationInbox,
                newMessageId + String.format(ORIGINAL_AUDIO_IDENTIFIER, getAudioFormat()));
        destCombined = new File(destinationInbox,
                newMessageId + String.format(FW_AUDIO_IDENTIFIER, getAudioFormat()));
        File originalDestDescriptor = new File(destinationInbox, newMessageId + ORIGINAL_MESSAGE_IDENTIFIER);
        File destDescriptor = new File(destinationInbox, newMessageId + MESSAGE_IDENTIFIER);
        FileUtils.touch(destStatus);
        if (comments.getTempPath() != null) {
            FileUtils.copyFile(new File(comments.getTempPath()), destAudio, true);
        } else {
            FileUtils.touch(destAudio);
        }

        // original files
        Folder originalFolder = originalMessage.getParentFolder();
        FilenameFilter filterById = new FileFilterByMessageId(originalMessage.getMessageId());
        File[] filesToForward = getFolder(originalMessage.getUserName(), originalFolder).listFiles(filterById);

        for (File fileToForward : filesToForward) {
            if (fileToForward.getName().endsWith(URGENT_IDENTIFIER)) {
                FileUtils.touch(destUrg);
                urgent = true;
            } else if (fileToForward.getName().endsWith(String.format(AUDIO_IDENTIFIER, getAudioFormat()))) {
                FileUtils.copyFile(fileToForward, originalDestAudio, true);
                if (comments.getTempPath() != null) {
                    concatAudio(destCombined, destAudio, fileToForward);
                } else {
                    FileUtils.copyFile(fileToForward, destCombined, true);
                }
            } else if (fileToForward.getName().endsWith(MESSAGE_IDENTIFIER)) {
                FileUtils.copyFile(fileToForward, originalDestDescriptor, true);
            }
        }

        m_descriptorWriter.writeObject(descriptor, destDescriptor);
        m_mwi.sendMWI(destUser, getMailboxDetails(destUser.getUserName()));
    } catch (Exception ex) {
        LOG.error("Failed to forward message", ex);
        return null;
    }
    return new VmMessage(newMessageId, destCombined, descriptor, urgent);
}

From source file:org.sipfoundry.voicemail.mailbox.FilesystemMailboxManager.java

@Override
public void markMessageUnheard(User user, String messageId) {
    FilenameFilter filter = new FileFilterByMessageId(messageId);
    File[] files = findFilesInInbox(user.getUserName(), filter);
    try {/*from   w  w  w.  j  av  a2  s  . c om*/
        for (File file : files) {
            File statusFile = new File(file.getParentFile(), messageId + STATUS_IDENTIFIER);
            FileUtils.touch(statusFile);
            m_mwi.sendMWI(user, getMailboxDetails(user.getUserName()));
            break;
        }
    } catch (IOException ex) {
        LOG.error(String.format("failed to mark message %s unheard for user %s", messageId, user.getUserName()),
                ex);
    }
}

From source file:org.sipfoundry.voicemail.MessagesTest.java

public void testLoadFolder() throws IOException, InterruptedException {
    Messages m = new Messages();
    m.loadFolder(m_inboxDir, m.m_inbox, true, null);
    assertEquals(0, m.getInboxCount());/*from  w  ww. j a v a2  s  .  c  om*/

    FileUtils.touch(new File(m_inboxDir, "0001-00.wav"));
    makeMd(new File(m_inboxDir, "0001-00.xml"));
    FileUtils.touch(new File(m_inboxDir, "0002-00.wav"));
    makeMd(new File(m_inboxDir, "0002-00.xml"));
    FileUtils.touch(new File(m_inboxDir, "0003-00.wav"));
    makeMd(new File(m_inboxDir, "0003-00.xml"));
    FileUtils.touch(new File(m_inboxDir, "0003-00.sta"));
    FileUtils.touch(new File(m_inboxDir, "0004-00.wav"));
    makeMd(new File(m_inboxDir, "0004-00.xml"));
    FileUtils.touch(new File(m_inboxDir, "0004-00.sta"));

    FileUtils.touch(new File(m_inboxDir, "0005-00.dog")); // .dog doesn't count
    makeMd(new File(m_inboxDir, "0006-00.xml")); // .xml with no .wav, it counts.
    FileUtils.touch(new File(m_inboxDir, "0007-00.wav")); // .wav with no .xml, doesn't count.

    makeMd(new File(m_inboxDir, "0008-00.xml"));
    FileUtils.touch(new File(m_inboxDir, "0008-00.wav"));
    FileUtils.touch(new File(m_inboxDir, "0008-00.sta"));
    makeMd(new File(m_inboxDir, "0008-01.xml"));
    FileUtils.touch(new File(m_inboxDir, "0008-01.wav"));
    FileUtils.touch(new File(m_inboxDir, "0008-FW.wav"));

    FileUtils.touch(new File(m_inboxDir, "hey there"));
    FileUtils.touch(new File(m_inboxDir, "this.is.a.file"));

    m.loadFolder(m_inboxDir, m.m_inbox, true, null);
    assertEquals(6, m.getInboxCount());
    assertEquals(3, m.getUnheardCount());

    m.loadFolder(m_inboxDir, m.m_saved, false, null);
    assertEquals(6, m.getSavedCount());
    assertEquals(3, m.getUnheardCount());

}

From source file:org.sipfoundry.voicemail.MessagesTest.java

public void testSaveDeletePurge() throws IOException, InterruptedException {
    User user = new User();
    user.setUserName("user");
    user.setIdentity("user@dog");

    Mailbox mbox = new Mailbox(user, m_mailstoreDir.getPath());

    FileUtils.touch(new File(m_inboxDir, "0001-00.wav"));
    makeMd(new File(m_inboxDir, "0001-00.xml"));
    FileUtils.touch(new File(m_inboxDir, "0001-00.sta"));
    FileUtils.touch(new File(m_inboxDir, "0001-01.wav"));
    makeMd(new File(m_inboxDir, "0001-01.xml"));
    FileUtils.touch(new File(m_inboxDir, "0001-FW.wav"));
    FileUtils.touch(new File(m_inboxDir, "0002-00.wav"));
    makeMd(new File(m_inboxDir, "0002-00.xml"));

    Messages m = Messages.newMessages(mbox);
    m.loadFolder(m_inboxDir, m.m_inbox, true, null);
    m.loadFolder(m_savedDir, m.m_saved, false, null);
    m.loadFolder(m_deletedDir, m.m_deleted, false, null);

    assertEquals(2, m.getInboxCount());//  w  w  w. j  a va2 s. co  m
    assertEquals(1, m.getUnheardCount());
    assertEquals(0, m.getSavedCount());
    assertEquals(0, m.getDeletedCount());

    // Find 0001
    VmMessage msg = null;
    for (VmMessage msg1 : m.getInbox()) {
        if (msg1.getMessageId().equals("0001")) {
            msg = msg1;
            break;
        }
    }

    // Mark 0001 as heard
    m.markMessageHeard(msg, true);
    // Prove it 
    assertEquals(2, m.getInboxCount());
    assertEquals(0, m.getUnheardCount());
    assertEquals(0, m.getSavedCount());
    assertEquals(0, m.getDeletedCount());
    assertFalse(new File(m_inboxDir, "0001-00.sta").exists());

    // Reload and make sure we get the same result
    Messages.releaseMessages(m);
    m = Messages.newMessages(mbox);
    m.loadFolder(m_inboxDir, m.m_inbox, true, null);
    m.loadFolder(m_savedDir, m.m_saved, false, null);
    m.loadFolder(m_deletedDir, m.m_deleted, false, null);

    assertEquals(2, m.getInboxCount());
    assertEquals(0, m.getUnheardCount());
    assertEquals(0, m.getSavedCount());
    assertEquals(0, m.getDeletedCount());

    // Find 0001 (again)
    msg = null;
    for (VmMessage msg1 : m.getInbox()) {
        if (msg1.getMessageId().equals("0001")) {
            msg = msg1;
            break;
        }
    }

    // Save the message
    m.saveMessage(msg);
    assertEquals(1, m.getInboxCount());
    assertEquals(0, m.getUnheardCount());
    assertEquals(1, m.getSavedCount());
    assertEquals(0, m.getDeletedCount());
    assertFalse(new File(m_inboxDir, "0001-00.wav").exists());
    assertFalse(new File(m_inboxDir, "0001-00.xml").exists());
    assertFalse(new File(m_inboxDir, "0001-00.sta").exists());
    assertFalse(new File(m_inboxDir, "0001-01.wav").exists());
    assertFalse(new File(m_inboxDir, "0001-01.xml").exists());
    assertFalse(new File(m_inboxDir, "0001-FW.wav").exists());

    File xml = new File(m_savedDir, "0001-00.xml");
    File wav = new File(m_savedDir, "0001-FW.wav");
    assertEquals(xml.getPath(), msg.m_descriptorFile.getPath());
    assertEquals(wav.getPath(), msg.getAudioFile().getPath());

    assertTrue(xml.exists());
    assertTrue(wav.exists());

    // Delete the message
    m.deleteMessage(msg);
    assertEquals(1, m.getInboxCount());
    assertEquals(0, m.getUnheardCount());
    assertEquals(0, m.getSavedCount());
    assertEquals(1, m.getDeletedCount());
    assertFalse(new File(m_savedDir, "0001-00.xml").exists());
    assertFalse(new File(m_savedDir, "0001-FW.wav").exists());

    xml = new File(m_deletedDir, "0001-00.xml");
    wav = new File(m_deletedDir, "0001-FW.wav");
    assertEquals(xml.getPath(), msg.m_descriptorFile.getPath());
    assertEquals(wav.getPath(), msg.getAudioFile().getPath());

    assertTrue(xml.exists());
    assertTrue(wav.exists());

    // Revive the message
    m.saveMessage(msg);
    assertEquals(2, m.getInboxCount());
    assertEquals(0, m.getUnheardCount());
    assertEquals(0, m.getSavedCount());
    assertEquals(0, m.getDeletedCount());
    assertFalse(new File(m_deletedDir, "0001-00.xml").exists());
    assertFalse(new File(m_deletedDir, "0001-FW.wav").exists());

    assertTrue(new File(m_inboxDir, "0001-00.xml").exists());
    assertTrue(new File(m_inboxDir, "0001-FW.wav").exists());

    // Delete the message
    m.deleteMessage(msg);
    // Purge the message
    m.deleteMessage(msg);
    assertEquals(1, m.getInboxCount());
    assertEquals(0, m.getUnheardCount());
    assertEquals(0, m.getSavedCount());
    assertEquals(0, m.getDeletedCount());
    assertFalse("File shouldn't exist", new File(m_deletedDir, "0001-00.xml").exists());
    assertFalse("File shouldn't exist", new File(m_deletedDir, "0001-FW.wav").exists());
    Messages.releaseMessages(m);
}

From source file:org.sipfoundry.voicemail.VmMessage.java

public static VmMessage newMessageFromMime(Mailbox mailbox, IMAPMessage msg) {
    VmMessage me = new VmMessage();

    // Generate the next message ID
    me.m_messageId = ExtMailStore.GetMsgId(msg);
    if (me.m_messageId == null) {
        me.m_messageId = nextMessageId(mailbox.getMailstoreDirectory() + "/..");
    }//from  www  . ja v  a  2 s  . c  om

    // Generate the MessageDescriptor;
    me.m_messageDescriptor = new MessageDescriptor();
    me.m_messageDescriptor.setId(mailbox.getUser().getIdentity());

    try {
        String str = msg.getHeader("X-SIPX-FROMURI", ";");
        me.m_messageDescriptor.setFromUri(str);

        me.m_messageDescriptor.setDurationSecs(msg.getSize());
        me.m_unHeard = !msg.isSet(Flag.SEEN);
        me.m_messageDescriptor.setTimestamp(msg.getReceivedDate().getTime());
        me.m_messageDescriptor.setSubject(msg.getSubject());

        Priority pr = Priority.NORMAL;

        if (msg.isSet(Flag.FLAGGED)) {
            pr = Priority.URGENT;
            me.m_urgent = true;

        }
        me.m_messageDescriptor.setPriority(pr);

    } catch (MessagingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }

    String baseName = mailbox.getInboxDirectory() + me.m_messageId + "-00";
    me.m_audioFile = new File(baseName + ".wav");
    me.m_descriptorFile = new File(baseName + ".xml");
    me.m_statusFile = new File(baseName + ".sta");
    me.m_urgentFile = new File(baseName + ".urg");
    String operation = "storing stuff";
    try {
        if (me.m_unHeard) {
            operation = "creating status file " + me.m_statusFile.getPath();
            LOG.debug("VmMessage::newMessage " + operation);
            FileUtils.touch(me.m_statusFile);
        }

        if (me.m_urgent) {
            operation = "creating urgent file " + me.m_urgentFile.getPath();
            LOG.debug("VmMessage::newMessage " + operation);
            FileUtils.touch(me.m_urgentFile);
        }

        operation = "creating messageDescriptor " + me.m_descriptorFile.getPath();
        LOG.debug("VmMessage::newMessage " + operation);
        new MessageDescriptorWriter().writeObject(me.m_messageDescriptor, me.m_descriptorFile);
    } catch (IOException e) {
        LOG.error("VmMessage::newMessage error while " + operation, e);
        return null;
    }
    LOG.info("VmMessage::newMessage created message " + me.m_descriptorFile.getPath());
    if (me.m_unHeard) {
        Mwi.sendMWI(mailbox);
    }

    return me;
}

From source file:org.sipfoundry.voicemail.VmMessage.java

public static VmMessage newMessage(Mailbox mailbox, Message recording) {
    VmMessage me = new VmMessage();

    // Generate the next message ID
    me.m_messageId = nextMessageId(mailbox.getMailstoreDirectory() + "/..");
    me.m_unHeard = true;//www . j  a v  a 2 s  .co  m

    // Generate the MessageDescriptor;
    me.m_messageDescriptor = new MessageDescriptor();
    me.m_messageDescriptor.setId(mailbox.getUser().getIdentity());
    me.m_messageDescriptor.setFromUri(recording.getFromUri());
    me.m_messageDescriptor.setDurationSecs(recording.getDuration());
    me.m_messageDescriptor.setTimestamp(recording.getTimestamp());
    me.m_messageDescriptor.setSubject("Voice Message " + me.m_messageId);
    me.m_messageDescriptor.setPriority(recording.getPriority());

    if (recording.getPriority() == Priority.URGENT) {
        me.m_urgent = true;
    }

    Vector<User> otherRecipients = recording.getOtherRecipeints();
    if (otherRecipients != null) {
        for (User recipient : otherRecipients) {
            if (!recipient.getUserName().equals(mailbox.getUser().getUserName())) {
                me.m_messageDescriptor.addOtherRecipient(recipient.getUserName());
            }
        }
    }

    File tempFile = recording.getWavFile();
    String baseName = mailbox.getInboxDirectory() + me.m_messageId + "-00";
    me.m_audioFile = new File(baseName + ".wav");
    me.m_descriptorFile = new File(baseName + ".xml");
    me.m_statusFile = new File(baseName + ".sta");
    me.m_urgentFile = new File(baseName + ".urg");
    String operation = "storing stuff";
    try {
        operation = "creating status file " + me.m_statusFile.getPath();
        LOG.debug("VmMessage::newMessage " + operation);
        FileUtils.touch(me.m_statusFile);

        if (me.m_urgent) {
            operation = "creating urgent file " + me.m_urgentFile.getPath();
            LOG.debug("VmMessage::newMessage " + operation);
            FileUtils.touch(me.m_urgentFile);
        }

        operation = "copying recording .wav file to " + me.m_audioFile.getPath();
        LOG.debug("VmMessage::newMessage " + operation);
        FileUtils.copyFile(tempFile, me.m_audioFile, true);

        operation = "creating messageDescriptor " + me.m_descriptorFile.getPath();
        LOG.debug("VmMessage::newMessage " + operation);
        new MessageDescriptorWriter().writeObject(me.m_messageDescriptor, me.m_descriptorFile);
    } catch (IOException e) {
        LOG.error("VmMessage::newMessage error while " + operation, e);
        return null;
    }
    LOG.info("VmMessage::newMessage created message " + me.m_descriptorFile.getPath());
    Mwi.sendMWI(mailbox);
    me.sendToEmail(mailbox);

    return me;
}

From source file:org.sipfoundry.voicemail.VmMessage.java

/**
 * Copy this message into the inbox of a Mailbox, with a new message ID.
 * @param directory/*  www.java2s.  c  o  m*/
 * @return newly copied message
 */
public VmMessage copy(Mailbox mailbox) {
    VmMessage me = new VmMessage();

    // Generate the next message ID
    me.m_messageId = nextMessageId(mailbox.getMailstoreDirectory() + "/..");

    // Copy into the inbox of the mailbox
    File directory = new File(mailbox.getInboxDirectory());
    String baseName = mailbox.getInboxDirectory() + me.m_messageId + "-00";
    me.m_statusFile = new File(baseName + ".sta");
    me.m_urgentFile = new File(baseName + ".urg");

    // Copy (with the new message ID in the names) all the files
    String operation = "copying stuff";
    try {
        me.m_unHeard = true;
        operation = "creating status file " + me.m_statusFile.getPath();
        FileUtils.touch(me.m_statusFile);

        if (m_urgent) {
            operation = "creating urgent file " + me.m_urgentFile.getPath();
            LOG.debug("VmMessage::newMessage " + operation);
            FileUtils.touch(me.m_urgentFile);
        }

        operation = "copying audio file " + m_audioFile.getPath();
        me.m_audioFile = CopyMessageFileToDirectory(m_audioFile, me.m_messageId, directory);
        if (m_originalAudioFile != null) {
            // Deal with the forwarded stuff
            operation = "copying original audio file " + m_originalAudioFile.getPath();
            me.m_originalAudioFile = CopyMessageFileToDirectory(m_originalAudioFile, me.m_messageId, directory);
            operation = "copying original descriptor file " + m_originalDescriptorFile.getPath();
            me.m_originalDescriptorFile = CopyMessageFileToDirectory(m_originalDescriptorFile, me.m_messageId,
                    directory);
            operation = "copying combined audio file " + m_combinedAudioFile.getPath();
            me.m_combinedAudioFile = CopyMessageFileToDirectory(m_combinedAudioFile, me.m_messageId, directory);
        }
        // Including the descriptor file (which will be wrong for a moment, but it gives us the new name)
        operation = "copying descriptor file " + m_descriptorFile.getPath();
        me.m_descriptorFile = CopyMessageFileToDirectory(m_descriptorFile, me.m_messageId, directory);

    } catch (IOException e) {
        LOG.error("VmMessage::copy error while " + operation, e);
        return null;
    }

    // Read the new (but wrong) message descriptor file
    me.m_messageDescriptor = new MessageDescriptorReader().readObject(me.m_descriptorFile);

    // correct the other recipient list
    if (me.m_messageDescriptor.getOtherRecipients() != null) {
        me.m_messageDescriptor.addOtherRecipient(ValidUsersXML.getUserPart(me.m_messageDescriptor.getId()));
        me.m_messageDescriptor.removeOtherRecipient(mailbox.getUser().getUserName());
    }

    // Correct the identity in the descriptor file to the correct user
    me.m_messageDescriptor.setId(mailbox.getUser().getIdentity());
    // Correct the subject to the correct subject
    me.m_messageDescriptor.setSubject("Voice Message " + me.m_messageId);
    // Write the new file out.
    new MessageDescriptorWriter().writeObject(me.m_messageDescriptor, me.m_descriptorFile);

    LOG.info("VmMessage::copy created message " + me.m_descriptorFile.getPath());
    Mwi.sendMWI(mailbox);
    me.sendToEmail(mailbox);

    return me;
}