ComponentServiceImpl.java 3.4 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.day.cq.wcm.api.components.Component
 *  com.day.cq.wcm.api.components.ComponentManager
 *  com.day.cq.wcm.api.components.VirtualComponent
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.ResourceResolverFactory
 *  org.apache.sling.api.resource.ValueMap
 */
package com.day.cq.analytics.impl;

import com.day.cq.analytics.impl.ComponentFilter;
import com.day.cq.analytics.impl.ComponentService;
import com.day.cq.wcm.api.components.ComponentManager;
import com.day.cq.wcm.api.components.VirtualComponent;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Map;
import java.util.TreeMap;
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.ResourceResolver;
import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.api.resource.ValueMap;

@Component
@Service
public class ComponentServiceImpl
implements ComponentService {
    @Reference
    private ResourceResolverFactory rrf;

    @Override
    public Collection<com.day.cq.wcm.api.components.Component> getComponents(ResourceResolver resolver, ComponentFilter filter) {
        ArrayList<com.day.cq.wcm.api.components.Component> components = new ArrayList<com.day.cq.wcm.api.components.Component>();
        HashSet<String> resourceTypes = new HashSet<String>();
        for (com.day.cq.wcm.api.components.Component c : this.getComponentTree(resolver, filter).values()) {
            String key = c.getResourceType();
            if (c instanceof VirtualComponent) {
                String p = c.getPath();
                key = p.substring(p.indexOf("/", 1) + 1);
            }
            if (resourceTypes.contains(key)) continue;
            resourceTypes.add(key);
            components.add(c);
        }
        return components;
    }

    private Map<String, com.day.cq.wcm.api.components.Component> getComponentTree(ResourceResolver resolver, ComponentFilter filter) {
        TreeMap<String, com.day.cq.wcm.api.components.Component> componentTree = new TreeMap<String, com.day.cq.wcm.api.components.Component>();
        ComponentManager componentMgr = (ComponentManager)resolver.adaptTo(ComponentManager.class);
        for (com.day.cq.wcm.api.components.Component c : componentMgr.getComponents()) {
            if (c == null || !c.isAccessible() || !filter.include(resolver, c)) continue;
            boolean displayVirtualsOnly = (Boolean)c.getProperties().get("displayVirtualsOnly", (Object)Boolean.FALSE);
            if (!displayVirtualsOnly) {
                componentTree.put(c.getPath(), c);
            }
            for (VirtualComponent v : c.getVirtualComponents()) {
                componentTree.put(v.getPath(), (com.day.cq.wcm.api.components.Component)v);
            }
        }
        return componentTree;
    }

    protected void bindRrf(ResourceResolverFactory resourceResolverFactory) {
        this.rrf = resourceResolverFactory;
    }

    protected void unbindRrf(ResourceResolverFactory resourceResolverFactory) {
        if (this.rrf == resourceResolverFactory) {
            this.rrf = null;
        }
    }
}