FolderResourceConverter.java 4.83 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.Action
 *  com.adobe.reef.siren.Action$Method
 *  com.adobe.reef.siren.Entity
 *  com.adobe.reef.siren.Field
 *  com.adobe.reef.siren.Field$FieldType
 *  com.adobe.reef.siren.Link
 *  com.adobe.reef.siren.builder.ActionBuilder
 *  com.adobe.reef.siren.builder.BuilderException
 *  com.adobe.reef.siren.builder.FieldBuilder
 *  org.apache.sling.api.resource.Resource
 *  org.slf4j.Logger
 */
package com.adobe.granite.rest.assets.impl;

import com.adobe.granite.rest.assets.impl.AssetResource;
import com.adobe.granite.rest.assets.impl.FolderResource;
import com.adobe.granite.rest.assets.impl.RenditionResource;
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.Action;
import com.adobe.reef.siren.Entity;
import com.adobe.reef.siren.Field;
import com.adobe.reef.siren.Link;
import com.adobe.reef.siren.builder.ActionBuilder;
import com.adobe.reef.siren.builder.BuilderException;
import com.adobe.reef.siren.builder.FieldBuilder;
import java.util.List;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;

public class FolderResourceConverter
extends AbstractPageableSirenConverter {
    private static final String REL_THUMBNAIL = "thumbnail";

    public FolderResourceConverter(Resource resource) {
        super(resource);
    }

    protected String[] getClazz() {
        return new String[]{"assets/folder"};
    }

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

    protected List<Link> getLinks(ResourceConverterContext context) throws BuilderException, ResourceConverterException {
        RenditionResource thumbnail;
        String nextPageURL;
        String prevPageURL;
        List links = super.getLinks(context);
        if (this.resource instanceof FolderResource && (thumbnail = ((FolderResource)this.resource).getThumbnail()) != null) {
            links.add(this.getLink("thumbnail", this.buildURL(context, thumbnail.getPath(), null), null));
        }
        if ((nextPageURL = this.getNextPageURL(context)) != null) {
            links.add(this.getLink("next", nextPageURL, null));
        }
        if ((prevPageURL = this.getPrevPageURL(context)) != null) {
            links.add(this.getLink("prev", prevPageURL, null));
        }
        return links;
    }

    protected List<Action> getActions(ResourceConverterContext context) throws BuilderException, ResourceConverterException {
        List actions = super.getActions(context);
        actions.add(new ActionBuilder().setName("add-folder").setHref(this.buildURL(context, this.resource.getPath() + "/*", null)).setMethod(Action.Method.POST).setTitle("Add Folder").addField((Field)new FieldBuilder().setName("name").build()).build());
        actions.add(new ActionBuilder().setName("update").setHref(this.buildURL(context, this.resource.getPath(), null)).setMethod(Action.Method.PUT).setTitle("Update").setType("application/vnd.siren+json").addField((Field)new FieldBuilder().setName("data").build()).build());
        if (!"".equals(this.resource.getPath())) {
            actions.add(new ActionBuilder().setName("delete").setHref(this.buildURL(context, this.resource.getPath(), null)).setMethod(Action.Method.DELETE).setTitle("Delete").build());
        }
        actions.add(new ActionBuilder().setName("add-asset").setHref(this.buildURL(context, this.resource.getPath() + "/*", null)).setMethod(Action.Method.POST).setTitle("Add Asset").addField((Field)new FieldBuilder().setName("name").build()).addField((Field)new FieldBuilder().setName("file").setType(Field.FieldType.FILE).build()).build());
        return actions;
    }
}