All Downloads are FREE. Search and download functionalities are using the official Maven repository.

net.java.truelicense.swing.ObservableLicenseConsumerManager Maven / Gradle / Ivy

/*
 * Copyright (C) 2005-2013 Schlichtherle IT Services.
 * All rights reserved. Use is subject to license terms.
 */
package net.java.truelicense.swing;

import java.util.*;
import net.java.truelicense.core.*;
import net.java.truelicense.core.io.Source;
import net.java.truelicense.core.util.Objects;

/**
 * An observable license consumer manager for use in single threaded (GUI)
 * contexts.
 * Mind you this class is not thread-safe.
 *
 * @author Christian Schlichtherle
 */
public final class ObservableLicenseConsumerManager
implements LicenseConsumerManager {

    private final LicenseConsumerManager delegate;
    private final List
            listeners = new ArrayList();
    private final LicenseConsumerManagerEvent event;

    /**
     * Constructs a new observable license consumer manager.
     *
     * @param delegate the delegate license consumer manager.
     */
    public ObservableLicenseConsumerManager(
            final LicenseConsumerManager delegate) {
        this.delegate = Objects.requireNonNull(delegate);
        this.event = new LicenseConsumerManagerEvent(this);
    }

    /**
     * Returns the delegate license consumer manager which was provided to the
     * constructor.
     */
    public LicenseConsumerManager delegate() { return delegate; }

    @Override public String subject() { return delegate().subject(); }

    @Override public LicenseParameters parameters() {
        return delegate().parameters();
    }

    @Override public LicenseConsumerContext context() {
        return delegate().context();
    }

    @Override
    public License install(Source source) throws LicenseManagementException {
        final License license = delegate().install(source);
        final List list;
        //synchronized (listeners) {
            list = new ArrayList(listeners);
        //}
        for (final LicenseConsumerManagerListener l : list) l.installed(event);
        return license;
    }

    @Override public License view() throws LicenseManagementException {
        final License license = delegate().view();
        final List list;
        //synchronized (listeners) {
            list = new ArrayList(listeners);
        //}
        for (final LicenseConsumerManagerListener l : list) l.viewed(event);
        return license;
    }

    @Override public void verify() throws LicenseManagementException {
        delegate().verify();
        final List list;
        //synchronized (listeners) {
            list = new ArrayList(listeners);
        //}
        for (final LicenseConsumerManagerListener l : list) l.verified(event);
    }

    @Override public void uninstall() throws LicenseManagementException {
        delegate().uninstall();
        final List list;
        //synchronized (listeners) {
            list = new ArrayList(listeners);
        //}
        for (final LicenseConsumerManagerListener l : list) l.uninstalled(event);
    }

    /**
     * Adds the given license consumer manager listener.
     * It is safe to call this method from a listener implementation.
     * The implementation uses a list, so adding the same listener multiple
     * times will result in multiple notifications for each event.
     *
     * @param cml the license consumer manager listener to add.
     */
    public void addLicenseConsumerManagerListener(
            LicenseConsumerManagerListener cml) {
        //synchronized (listeners) {
            listeners.add(cml);
        //}
    }

    /**
     * Removes the given license consumer manager listener.
     * It is safe to call this method from a listener implementation.
     * Removing an listener which is not registered has no effect.
     *
     * @param cml the license consumer manager listener to remove.
     */
    public void removeLicenseConsumerManagerListener(
            LicenseConsumerManagerListener cml) {
        //synchronized (listeners) {
            listeners.remove(cml);
        //}
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy