RepositoryBlocker.java 2.49 KB
/*
 * Decompiled with CFR 0_118.
 * 
 * Could not load the following classes:
 *  org.apache.felix.scr.annotations.Activate
 *  org.apache.felix.scr.annotations.Component
 *  org.apache.felix.scr.annotations.Reference
 *  org.apache.felix.scr.annotations.ReferenceCardinality
 *  org.apache.felix.scr.annotations.ReferencePolicy
 *  org.apache.sling.installer.api.tasks.ResourceTransformer
 *  org.apache.sling.launchpad.api.StartupHandler
 */
package com.adobe.granite.installer.factory.packages.impl;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.apache.felix.scr.annotations.ReferencePolicy;
import org.apache.sling.installer.api.tasks.ResourceTransformer;
import org.apache.sling.launchpad.api.StartupHandler;

@Component
@Reference(name="transformer", referenceInterface=ResourceTransformer.class, target="(waitforme=true)", cardinality=ReferenceCardinality.OPTIONAL_UNARY, policy=ReferencePolicy.DYNAMIC)
public class RepositoryBlocker {
    @Reference
    private volatile StartupHandler handler;
    private volatile boolean checked = false;
    private volatile boolean initialized = false;
    private final Object lock = new Object();

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    @Activate
    protected void activate() {
        Object object = this.lock;
        synchronized (object) {
            if (!this.checked && !this.initialized) {
                this.initialized = true;
                this.handler.waitWithStartup(true);
            }
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    protected void bindTransformer(ResourceTransformer rt) {
        Object object = this.lock;
        synchronized (object) {
            if (!this.checked) {
                if (this.initialized) {
                    this.handler.waitWithStartup(false);
                } else {
                    this.initialized = true;
                }
                this.checked = true;
            }
        }
    }

    protected void unbindTransformer(ResourceTransformer rt) {
    }

    protected void bindHandler(StartupHandler startupHandler) {
        this.handler = startupHandler;
    }

    protected void unbindHandler(StartupHandler startupHandler) {
        if (this.handler == startupHandler) {
            this.handler = null;
        }
    }
}