ReplicationAgentProviderImpl.java 4.61 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.replication.AgentConfig
 *  com.day.cq.replication.ReplicationException
 *  com.day.cq.replication.ReplicationLog
 *  com.scene7.is.catalog.service.publish.atomic.PublishingService
 *  com.scene7.is.catalog.service.publish.atomic.PublishingServiceHttp
 *  com.scene7.is.util.callbacks.Proc1
 *  com.scene7.is.util.error.Unchecked
 *  org.apache.commons.httpclient.HttpClient
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.ValueMap
 *  org.jetbrains.annotations.NotNull
 */
package com.adobe.cq.dam.aod.replication.transport_config;

import com.adobe.cq.dam.aod.replication.PublishingAgent;
import com.adobe.cq.dam.aod.replication.Util;
import com.adobe.cq.dam.aod.replication.transport_config.HttpClientProvider;
import com.adobe.cq.dam.aod.replication.transport_config.ReplicationAgentProvider;
import com.day.cq.replication.AgentConfig;
import com.day.cq.replication.ReplicationException;
import com.day.cq.replication.ReplicationLog;
import com.scene7.is.catalog.service.publish.atomic.PublishingService;
import com.scene7.is.catalog.service.publish.atomic.PublishingServiceHttp;
import com.scene7.is.util.callbacks.Proc1;
import com.scene7.is.util.error.Unchecked;
import java.net.URL;
import org.apache.commons.httpclient.HttpClient;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.resource.ValueMap;
import org.jetbrains.annotations.NotNull;

@Service(value={ReplicationAgentProvider.class})
@Component(immediate=1)
public final class ReplicationAgentProviderImpl
implements ReplicationAgentProvider {
    @Reference
    @NotNull
    private final HttpClientProvider httpClientProvider;

    public static ReplicationAgentProvider replicationAgentProvider(HttpClientProvider httpClientProvider) {
        return new ReplicationAgentProviderImpl(httpClientProvider);
    }

    public static ReplicationAgentProvider replicationAgentProvider() {
        return new ReplicationAgentProvider(){

            @Override
            public PublishingService getAgent(AgentConfig config, ReplicationLog log) throws ReplicationException {
                URL serverUrl = Util.serverUrl(config.getTransportURI());
                String tenantId = ReplicationAgentProviderImpl.tenantId(config);
                PublishingServiceHttp service = PublishingServiceHttp.publishingClient((URL)serverUrl, (Proc1)ReplicationAgentProviderImpl.doLog(log));
                return PublishingAgent.publishingAgent(tenantId, (PublishingService)service);
            }
        };
    }

    @Override
    public PublishingService getAgent(AgentConfig config, ReplicationLog log) throws ReplicationException {
        URL serverUrl = Util.serverUrl(config.getTransportURI());
        String tenantId = ReplicationAgentProviderImpl.tenantId(config);
        HttpClient httpClient = this.httpClientProvider.getHttpClient(config, log);
        PublishingServiceHttp service = PublishingServiceHttp.publishingClient((HttpClient)httpClient, (String)serverUrl.toString(), ReplicationAgentProviderImpl.doLog(log));
        return PublishingAgent.publishingAgent(tenantId, (PublishingService)service);
    }

    private static String tenantId(AgentConfig config) {
        ValueMap props = config.getProperties();
        String tenantId = (String)props.get("companyName", String.class);
        if (tenantId == null || tenantId.isEmpty()) {
            throw Unchecked.unchecked((Throwable)new ReplicationException("companyName (tenantId) property in replication agent configuration must be defined and non empty"));
        }
        return tenantId;
    }

    private ReplicationAgentProviderImpl(@NotNull HttpClientProvider httpClientProvider) {
        this.httpClientProvider = httpClientProvider;
    }

    private static Proc1<String> doLog(final ReplicationLog log) {
        return new Proc1<String>(){

            protected void run(String s) {
                log.info(s);
            }
        };
    }

    public ReplicationAgentProviderImpl() {
        this.httpClientProvider = (HttpClientProvider)Util.initRef();
    }

    protected void bindHttpClientProvider(HttpClientProvider httpClientProvider) {
        this.httpClientProvider = httpClientProvider;
    }

    protected void unbindHttpClientProvider(HttpClientProvider httpClientProvider) {
        if (this.httpClientProvider == httpClientProvider) {
            this.httpClientProvider = null;
        }
    }

}