package org.exoplatform.ecms.upgrade.activities; import org.exoplatform.commons.upgrade.UpgradeProductPlugin; import org.exoplatform.commons.version.util.VersionComparator; import org.exoplatform.container.xml.InitParams; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import org.exoplatform.services.wcm.core.NodetypeConstant; import org.exoplatform.services.cms.impl.Utils; import javax.jcr.ItemNotFoundException; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.PathNotFoundException; import javax.jcr.Session; import javax.jcr.query.Query; import javax.jcr.query.QueryResult; public class ActivitiesUpgradePlugin extends UpgradeProductPlugin { private Log log = ExoLogger.getLogger(this.getClass()); private RepositoryService repoService_; public ActivitiesUpgradePlugin(RepositoryService repoService, InitParams initParams) { super(initParams); repoService_ = repoService; } @Override public void processUpgrade(String oldVersion, String newVersion) { if (log.isInfoEnabled()) { log.info("Start " + this.getClass().getName() + "............."); } SessionProvider sessionProvider = null; try { sessionProvider = SessionProvider.createSystemProvider(); Session session = sessionProvider.getSession("social", repoService_.getCurrentRepository()); if (log.isInfoEnabled()) { log.info("=====Start migrate data for all activities====="); } String statement = "SELECT * FROM soc:activity WHERE soc:type = 'contents:spaces'"; QueryResult result = session.getWorkspace().getQueryManager().createQuery(statement, Query.SQL).execute(); NodeIterator nodeIter = result.getNodes(); while(nodeIter.hasNext()) { Node viewNode = nodeIter.nextNode(); Node paramsNode = viewNode.getNode("soc:params"); String workspace = paramsNode.getProperty("workspace").getString(); String nodeUrl = viewNode.getProperty("soc:url").getString(); String nodeUUID = paramsNode.getProperty("id").getString(); Session session2 = sessionProvider.getSession(workspace, repoService_.getCurrentRepository()); try{ Node node = (Node)session2.getItem(nodeUrl); if(node.isNodeType(NodetypeConstant.NT_FILE)) { viewNode.setProperty("soc:type", "files:spaces"); } } catch(PathNotFoundException ex) { try { Node node = (Node)session2.getNodeByUUID(nodeUUID); if(node.isNodeType(NodetypeConstant.NT_FILE)) { if(Utils.isInTrash(node)) { viewNode.remove(); } else { viewNode.setProperty("soc:type", "files:spaces"); viewNode.setProperty("soc:url", node.getPath()); } } } catch(ItemNotFoundException ix){ continue; } } } session.save(); if (log.isInfoEnabled()) { log.info("=====Completed the migration data for all activities====="); } } catch (Exception e) { if (log.isErrorEnabled()) { log.error("An unexpected error occurs when migrating activities: ", e); } } finally { if (sessionProvider != null) { sessionProvider.close(); } } } @Override public boolean shouldProceedToUpgrade(String newVersion, String previousVersion) { // --- return true only for the first version of platform return VersionComparator.isAfter(newVersion,previousVersion); } }