PageResourceConverter.java 4.13 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.rest.converter.ResourceConverter
 *  com.adobe.granite.rest.converter.ResourceConverterContext
 *  com.adobe.granite.rest.converter.ResourceConverterException
 *  com.adobe.granite.rest.converter.siren.AbstractPageableSirenConverter
 *  com.adobe.reef.siren.Entity
 *  com.adobe.reef.siren.Link
 *  com.adobe.reef.siren.builder.BuilderException
 *  com.adobe.reef.siren.builder.EntityBuilder
 *  org.apache.sling.api.resource.Resource
 *  org.apache.sling.api.resource.ResourceUtil
 *  org.apache.sling.api.resource.ValueMap
 *  org.slf4j.Logger
 */
package com.adobe.cq.rest.content.impl;

import com.adobe.cq.rest.content.impl.PageResource;
import com.adobe.granite.rest.converter.ResourceConverter;
import com.adobe.granite.rest.converter.ResourceConverterContext;
import com.adobe.granite.rest.converter.ResourceConverterException;
import com.adobe.granite.rest.converter.siren.AbstractPageableSirenConverter;
import com.adobe.reef.siren.Entity;
import com.adobe.reef.siren.Link;
import com.adobe.reef.siren.builder.BuilderException;
import com.adobe.reef.siren.builder.EntityBuilder;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.api.resource.ResourceUtil;
import org.apache.sling.api.resource.ValueMap;
import org.slf4j.Logger;

public class PageResourceConverter
extends AbstractPageableSirenConverter {
    public PageResourceConverter(Resource resource) {
        super(resource);
    }

    protected String[] getClazz() {
        return new String[]{"content/page"};
    }

    protected List<Link> getLinks(ResourceConverterContext context) throws BuilderException, ResourceConverterException {
        String prevPageURL;
        List links = super.getLinks(context);
        Resource wrappedResource = ((PageResource)this.resource).getWrappedResource();
        if (wrappedResource.getChild("jcr:content") != null && ResourceUtil.isA((Resource)wrappedResource.getChild("jcr:content"), (String)"cq:Page")) {
            links.add(this.getLink("content", this.buildURL(context, wrappedResource.getPath(), ".html"), null));
        }
        links.add(this.getLink("content", this.buildURL(context, wrappedResource.getPath(), ".infinity.json"), null));
        String nextPageURL = this.getNextPageURL(context);
        if (nextPageURL != null) {
            links.add(this.getLink("next", nextPageURL, null));
        }
        if ((prevPageURL = this.getPrevPageURL(context)) != null) {
            links.add(this.getLink("prev", prevPageURL, null));
        }
        return links;
    }

    protected Entity getEntity(ResourceConverterContext context, Resource child) throws ResourceConverterException {
        ResourceConverter renderer = (ResourceConverter)child.adaptTo(ResourceConverter.class);
        if (renderer != null) {
            Entity entity = (Entity)renderer.toSubEntity(context);
            return entity;
        }
        this.log.error("Could not adapt PageResource to ResourceConverter.");
        return null;
    }

    public Entity toSubEntity(ResourceConverterContext context) throws ResourceConverterException {
        try {
            ValueMap props;
            Resource wrappedResource = ((PageResource)this.resource).getWrappedResource();
            LinkedList<Link> links = new LinkedList<Link>();
            links.add(this.getLink("self", this.buildURL(context, this.resource.getPath(), ".json"), null));
            if (wrappedResource.getChild("jcr:content") != null && (props = (ValueMap)wrappedResource.getChild("jcr:content").adaptTo(ValueMap.class)) != null && "cq:PageContent".equals(props.get((Object)"jcr:primaryType"))) {
                links.add(this.getLink("content", this.buildURL(context, wrappedResource.getPath(), ".html"), null));
            }
            Entity entity = (Entity)new EntityBuilder().setClass(this.getClazz()).setLinks(links).setProperties(this.getProperties(context, true)).build();
            return entity;
        }
        catch (Exception e) {
            throw new ResourceConverterException((Throwable)e);
        }
    }
}