DotConnect dc = new DotConnect();
dc.setSQL("select inode from file_asset order by mod_date asc");
List<HashMap<String, Object>> inodes = dc.loadResults();
for (Map<String, Object> inode : inodes) {
String id = (String) inode.get("inode");
File file = null;
try {
file = APILocator.getFileAPI().find(id, APILocator.getUserAPI().getSystemUser(), false);
} catch (Exception e) {
if(!failed.contains(id))
failed.add(id);
Logger.debug(this, "Error getting file", e);
}
if(file!=null && UtilMethods.isSet(file.getInode())){
Logger.info(this, "Converting file to contentlet path: " + file.getPath() + " inode:" + file.getInode());
Folder folder = null;
Host host = null;
try {
Identifier ident = APILocator.getIdentifierAPI().find(file);
if(ident!=null && InodeUtils.isSet(ident.getId())){
host = APILocator.getHostAPI().find(ident.getHostId(), APILocator.getUserAPI().getSystemUser(), false);
folder = APILocator.getFolderAPI().findFolderByPath(ident.getParentPath(), host,APILocator.getUserAPI().getSystemUser(), false);
}
} catch (Exception e) {
if(!failed.contains(id))
failed.add(id);
Logger.info(this, "Error file to contentlet path: " + file.getPath() + " inode:" + file.getInode());
Logger.debug(this, "Error getting identifier", e);
}
if(folder!=null){
java.io.File binFile = null;
try {
Structure faStructure = StructureCache.getStructureByInode(folder.getDefaultFileType());
Field fieldVar = faStructure.getFieldVar(FileAssetAPI.BINARY_FIELD);
java.io.File assetFile = APILocator.getFileAPI().getAssetIOFile(file);
if(assetFile!=null && assetFile.exists()){
java.io.File tempUserFolder = new java.io.File(APILocator.getFileAPI().getRealAssetPathTmpBinary() + java.io.File.separator + APILocator.getUserAPI().getSystemUser().getUserId() +
java.io.File.separator + fieldVar.getFieldContentlet());
if (!tempUserFolder.exists())
tempUserFolder.mkdirs();
binFile = new java.io.File(tempUserFolder.getAbsolutePath() + java.io.File.separator + file.getFileName());
if(binFile.exists())
binFile.delete();
FileChannel ic = new FileInputStream(assetFile).getChannel();
FileChannel oc = new FileOutputStream(binFile).getChannel();
ic.transferTo(0, ic.size(), oc);
ic.close();
oc.close();
}
} catch (IOException e) {
if(!failed.contains(id))
failed.add(id);
Logger.info(this, "Error file to contentlet path: " + file.getPath() + " inode:" + file.getInode());
Logger.debug(this, "Error getting binary file", e);
}
if(binFile!=null && binFile.length()>0){
HibernateUtil.startTransaction();
try{
Contentlet contentlet = null;
Identifier identifier = APILocator.getIdentifierAPI().find(file.getIdentifier());
Identifier identAux = APILocator.getIdentifierAPI().find(host, file.getPath());
LiveCache.removeAssetFromCache(file);
WorkingCache.removeAssetFromCache(file);
CacheLocator.getIdentifierCache().removeFromCacheByVersionable(file);
com.dotmarketing.menubuilders.RefreshMenus.deleteMenu(file);
CacheLocator.getNavToolCache().removeNavByPath(identifier.getHostId(), identifier.getParentPath());
identifier.setAssetName(identifier.getAssetName()+"_copy");
APILocator.getIdentifierAPI().save(identifier);
if(identAux!=null && UtilMethods.isSet(identAux.getId()) && identAux.getAssetType().equals("contentlet")){
Logger.info(this, "Identifier already exists, host = " + host.getIdentifier() + " path = " + file.getPath());
contentlet = APILocator.getContentletAPI().findContentletByIdentifier(identAux.getId(), false, APILocator.getLanguageAPI().getDefaultLanguage().getId(),APILocator.getUserAPI().getSystemUser(), false);
if(contentlet!=null && UtilMethods.isSet(contentlet.getInode())){
contentlet.setInode(null);
contentlet.setStringProperty(FileAssetAPI.TITLE_FIELD, UtilMethods.isSet(file.getTitle())?file.getTitle():binFile.getName());
contentlet.setProperty(FileAssetAPI.SORT_ORDER, file.getSortOrder());
contentlet.setProperty(FileAssetAPI.DESCRIPTION, file.getFriendlyName());
contentlet.setProperty(FileAssetAPI.SHOW_ON_MENU, String.valueOf(file.isShowOnMenu()));
contentlet.setProperty(FileAssetAPI.BINARY_FIELD, binFile);
contentlet.setSortOrder(file.getSortOrder());
contentlet = APILocator.getContentletAPI().checkin(contentlet, APILocator.getUserAPI().getSystemUser(), false);
}
}else{
contentlet = new Contentlet();
contentlet.setStructureInode(folder.getDefaultFileType());
contentlet.setHost(host.getIdentifier());
contentlet.setFolder(folder.getInode());
contentlet.setStringProperty(FileAssetAPI.TITLE_FIELD, UtilMethods.isSet(file.getTitle())?file.getTitle():binFile.getName());
contentlet.setProperty(FileAssetAPI.SORT_ORDER, file.getSortOrder());
contentlet.setProperty(FileAssetAPI.DESCRIPTION, file.getFriendlyName());
contentlet.setProperty(FileAssetAPI.SHOW_ON_MENU, String.valueOf(file.isShowOnMenu()));
contentlet.setProperty(FileAssetAPI.BINARY_FIELD, binFile);
contentlet.setSortOrder(file.getSortOrder());
contentlet = APILocator.getContentletAPI().checkin(contentlet, APILocator.getUserAPI().getSystemUser(), false);
}
APILocator.getVersionableAPI().setDeleted(contentlet, file.isArchived());
APILocator.getVersionableAPI().setLocked(contentlet, file.isLocked(), APILocator.getUserAPI().getSystemUser());
if(file.isWorking() && !file.isLive()){
APILocator.getVersionableAPI().setWorking(contentlet);
}else if(file.isLive()){
APILocator.getVersionableAPI().setLive(contentlet);
}
APILocator.getVersionableAPI().setDeleted(contentlet, file.isArchived());
APILocator.getVersionableAPI().setLocked(contentlet, file.isLocked(), APILocator.getUserAPI().getSystemUser());
if(file.isWorking() && !file.isLive()){
APILocator.getVersionableAPI().setWorking(contentlet);
}else if(file.isLive()){
APILocator.getVersionableAPI().setLive(contentlet);
}
APILocator.getPermissionAPI().copyPermissions(file, contentlet);
APILocator.getVersionableAPI().setDeleted(file, true);
HibernateUtil.commitTransaction();
succeeded.add(file.getInode());
}catch(Exception e){
if(!failed.contains(id))
failed.add(id);
Logger.debug(this, "Error creating contentlet file asset", e);
HibernateUtil.rollbackTransaction();