ComplexAssetReferenceProvider.java 3.2 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.references.Reference
 *  com.adobe.granite.references.ReferenceProvider
 *  com.day.cq.dam.api.Asset
 *  com.day.cq.dam.api.AssetReferenceResolver
 *  com.day.cq.dam.commons.util.DamUtil
 *  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
 */
package com.day.cq.dam.core.impl;

import com.adobe.granite.references.ReferenceProvider;
import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.AssetReferenceResolver;
import com.day.cq.dam.commons.util.DamUtil;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
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;

@Component(metatype=0)
@Service(value={ReferenceProvider.class})
public class ComplexAssetReferenceProvider
implements ReferenceProvider {
    @Reference
    private AssetReferenceResolver customResolver;
    public static final String REFERENCE_TYPE = "complexAssetReference";

    public List<com.adobe.granite.references.Reference> getReferences(Resource resource) {
        ArrayList<com.adobe.granite.references.Reference> references = new ArrayList<com.adobe.granite.references.Reference>();
        if (null != resource && resource.adaptTo(Asset.class) != null) {
            ResourceResolver resolver = resource.getResourceResolver();
            String contentPath = resource.getPath();
            Map complexAssetReferences = this.customResolver.getReferences(contentPath, resolver);
            boolean parentAssetAdded = false;
            for (String key : complexAssetReferences.keySet()) {
                Resource targetResource = resolver.getResource(key);
                references.add(new com.adobe.granite.references.Reference(resource, targetResource, "complexAssetReference"));
                if (parentAssetAdded || !DamUtil.isSubAsset((Resource)resource) || !DamUtil.getParentAsset((Resource)resource).getPath().equals(targetResource.getPath())) continue;
                parentAssetAdded = true;
            }
            if (!parentAssetAdded && DamUtil.isSubAsset((Resource)resource)) {
                com.adobe.granite.references.Reference parentAssetRef = new com.adobe.granite.references.Reference(resource, resolver.getResource(DamUtil.getParentAsset((Resource)resource).getPath()), "complexAssetReference");
                references.add(parentAssetRef);
            }
        }
        return references;
    }

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

    protected void bindCustomResolver(AssetReferenceResolver assetReferenceResolver) {
        this.customResolver = assetReferenceResolver;
    }

    protected void unbindCustomResolver(AssetReferenceResolver assetReferenceResolver) {
        if (this.customResolver == assetReferenceResolver) {
            this.customResolver = null;
        }
    }
}