This website uses cookies to ensure you get the best experience. Learn More.
Mooving expired doc to new folder
package com.space.archiveprocess; import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import com.liferay.portal.kernel.log.Log; import com.liferay.portal.kernel.log.LogFactoryUtil; import com.liferay.portal.security.permission.PermissionChecker; import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil; import com.liferay.portal.security.permission.PermissionThreadLocal; import com.liferay.portal.service.CompanyLocalServiceUtil; import com.liferay.portal.service.GroupLocalServiceUtil; import com.liferay.portal.service.ServiceContext; import com.liferay.portal.service.UserLocalServiceUtil; import com.liferay.portlet.documentlibrary.NoSuchFolderException; import com.liferay.portlet.documentlibrary.model.DLFileEntry; import com.liferay.portlet.documentlibrary.model.DLFileEntryMetadata; import com.liferay.portlet.documentlibrary.model.DLFileEntryType; import com.liferay.portlet.documentlibrary.model.DLFolder; import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFileEntryMetadataLocalServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFileEntryTypeLocalServiceUtil; import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil; import com.liferay.portlet.dynamicdatamapping.model.DDMContent; import com.liferay.portlet.dynamicdatamapping.service.DDMContentLocalServiceUtil; public class MoveArchiveDocuments { private long archiveFolderId; private long spaceGroupId; private List<DLFileEntry> spaceDocList; private Map<Long,String> spaceArchiveDocList; private List<DLFileEntryMetadata> docMetadata; private Map<String,Object> docMetadataMap = new HashMap<String, Object>(); private Date today = new Date(); private final String[] documentsTypes = {"Bulletin","Fact Sheet","Marketing Banner","Merchandising Aid", "Price File","Price Sheet","Price Survey","Product Catalog","Product Guide","Rebate","Tech Bulletin"}; private List<Long> expiredDoumentList = new ArrayList<Long>(); private static final Log LOGGER = LogFactoryUtil.getLog(MoveArchiveDocuments.class); public void processArchiveOperation(){ try{ spaceGroupId = GroupLocalServiceUtil.getGroup(CompanyLocalServiceUtil.getCompanyByMx("alliance1.com").getCompanyId(), "SPACE").getGroupId(); archiveFolderId = DLFolderLocalServiceUtil.getFolder(spaceGroupId, 0L, "Archive").getFolderId(); //LOGGER.info("Archive Folder ID::: "+archiveFolderId); collectExpiredFileEntries(); }catch(Exception e){ LOGGER.error("Exception in processArchiveOperation Method::: "+e); } } public void collectExpiredFileEntries(){ try{ spaceDocList = DLFileEntryLocalServiceUtil.getGroupFileEntries(spaceGroupId, 0, DLFileEntryLocalServiceUtil.getGroupFileEntriesCount(spaceGroupId)); LOGGER.info("SPACE DOCUMENT List Count:"+spaceDocList.size()); for(DLFileEntry spaceDoc:spaceDocList){ docMetadata = DLFileEntryMetadataLocalServiceUtil.getFileVersionFileEntryMetadatas(spaceDoc.getFileVersion().getFileVersionId()); for(DLFileEntryMetadata fileMedata:docMetadata){ long docStorageId = fileMedata.getDDMStorageId(); DDMContent docContent = DDMContentLocalServiceUtil.getContent(docStorageId); String docContentXML = docContent.getXml(); Date expiryDate = getDocExpirationDate(docContentXML); if(expiryDate!=null){ if(expiryDate.before(today)){ DLFileEntryType dLFileEntryType = DLFileEntryTypeLocalServiceUtil.getFileEntryType(fileMedata.getFileEntryTypeId()); String documentTypeName = dLFileEntryType.getName(); if(Arrays.asList(documentsTypes).contains(documentTypeName)){ expiredDoumentList.add(spaceDoc.getFileEntryId()); } } } } } }catch(Exception e){ LOGGER.error("Exception in collectExpiredFileEntries Method::: "+e); } moveExpiredDocumentToArchive(expiredDoumentList); } public void moveExpiredDocumentToArchive(List<Long> expiredDoumentList){ System.out.println(expiredDoumentList.size()); int i = 0; try{ for(long expiredDoumentId :expiredDoumentList){ DLFileEntry dLFileEntry = DLFileEntryLocalServiceUtil.getDLFileEntry(expiredDoumentId); Boolean hasArchived = (Boolean) dLFileEntry.getExpandoBridge().getAttribute("archived"); System.out.println(hasArchived+" "+dLFileEntry.getTitle()); if(hasArchived == null || hasArchived == false){ DLFolder dlFolder = dLFileEntry.getFolder(); long repositeryId = dlFolder.getRepositoryId(); String parentFolderName =""; if(!dlFolder.getName().equals("Archive")) parentFolderName = dlFolder.getName(); while(dlFolder.getParentFolderId() != 0){ dlFolder = dlFolder.getParentFolder(); if(!dlFolder.getName().equals("Archive")) parentFolderName = dlFolder.getName()+">"+parentFolderName; } long targetFolderId = getFolderId(parentFolderName); dLFileEntry.setFolderId(targetFolderId); dLFileEntry.setRepositoryId(repositeryId); PermissionChecker permissionChecker =PermissionCheckerFactoryUtil.create(UserLocalServiceUtil.getUser(dlFolder.getUserId())); PermissionThreadLocal.setPermissionChecker(permissionChecker); dLFileEntry.getExpandoBridge().setAttribute("archived",true); DLFileEntryLocalServiceUtil.updateDLFileEntry(dLFileEntry, true); System.out.println(i+" "+dLFileEntry.getTitle()+" moved to "+targetFolderId+" "+parentFolderName); i++; } } }catch(Exception e){ e.printStackTrace(); } } public long getFolderId(String folders) { DLFolder folder = null; try { folder = DLFolderLocalServiceUtil.getFolder(spaceGroupId, 0, "Archive"); StringTokenizer tokenizer = new StringTokenizer(folders, ">"); while(tokenizer.hasMoreTokens()){ String folderName = tokenizer.nextToken(); try{ folder = DLFolderLocalServiceUtil.getFolder(spaceGroupId, folder.getFolderId(), folderName); }catch(NoSuchFolderException e){ folder = DLFolderLocalServiceUtil.addFolder(folder.getUserId(), spaceGroupId, folder.getRepositoryId(), folder.getMountPoint(), folder.getFolderId(),folderName, "Expired documents", new ServiceContext()); } } } catch (Exception e) { LOGGER.warn(e.getMessage()); } return folder.getFolderId(); } public Date getDocExpirationDate(String contentXML){ Date timeStampDate = null; try{ DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); InputSource is = new InputSource(); is.setCharacterStream(new StringReader(contentXML)); Document doc = db.parse(is); NodeList nodes = doc.getElementsByTagName("root"); for (int rootNode = 0; rootNode < nodes.getLength(); rootNode++){ Node rootSubNode = nodes.item(rootNode); if(rootSubNode.getNodeType()==Node.ELEMENT_NODE){ Element dynElement = (Element) rootSubNode; NodeList dynNodeList = dynElement.getElementsByTagName("dynamic-element"); for (int dynSubNodeList = 0; dynSubNodeList < dynNodeList.getLength(); dynSubNodeList++){ Element line = (Element) dynNodeList.item(0); if(line.getAttribute("name").equalsIgnoreCase("expirationdate")){ long docTimeStamp = Long.parseLong(line.getTextContent().trim()); timeStampDate = new Date(docTimeStamp); } } } } }catch(Exception docExpirationException){ LOGGER.error("Exception during Expiration Date Conversion::: "+docExpirationException); } return timeStampDate; } }