package org.exoplatform.ecms.upgrade.node.property; import org.exoplatform.commons.upgrade.UpgradeProductPlugin; import org.exoplatform.commons.version.util.VersionComparator; import org.exoplatform.container.xml.InitParams; import org.exoplatform.portal.config.UserACL; import org.exoplatform.services.jcr.RepositoryService; import org.exoplatform.services.jcr.access.PermissionType; import org.exoplatform.services.jcr.core.ExtendedNode; import org.exoplatform.services.jcr.ext.common.SessionProvider; import org.exoplatform.services.jcr.ext.hierarchy.NodeHierarchyCreator; import org.exoplatform.services.log.ExoLogger; import org.exoplatform.services.log.Log; import javax.jcr.Node; import javax.jcr.RepositoryException; import javax.jcr.Session; /** * Created by toannh on 10/28/14. * Update setProperty permission for role *:/platform/users */ public class ChangeDigitalAccessUpgradePlugin extends UpgradeProductPlugin { private static final Log LOG = ExoLogger.getLogger(ChangeDigitalAccessUpgradePlugin.class); private static final String[] EXO_DIGITAL_PATH_ALIAS = new String[]{ "digitalVideoPath", "digitalAudioPath", "digitalAssetsPath", "digitalPicturePath" }; private RepositoryService repoService; private NodeHierarchyCreator nodeHierarchyCreator; public ChangeDigitalAccessUpgradePlugin(InitParams initParams, RepositoryService repoService, NodeHierarchyCreator nodeHierarchyCreator, UserACL userAcl) { super(initParams); this.repoService = repoService; this.nodeHierarchyCreator = nodeHierarchyCreator; } @Override public void processUpgrade(String oldVersion, String newVersion) { SessionProvider sessionProvider = SessionProvider.createSystemProvider();; LOG.info("Processing update setProperty permission for users has addNode permission..."); try { String ws = repoService.getCurrentRepository().getConfiguration().getDefaultWorkspaceName(); Session session = sessionProvider.getSession(ws, repoService.getCurrentRepository()); for (String digitalNodePath: EXO_DIGITAL_PATH_ALIAS){ String exoDigitalNodePath = nodeHierarchyCreator.getJcrPath(digitalNodePath); Node exoDigital = (Node)session.getItem(exoDigitalNodePath); setPermission(exoDigital); } LOG.info("Product info node upgraded successfully!"); }catch(RepositoryException re){ if(LOG.isErrorEnabled()) LOG.error(re.getMessage()); }finally { sessionProvider.close(); } } @Override public boolean shouldProceedToUpgrade(String newVersion, String previousVersion) { return VersionComparator.isAfter(newVersion, previousVersion); } /** * Set setProperty permission for plf-user. * @param node */ private void setPermission(Node node){ ExtendedNode extendedNode = (ExtendedNode)node; String nodeName=""; try { nodeName = extendedNode.getName(); String[] permissions = new String[]{ PermissionType.READ, PermissionType.ADD_NODE, PermissionType.SET_PROPERTY}; extendedNode.setPermission("*:/platform/users", permissions); extendedNode.save(); }catch(RepositoryException ex){ LOG.info(""+nodeName+" has been error while update permission!"); if(LOG.isErrorEnabled()) LOG.error(ex.getMessage()); }catch(Exception ex){ if(LOG.isErrorEnabled()) LOG.error(ex.getMessage()); } } }