TaskAdapterFactory.java 4.76 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  com.adobe.granite.taskmanagement.Task
 *  com.adobe.granite.taskmanagement.TaskManagerException
 *  com.adobe.granite.workflow.exec.InboxItem
 *  javax.jcr.Node
 *  javax.jcr.RepositoryException
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Properties
 *  org.apache.felix.scr.annotations.Property
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.Service
 *  org.apache.sling.api.adapter.AdapterFactory
 *  org.apache.sling.api.adapter.AdapterManager
 *  org.apache.sling.api.resource.Resource
 *  org.slf4j.Logger
 *  org.slf4j.LoggerFactory
 */
package com.adobe.granite.taskmanagement.impl.jcr;

import com.adobe.granite.taskmanagement.Task;
import com.adobe.granite.taskmanagement.TaskManagerException;
import com.adobe.granite.taskmanagement.impl.jcr.TaskStorageProvider;
import com.adobe.granite.workflow.exec.InboxItem;
import javax.jcr.Node;
import javax.jcr.RepositoryException;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
import org.apache.sling.api.adapter.AdapterFactory;
import org.apache.sling.api.adapter.AdapterManager;
import org.apache.sling.api.resource.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/*
 * This class specifies class file version 49.0 but uses Java 6 signatures.  Assumed Java 6.
 */
@Component(metatype=1, label="Adobe Granite Task Adapter Factory", description="Adapts JCR node or Apache Sling resource to a task instance.")
@Properties(value={@Property(name="service.description", value={"Adapts jcr node or sling resource to a task instance."}), @Property(name="adapter.condition", value={"If the Node or Resource points is of type cq:WorkItem"})})
@Service(value={AdapterFactory.class})
public class TaskAdapterFactory
implements AdapterFactory {
    private static Logger log = LoggerFactory.getLogger(TaskAdapterFactory.class);
    @Property(name="adapters", propertyPrivate=1)
    private static final String[] ADAPTER_CLASSES = new String[]{Task.class.getName(), InboxItem.class.getName()};
    @Property(name="adaptables", propertyPrivate=1)
    private static final String[] ADAPTABLE_CLASSES = new String[]{Node.class.getName(), Resource.class.getName()};
    @Reference
    AdapterManager adapterManager;
    @Reference
    TaskStorageProvider taskStorageProvider;

    public <AdapterType> AdapterType getAdapter(Object adaptable, Class<AdapterType> type) {
        log.trace("attempting to adapt a class of type [{}] to type [{}]", (Object)adaptable.getClass().getName(), (Object)type.getClass().getName());
        Node node = null;
        if (Task.class == type || InboxItem.class == type) {
            if (adaptable instanceof Node) {
                node = (Node)adaptable;
            } else if (adaptable instanceof Resource) {
                node = (Node)((Resource)adaptable).adaptTo(Node.class);
            }
            if (node != null) {
                try {
                    if (node.isNodeType("granite:Task")) {
                        Task task = this.taskStorageProvider.read(node, true);
                        log.trace("successfully adapted a class of type [{}] to type [{}]", (Object)adaptable.getClass().getName(), (Object)type.getClass().getName());
                        return (AdapterType)task;
                    }
                    log.trace("did NOT successfully adapt a class of type [{}] to type [{}]", (Object)adaptable.getClass().getName(), (Object)type.getClass().getName());
                }
                catch (TaskManagerException e) {
                    log.error("error adapting a class of type [{" + adaptable.getClass().getName() + "}] to type [{" + type.getClass().getName() + "}]", (Throwable)e);
                }
                catch (RepositoryException e) {
                    log.warn("error adapting to Task", (Throwable)e);
                }
            }
        }
        return null;
    }

    protected void bindAdapterManager(AdapterManager adapterManager) {
        this.adapterManager = adapterManager;
    }

    protected void unbindAdapterManager(AdapterManager adapterManager) {
        if (this.adapterManager == adapterManager) {
            this.adapterManager = null;
        }
    }

    protected void bindTaskStorageProvider(TaskStorageProvider taskStorageProvider) {
        this.taskStorageProvider = taskStorageProvider;
    }

    protected void unbindTaskStorageProvider(TaskStorageProvider taskStorageProvider) {
        if (this.taskStorageProvider == taskStorageProvider) {
            this.taskStorageProvider = null;
        }
    }
}