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

com.tangosol.internal.net.management.TabularDataCollector Maven / Gradle / Ivy

There is a newer version: 24.09
Show newest version
/*
 * Copyright (c) 2000, 2020, Oracle and/or its affiliates.
 *
 * Licensed under the Universal Permissive License v 1.0 as shown at
 * http://oss.oracle.com/licenses/upl.
 */
package com.tangosol.internal.net.management;

import com.tangosol.net.CacheFactory;

import java.util.Map;

import java.util.function.BiConsumer;

import java.util.stream.Collector;

import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeType;
import javax.management.openmbean.SimpleType;
import javax.management.openmbean.TabularData;

/**
 * A {@link Collector} that understands how to interrogate {@link TabularData}
 * types.
 *
 * @author sr  11.3.17
 * @since 12.2.1.4.0
 */
public class TabularDataCollector>
        extends AbstractMultiCollector
    {
    // ----- Collector interface --------------------------------------------

    @Override
    public BiConsumer accumulator()
        {
        return (map, tabularData) ->
            {
            CompositeType rowType = tabularData.getTabularType().getRowType();

            // for composite types in MBeans, each row will have a key attribute and will be a simple type
            if (rowType.containsKey(KEY) &&
                    rowType.containsKey(VALUE) &&
                    rowType.getType(KEY) instanceof SimpleType)
                {

                for (Object objValue : tabularData.values())
                    {
                    String sKey   = ((CompositeData) objValue).get(KEY).toString();
                    Object oValue = ((CompositeData) objValue).get(VALUE);

                    Collector collector = (Collector) f_mapCollector.get(sKey);

                    if (collector == null)
                        {
                        collector = MBeanCollectorFunction.createTypeBasedCollector(oValue);
                        f_mapCollector.put(sKey, collector);
                        map.put(sKey, collector.supplier().get());
                        }

                    collector.accumulator().accept(map.get(sKey), oValue);
                    }
                }
            };
        }

    // ----- constants ------------------------------------------------------

    /**
     * The key of a CompositeType.
     */
    protected static String KEY = "key";

    /**
     * The value of a CompositeType.
     */
    protected static String VALUE = "value";
    }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy