BlueprintReferenceProvider.java 3.44 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.cq.wcm.launches.utils.LaunchUtils
 *  com.adobe.granite.references.Reference
 *  com.adobe.granite.references.ReferenceProvider
 *  com.day.cq.wcm.api.WCMException
 *  com.day.cq.wcm.msm.api.LiveRelationship
 *  com.day.cq.wcm.msm.api.LiveRelationshipManager
 *  com.day.cq.wcm.msm.api.LiveStatus
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.day.cq.wcm.msm.impl.references;

import com.adobe.cq.wcm.launches.utils.LaunchUtils;
import com.adobe.granite.references.ReferenceProvider;
import com.day.cq.wcm.api.WCMException;
import com.day.cq.wcm.msm.api.LiveRelationship;
import com.day.cq.wcm.msm.api.LiveRelationshipManager;
import com.day.cq.wcm.msm.api.LiveStatus;
import java.util.ArrayList;
import java.util.List;
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.Resource;
import org.apache.sling.api.resource.ResourceResolver;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(metatype=0)
@Service(value={ReferenceProvider.class})
public class BlueprintReferenceProvider
implements ReferenceProvider {
    @Reference
    private LiveRelationshipManager liveRelationshipManager = null;
    public static final String REFERENCE_TYPE = "blueprint";
    private static final Logger log = LoggerFactory.getLogger(BlueprintReferenceProvider.class);

    public List<com.adobe.granite.references.Reference> getReferences(Resource resource) {
        ArrayList<com.adobe.granite.references.Reference> references = new ArrayList<com.adobe.granite.references.Reference>();
        ResourceResolver resolver = resource.getResourceResolver();
        try {
            LiveRelationship liveRelationship = this.liveRelationshipManager.getLiveRelationship(resource, false);
            if (liveRelationship != null) {
                boolean isLaunch = LaunchUtils.isLaunchResourcePath((String)liveRelationship.getTargetPath());
                if (liveRelationship.getStatus().isSourceExisting() && !isLaunch) {
                    references.add(new com.adobe.granite.references.Reference(resolver.getResource(liveRelationship.getSourcePath()), resolver.getResource(liveRelationship.getTargetPath()), "blueprint"));
                } else {
                    log.debug("Omitted reference to non-existing source from {} to {}", (Object)liveRelationship.getSourcePath(), (Object)liveRelationship.getTargetPath());
                }
            }
        }
        catch (WCMException e) {
            log.error("Failed to access the blueprint for {}, {} -> return empty", (Object)resource.getPath(), (Object)e);
        }
        return references;
    }

    public String getType() {
        return "blueprint";
    }

    protected void bindLiveRelationshipManager(LiveRelationshipManager liveRelationshipManager) {
        this.liveRelationshipManager = liveRelationshipManager;
    }

    protected void unbindLiveRelationshipManager(LiveRelationshipManager liveRelationshipManager) {
        if (this.liveRelationshipManager == liveRelationshipManager) {
            this.liveRelationshipManager = null;
        }
    }
}