CRX3RepositoryImpl.java 7.32 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.license.License
 *  com.adobe.granite.license.ProductInfoService
 *  com.day.crx.CRXModule
 *  com.day.crx.CRXRepository
 *  com.day.crx.License
 *  javax.jcr.Credentials
 *  javax.jcr.Repository
 *  javax.jcr.RepositoryException
 *  javax.jcr.Session
 *  javax.jcr.UnsupportedRepositoryOperationException
 *  javax.jcr.Value
 *  javax.jcr.ValueFactory
 *  org.apache.jackrabbit.commons.SimpleValueFactory
 *  org.apache.jackrabbit.oak.Oak
 *  org.apache.jackrabbit.oak.api.ContentRepository
 *  org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate
 *  org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl
 *  org.apache.jackrabbit.oak.jcr.session.SessionContext
 *  org.apache.jackrabbit.oak.jcr.session.SessionImpl
 *  org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter
 *  org.apache.jackrabbit.oak.spi.security.SecurityProvider
 *  org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard
 *  org.apache.jackrabbit.oak.stats.StatisticManager
 *  org.apache.jackrabbit.oak.util.GenericDescriptors
 *  org.apache.sling.discovery.ClusterView
 *  org.apache.sling.discovery.InstanceDescription
 *  org.apache.sling.settings.SlingSettingsService
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.granite.repository.impl;

import com.adobe.granite.license.License;
import com.adobe.granite.license.ProductInfoService;
import com.adobe.granite.repository.impl.CRX3SessionImpl;
import com.adobe.granite.repository.impl.SlingRepositoryManager;
import com.day.crx.CRXModule;
import com.day.crx.CRXRepository;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.jcr.Credentials;
import javax.jcr.Repository;
import javax.jcr.RepositoryException;
import javax.jcr.Session;
import javax.jcr.UnsupportedRepositoryOperationException;
import javax.jcr.Value;
import javax.jcr.ValueFactory;
import org.apache.jackrabbit.commons.SimpleValueFactory;
import org.apache.jackrabbit.oak.Oak;
import org.apache.jackrabbit.oak.api.ContentRepository;
import org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate;
import org.apache.jackrabbit.oak.jcr.repository.RepositoryImpl;
import org.apache.jackrabbit.oak.jcr.session.SessionContext;
import org.apache.jackrabbit.oak.jcr.session.SessionImpl;
import org.apache.jackrabbit.oak.plugins.observation.CommitRateLimiter;
import org.apache.jackrabbit.oak.spi.security.SecurityProvider;
import org.apache.jackrabbit.oak.spi.whiteboard.Whiteboard;
import org.apache.jackrabbit.oak.stats.StatisticManager;
import org.apache.jackrabbit.oak.util.GenericDescriptors;
import org.apache.sling.discovery.ClusterView;
import org.apache.sling.discovery.InstanceDescription;
import org.apache.sling.settings.SlingSettingsService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

class CRX3RepositoryImpl
extends RepositoryImpl
implements CRXRepository {
    private static final Logger log = LoggerFactory.getLogger(CRX3RepositoryImpl.class);
    private final ValueFactory valueFactory = new SimpleValueFactory();
    private final SlingRepositoryManager manager;

    CRX3RepositoryImpl(SlingRepositoryManager manager, ContentRepository contentRepository, Whiteboard whiteboard, SecurityProvider securityProvider, SlingSettingsService settingsService, int observationQueueLength, CommitRateLimiter commitRateLimiter, boolean fastQueryResultSize) {
        String oakClusterId;
        super(contentRepository, whiteboard, securityProvider, observationQueueLength, commitRateLimiter, fastQueryResultSize);
        this.manager = manager;
        if (settingsService != null) {
            this.getDescriptors().put("crx.repository.systemid", this.valueFactory.createValue(settingsService.getSlingId()), true, false);
        }
        if ((oakClusterId = this.getDescriptor("oak.clusterid")) != null && oakClusterId.length() != 0) {
            this.getDescriptors().put("crx.cluster.id", this.valueFactory.createValue(oakClusterId), true, false);
        }
        log.info("Repository started.");
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    public Session login(Credentials credentials, String workspace, Map<String, Object> attributes) throws RepositoryException {
        Thread thread = Thread.currentThread();
        ClassLoader loader = thread.getContextClassLoader();
        try {
            thread.setContextClassLoader(Oak.class.getClassLoader());
            if (attributes == null) {
                attributes = Collections.singletonMap("oak.relaxed-locking", Boolean.TRUE);
            } else if (!attributes.containsKey("oak.relaxed-locking")) {
                attributes = new HashMap<String, Object>(attributes);
                attributes.put("oak.relaxed-locking", Boolean.TRUE);
            }
            Session session = super.login(credentials, workspace, attributes);
            return session;
        }
        finally {
            thread.setContextClassLoader(loader);
        }
    }

    protected SessionContext createSessionContext(StatisticManager statisticManager, SecurityProvider securityProvider, Map<String, Object> attributes, SessionDelegate delegate, int observationQueueLength, CommitRateLimiter commitRateLimiter) {
        return new SessionContext((Repository)this, statisticManager, securityProvider, this.whiteboard, attributes, delegate, observationQueueLength, commitRateLimiter, this.fastQueryResultSize){

            protected SessionImpl createSession() {
                return new CRX3SessionImpl(this);
            }
        };
    }

    void setClusterState(InstanceDescription clusterInstanceDesc) {
        if (clusterInstanceDesc == null) {
            this.getDescriptors().put("crx.cluster.master", this.valueFactory.createValue(false), true, false);
        } else {
            this.getDescriptors().put("crx.cluster.master", this.valueFactory.createValue(clusterInstanceDesc.isLeader()), true, false);
            this.getDescriptors().put("crx.cluster.id", this.valueFactory.createValue(clusterInstanceDesc.getClusterView().getId()), true, false);
        }
    }

    public File getHomeDir() {
        return this.manager.getRepositoryHome();
    }

    public com.day.crx.License getLicense() {
        return new com.day.crx.License(){

            public String getCustomerName() {
                return CRX3RepositoryImpl.this.manager.getProductInfo().getLicense().getCustomerName();
            }

            public String getDownloadId() {
                return CRX3RepositoryImpl.this.manager.getProductInfo().getLicense().getDownloadId();
            }

            public String getProductName() {
                return CRX3RepositoryImpl.this.manager.getProductInfo().getLicense().getProductName();
            }

            public String getProductVersion() {
                return CRX3RepositoryImpl.this.manager.getProductInfo().getLicense().getProductVersion();
            }
        };
    }

    public CRXModule getModule(String moduleName) {
        return null;
    }

    public CRXModule[] getModules() {
        return new CRXModule[0];
    }

    public void installModule(Session session, CRXModule module) throws RepositoryException {
        throw new UnsupportedRepositoryOperationException("CRX modules are not supported by crx3");
    }

    public void uninstallModule(Session session, String moduleName) {
    }

}