private void upgradeUploadsDir()

in app/src/main/java/org/apache/roller/weblogger/business/jpa/JPAMediaFileManagerImpl.java [746:851]


    private void upgradeUploadsDir(Weblog weblog, User user, File oldDir,
            MediaFileDirectory newDir) {
        RollerMessages messages = new RollerMessages();

        log.debug("Upgrading dir: " + oldDir.getAbsolutePath());
        if (newDir == null) {
            log.error("newDir cannot be null");
            return;
        }

        // loop through files and directories
        int dirCount = 0;
        int fileCount = 0;
        File[] files = oldDir.listFiles();
        if (files != null) {
            for (File file: files) {

                // a directory: go recursive
                if (file.isDirectory()) {

                    if (weblog.hasMediaFileDirectory(file.getName())) {
                        // already have a mediafile directory for that
                        upgradeUploadsDir(weblog, user, file,
                                weblog.getMediaFileDirectory(file.getName()));

                    } else {
                        // need to create a new mediafile directory
                        MediaFileDirectory secondDir = null;
                        try {
                            secondDir = new MediaFileDirectory(weblog, file.getName(), null);
                            roller.getMediaFileManager().createMediaFileDirectory(secondDir);
                            roller.flush();
                            dirCount++;
                        } catch (WebloggerException ex) {
                            log.error("ERROR creating directory: "
                                    + newDir.getName() + "/" + file.getName());
                        }
                        upgradeUploadsDir(weblog, user, file, secondDir);
                    }

                } else {
                    // a file: create a database record for it
                    // check to make sure that file does not already exist
                    if (newDir.hasMediaFile(file.getName())) {
                        log.debug("    Skipping file that already exists: "
                                + file.getName());

                    } else {

                        String originalPath = "/" + newDir.getName() + "/" + file.getName();
                        log.debug("Upgrade file with original path: " + originalPath);

                        MediaFile mf = new MediaFile();
                        try {
                            mf.setName(file.getName());
                            mf.setDescription(file.getName());
                            mf.setOriginalPath(originalPath);

                            mf.setDateUploaded(new Timestamp(file
                                    .lastModified()));
                            mf.setLastUpdated(new Timestamp(file.lastModified()));

                            mf.setDirectory(newDir);
                            mf.setWeblog(weblog);
                            mf.setCreatorUserName(user.getUserName());
                            mf.setSharedForGallery(Boolean.FALSE);

                            mf.setLength(file.length());
                            mf.setInputStream(new FileInputStream(file));
                            mf.setContentType(Utilities
                                    .getContentTypeFromFileName(file.getName()));

                            // Create
                            this.roller.getMediaFileManager().createMediaFile(
                                    weblog, mf, messages);
                            newDir.getMediaFiles().add(mf);

                            log.info(messages.toString());

                            fileCount++;

                        } catch (WebloggerException ex) {
                            log.error("ERROR writing file to new storage system: "
                                    + file.getAbsolutePath(), ex);

                        } catch (java.io.FileNotFoundException ex) {
                            log.error(
                                    "ERROR reading file from old storage system: "
                                            + file.getAbsolutePath(), ex);
                        }
                    }
                }
            }
        }

        try {
            // flush changes to this directory
            roller.flush();

            log.debug("Count of dirs created: " + dirCount);
            log.debug("Count of files created: " + fileCount);

        } catch (WebloggerException ex) {
            log.error("ERROR flushing changes to dir: " + newDir.getName(), ex);
        }
    }