001    /**
002     * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
014    
015    package com.liferay.portal.verify;
016    
017    import com.liferay.portal.kernel.dao.orm.ActionableDynamicQuery;
018    import com.liferay.portal.kernel.dao.orm.QueryUtil;
019    import com.liferay.portal.kernel.log.Log;
020    import com.liferay.portal.kernel.log.LogFactoryUtil;
021    import com.liferay.portlet.wiki.model.WikiPage;
022    import com.liferay.portlet.wiki.model.WikiPageResource;
023    import com.liferay.portlet.wiki.service.WikiPageLocalServiceUtil;
024    import com.liferay.portlet.wiki.service.WikiPageResourceLocalServiceUtil;
025    import com.liferay.portlet.wiki.util.comparator.PageVersionComparator;
026    
027    import java.util.Date;
028    import java.util.List;
029    
030    /**
031     * @author Brian Wing Shun Chan
032     */
033    public class VerifyWiki extends VerifyProcess {
034    
035            @Override
036            protected void doVerify() throws Exception {
037                    verifyCreateDate();
038                    verifyNoAssetPages();
039            }
040    
041            protected void verifyCreateDate() throws Exception {
042                    ActionableDynamicQuery actionableDynamicQuery =
043                            WikiPageResourceLocalServiceUtil.getActionableDynamicQuery();
044    
045                    actionableDynamicQuery.setPerformActionMethod(
046                            new ActionableDynamicQuery.PerformActionMethod() {
047    
048                                    @Override
049                                    public void performAction(Object object) {
050                                            WikiPageResource pageResource = (WikiPageResource)object;
051    
052                                            verifyCreateDate(pageResource);
053                                    }
054    
055                            });
056    
057                    actionableDynamicQuery.performActions();
058    
059                    if (_log.isDebugEnabled()) {
060                            _log.debug("Create dates verified for pages");
061                    }
062            }
063    
064            protected void verifyCreateDate(WikiPageResource pageResource) {
065                    List<WikiPage> pages = WikiPageLocalServiceUtil.getPages(
066                            pageResource.getNodeId(), pageResource.getTitle(),
067                            QueryUtil.ALL_POS, QueryUtil.ALL_POS,
068                            new PageVersionComparator(true));
069    
070                    if (pages.size() <= 1) {
071                            return;
072                    }
073    
074                    WikiPage firstPage = pages.get(0);
075    
076                    Date createDate = firstPage.getCreateDate();
077    
078                    for (WikiPage page : pages) {
079                            if (!createDate.equals(page.getCreateDate())) {
080                                    page.setCreateDate(createDate);
081    
082                                    WikiPageLocalServiceUtil.updateWikiPage(page);
083                            }
084                    }
085            }
086    
087            protected void verifyNoAssetPages() throws Exception {
088                    List<WikiPage> pages = WikiPageLocalServiceUtil.getNoAssetPages();
089    
090                    if (_log.isDebugEnabled()) {
091                            _log.debug("Processing " + pages.size() + " pages with no asset");
092                    }
093    
094                    for (WikiPage page : pages) {
095                            try {
096                                    WikiPageLocalServiceUtil.updateAsset(
097                                            page.getUserId(), page, null, null, null);
098                            }
099                            catch (Exception e) {
100                                    if (_log.isWarnEnabled()) {
101                                            _log.warn(
102                                                    "Unable to update asset for page " + page.getPageId() +
103                                                            ": " + e.getMessage());
104                                    }
105                            }
106                    }
107    
108                    if (_log.isDebugEnabled()) {
109                            _log.debug("Assets verified for pages");
110                    }
111            }
112    
113            private static final Log _log = LogFactoryUtil.getLog(VerifyWiki.class);
114    
115    }