BuilderResource.java 2.19 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceMetadata
 *  org.apache.sling.api.resource.ResourceResolver
 *  org.apache.sling.api.resource.SyntheticResource
 *  org.apache.sling.api.resource.ValueMap
 *  org.apache.sling.api.wrappers.ValueMapDecorator
 */
package com.day.cq.wcm.core.impl;

import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceMetadata;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.resource.SyntheticResource;
import org.apache.sling.api.resource.ValueMap;
import org.apache.sling.api.wrappers.ValueMapDecorator;

public class BuilderResource
extends SyntheticResource {
    private Map<String, Object> properties = new LinkedHashMap<String, Object>();
    private Map<String, Resource> children = new LinkedHashMap<String, Resource>();

    public BuilderResource(ResourceResolver resourceResolver, String path, String resourceType) {
        super(resourceResolver, path, resourceType);
    }

    public BuilderResource(ResourceResolver resourceResolver, ResourceMetadata rm, String resourceType) {
        super(resourceResolver, rm, resourceType);
    }

    public Resource getChild(String relPath) {
        return this.children.get(relPath);
    }

    public Iterator<Resource> listChildren() {
        return this.children.values().iterator();
    }

    public boolean hasChildren() {
        return !this.children.isEmpty();
    }

    public BuilderResource setProperty(String name, Object value) {
        this.properties.put(name, value);
        return this;
    }

    public ValueMap getProperties() {
        return this.adaptTo(ValueMap.class);
    }

    public BuilderResource addChild(Resource child) {
        this.children.put(child.getName(), child);
        return this;
    }

    public <Type> Type adaptTo(Class<Type> type) {
        if (ValueMap.class.equals(type)) {
            return (Type)new ValueMapDecorator(this.properties);
        }
        return (Type)super.adaptTo(type);
    }
}