LinkCheckerConfigUpgradeService.java 7.35 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.rewriter.linkchecker.LinkCheckerSettingsProvider
 *  javax.jcr.Node
 *  javax.jcr.Property
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.Value
 *  org.apache.felix.scr.annotations.Activate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.sling.commons.osgi.PropertiesUtil
 *  org.apache.sling.jcr.api.SlingRepository
 *  org.osgi.framework.InvalidSyntaxException
 *  org.osgi.service.cm.Configuration
 *  org.osgi.service.cm.ConfigurationAdmin
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.wcm.core.impl;

import com.day.cq.rewriter.linkchecker.LinkCheckerSettingsProvider;
import com.day.cq.wcm.core.impl.LinkCheckerConfigurationFactoryImpl;
import java.io.IOException;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Map;
import javax.jcr.Node;
import javax.jcr.Property;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.Value;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.jcr.api.SlingRepository;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.service.cm.Configuration;
import org.osgi.service.cm.ConfigurationAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(immediate=1)
public class LinkCheckerConfigUpgradeService {
    @Reference
    private LinkCheckerSettingsProvider linkCheckerSettingsProvider;
    @Reference
    private LinkCheckerConfigurationFactoryImpl linkCheckerConfigurationFactory;
    @Reference
    private ConfigurationAdmin configurationAdmin;
    @Reference
    private SlingRepository repository;
    private final Logger log;
    private static final String REWRITE_CONFIGS = "linkcheckersettings.rewrite_configs";
    private static final String LINK = "link";
    private static final String PN_WCMMODES = "wcmmodes";
    private static final String PN_REMOVE = "remove";
    private static final String PN_PREFIX = "prefix";
    private static final String PN_SUFFIX = "suffix";
    private static final String[] nodeNames = new String[]{"invalid", "predated", "expired"};

    public LinkCheckerConfigUpgradeService() {
        this.log = LoggerFactory.getLogger(this.getClass());
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @Activate
    protected void activate(Map<String, Object> params) {
        Session session = null;
        try {
            Configuration settingsProviderconfig = this.configurationAdmin.getConfiguration("com.day.cq.wcm.core.impl.LinkCheckerSettingsProviderImpl");
            if (settingsProviderconfig.getProperties() != null) {
                session = this.repository.loginAdministrative(null);
                String[] configPaths = (String[])settingsProviderconfig.getProperties().get("linkcheckersettings.rewrite_configs");
                if (configPaths != null) {
                    int configIndex;
                    Configuration[] defaultconfigurations = this.configurationAdmin.listConfigurations("(service.factoryPid=com.day.cq.wcm.core.impl.LinkCheckerConfigurationFactoryImpl)");
                    for (configIndex = 0; configIndex < configPaths.length; ++configIndex) {
                        Node node = session.getNode(configPaths[configIndex]);
                        if (node.hasProperty("converted") && node.getProperty("converted").getBoolean()) continue;
                        Hashtable<String, Object> dict = new Hashtable<String, Object>();
                        if (!node.hasProperty("wcmmodes")) continue;
                        dict.put("link.wcmmodes", PropertiesUtil.toStringArray((Object)node.getProperty("wcmmodes").getValues(), (String[])null));
                        for (String nodeName : nodeNames) {
                            Node childNode;
                            if (!node.hasNode(nodeName)) continue;
                            dict.put("link." + nodeName + "." + "prefix", (childNode = node.getNode(nodeName)).hasProperty("prefix") ? childNode.getProperty("prefix").getString() : "");
                            dict.put("link." + nodeName + "." + "remove", childNode.hasProperty("remove") && childNode.getProperty("remove").getBoolean());
                            dict.put("link." + nodeName + "." + "suffix", childNode.hasProperty("suffix") ? childNode.getProperty("suffix").getString() : "");
                        }
                        node.setProperty("converted", true);
                        Configuration factoryConfig = configIndex < defaultconfigurations.length ? defaultconfigurations[configIndex] : this.configurationAdmin.createFactoryConfiguration("com.day.cq.wcm.core.impl.LinkCheckerConfigurationFactoryImpl");
                        factoryConfig.update(dict);
                    }
                    while (configIndex < defaultconfigurations.length) {
                        defaultconfigurations[configIndex].delete();
                        ++configIndex;
                    }
                    session.save();
                    settingsProviderconfig.delete();
                }
            }
        }
        catch (IOException e) {
            this.log.error("Unable to read configuration from ConfigurationAdmin", (Throwable)e);
        }
        catch (RepositoryException e) {
            this.log.error("Unable to Read repository", (Throwable)e);
        }
        catch (InvalidSyntaxException e) {
            this.log.error("Invalid Filter Syntax", (Throwable)e);
        }
        finally {
            if (session != null) {
                session.logout();
            }
        }
    }

    protected void bindLinkCheckerSettingsProvider(LinkCheckerSettingsProvider linkCheckerSettingsProvider) {
        this.linkCheckerSettingsProvider = linkCheckerSettingsProvider;
    }

    protected void unbindLinkCheckerSettingsProvider(LinkCheckerSettingsProvider linkCheckerSettingsProvider) {
        if (this.linkCheckerSettingsProvider == linkCheckerSettingsProvider) {
            this.linkCheckerSettingsProvider = null;
        }
    }

    protected void bindLinkCheckerConfigurationFactory(LinkCheckerConfigurationFactoryImpl linkCheckerConfigurationFactoryImpl) {
        this.linkCheckerConfigurationFactory = linkCheckerConfigurationFactoryImpl;
    }

    protected void unbindLinkCheckerConfigurationFactory(LinkCheckerConfigurationFactoryImpl linkCheckerConfigurationFactoryImpl) {
        if (this.linkCheckerConfigurationFactory == linkCheckerConfigurationFactoryImpl) {
            this.linkCheckerConfigurationFactory = null;
        }
    }

    protected void bindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
        this.configurationAdmin = configurationAdmin;
    }

    protected void unbindConfigurationAdmin(ConfigurationAdmin configurationAdmin) {
        if (this.configurationAdmin == configurationAdmin) {
            this.configurationAdmin = null;
        }
    }

    protected void bindRepository(SlingRepository slingRepository) {
        this.repository = slingRepository;
    }

    protected void unbindRepository(SlingRepository slingRepository) {
        if (this.repository == slingRepository) {
            this.repository = null;
        }
    }
}