com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.portal.kernel.trash.TrashHandlerRegistryUtil.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.portal.kernel.trash;

import com.liferay.portal.kernel.util.ListUtil;
import com.liferay.registry.Registry;
import com.liferay.registry.RegistryUtil;
import com.liferay.registry.ServiceReference;
import com.liferay.registry.ServiceRegistration;
import com.liferay.registry.ServiceTracker;
import com.liferay.registry.ServiceTrackerCustomizer;
import com.liferay.registry.collections.ServiceRegistrationMap;
import com.liferay.registry.collections.ServiceRegistrationMapImpl;

import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentSkipListMap;

/**
 * @author Alexander Chow
 */
public class TrashHandlerRegistryUtil {

    public static TrashHandler getTrashHandler(String className) {
        return _trashHandlerRegistryUtil._getTrashHandler(className);
    }

    public static List<TrashHandler> getTrashHandlers() {
        return _trashHandlerRegistryUtil._getTrashHandlers();
    }

    public static void register(List<TrashHandler> trashHandlers) {
        for (TrashHandler trashHandler : trashHandlers) {
            register(trashHandler);
        }
    }

    public static void register(TrashHandler trashHandler) {
        _trashHandlerRegistryUtil._register(trashHandler);
    }

    public static void unregister(List<TrashHandler> trashHandlers) {
        for (TrashHandler trashHandler : trashHandlers) {
            unregister(trashHandler);
        }
    }

    public static void unregister(TrashHandler trashHandler) {
        _trashHandlerRegistryUtil._unregister(trashHandler);
    }

    private TrashHandlerRegistryUtil() {
        Registry registry = RegistryUtil.getRegistry();

        _serviceTracker = registry.trackServices(TrashHandler.class, new TrashHandlerServiceTrackerCustomizer());

        _serviceTracker.open();
    }

    private TrashHandler _getTrashHandler(String className) {
        return _trashHandlers.get(className);
    }

    private List<TrashHandler> _getTrashHandlers() {
        return ListUtil.fromMapValues(_trashHandlers);
    }

    private void _register(TrashHandler trashHandler) {
        Registry registry = RegistryUtil.getRegistry();

        ServiceRegistration<TrashHandler> serviceRegistration = registry.registerService(TrashHandler.class,
                trashHandler);

        _serviceRegistrations.put(trashHandler, serviceRegistration);
    }

    private void _unregister(TrashHandler trashHandler) {
        ServiceRegistration<TrashHandler> serviceRegistration = _serviceRegistrations.remove(trashHandler);

        if (serviceRegistration != null) {
            serviceRegistration.unregister();
        }
    }

    private static final TrashHandlerRegistryUtil _trashHandlerRegistryUtil = new TrashHandlerRegistryUtil();

    private final ServiceRegistrationMap<TrashHandler> _serviceRegistrations = new ServiceRegistrationMapImpl<>();
    private final ServiceTracker<TrashHandler, TrashHandler> _serviceTracker;
    private final Map<String, TrashHandler> _trashHandlers = new ConcurrentSkipListMap<>();

    private class TrashHandlerServiceTrackerCustomizer
            implements ServiceTrackerCustomizer<TrashHandler, TrashHandler> {

        @Override
        public TrashHandler addingService(ServiceReference<TrashHandler> serviceReference) {

            Registry registry = RegistryUtil.getRegistry();

            TrashHandler trashHandler = registry.getService(serviceReference);

            _trashHandlers.put(trashHandler.getClassName(), trashHandler);

            return trashHandler;
        }

        @Override
        public void modifiedService(ServiceReference<TrashHandler> serviceReference, TrashHandler trashHandler) {
        }

        @Override
        public void removedService(ServiceReference<TrashHandler> serviceReference, TrashHandler trashHandler) {

            Registry registry = RegistryUtil.getRegistry();

            registry.ungetService(serviceReference);

            _trashHandlers.remove(trashHandler.getClassName());
        }

    }

}