Cq561ProjectContentUpgrade.java 3.23 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  javax.jcr.Node
 *  javax.jcr.NodeIterator
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.compat.codeupgrade.impl.cq561;

import com.day.cq.compat.codeupgrade.internal.api.ProgressInfoProvider;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Cq561ProjectContentUpgrade
implements ProgressInfoProvider {
    private static final String SLING_TARGET = "sling:target";
    private static final String PROJECTS_PATH = "/etc/projects";
    private static final String RESOURCE_TYPE_PROJECT_CARD = "cq/gui/components/projects/admin/projectcard";
    private static final String SLING_RESOURCE_TYPE_PROPERTY = "sling:resourceType";
    private final Logger log;
    private String progressInfo;

    public Cq561ProjectContentUpgrade() {
        this.log = LoggerFactory.getLogger(this.getClass());
        this.progressInfo = "Migration has not started.";
    }

    @Override
    public String getProgressInfo() {
        return this.progressInfo;
    }

    void setProgressInfo(String info) {
        this.progressInfo = info;
        this.log.info(this.progressInfo);
    }

    void doUpgrade(Session session) throws Exception {
        this.setProgressInfo("Start Project Content upgrade.");
        Node projectNode = session.getNode("/etc/projects");
        if (projectNode != null) {
            if (this.migrateProjects(projectNode)) {
                this.save(session);
            }
        } else {
            this.setProgressInfo("Unable to find any projects under /etc/projects");
        }
        this.setProgressInfo("All done.");
    }

    public void save(Session session) throws RepositoryException, IllegalArgumentException {
        if (session == null) {
            throw new IllegalArgumentException("Session is invalid");
        }
        try {
            session.save();
        }
        catch (RepositoryException e) {
            session.refresh(false);
            throw e;
        }
    }

    private boolean migrateProjects(Node rootNode) throws RepositoryException {
        boolean hasMigratedProjects = false;
        NodeIterator tenantIterator = rootNode.getNodes();
        while (tenantIterator.hasNext()) {
            Node tenant = tenantIterator.nextNode();
            NodeIterator projectIterator = tenant.getNodes();
            while (projectIterator.hasNext()) {
                Node project = projectIterator.nextNode();
                boolean isOld = false;
                if (project.hasProperty("sling:target")) {
                    isOld = true;
                    project.getProperty("sling:target").remove();
                }
                if (!isOld) continue;
                this.setProgressInfo("Migrating project '" + project.getPath() + "' to 5.6.1 format.");
                project.setProperty("sling:resourceType", "cq/gui/components/projects/admin/projectcard");
                hasMigratedProjects = true;
            }
        }
        return hasMigratedProjects;
    }
}