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);
}
}