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

com.gemstone.gemfire.internal.StatisticsTypeFactoryImpl Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (c) 2010-2015 Pivotal Software, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you
 * may not use this file except in compliance with the License. You
 * may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 * implied. See the License for the specific language governing
 * permissions and limitations under the License. See accompanying
 * LICENSE file.
 */
package com.gemstone.gemfire.internal;

import com.gemstone.gemfire.*;
import com.gemstone.gemfire.internal.i18n.LocalizedStrings;

import java.io.*;
import java.util.*;

/**
 * The implementation of {@link StatisticsTypeFactory}.
 * Each VM can any have a single instance of this class which can
 * be accessed by calling {@link #singleton()}.
 *
 * @see Package introduction
 *
 * @author Darrel Schneider
 *
 * @since 3.0
 *
 */
public class StatisticsTypeFactoryImpl implements StatisticsTypeFactory {
  // static fields
  private final static StatisticsTypeFactoryImpl singleton = new StatisticsTypeFactoryImpl();

  // static methods
  /**
   * Returns the single instance of this class.
   */
  public final static StatisticsTypeFactory singleton() {
    return singleton;
  }
  
  protected final static void clear() {
    singleton.statTypes.clear();
  }

  // constructors
  private StatisticsTypeFactoryImpl() {
  }
  
  // instance fields
  private final HashMap statTypes = new HashMap();

  // instance methods
  /**
   * Adds an already created type. If the type has already been
   * added and is equal to the new one then the new one is dropped and the existing one returned.
   * @throws IllegalArgumentException if the type already exists and is not equal to the new type
   */
  public StatisticsType addType(StatisticsType t) {
    StatisticsType result = t;
    synchronized (this.statTypes) {
      StatisticsType currentValue = findType(result.getName());
      if (currentValue == null) {
        this.statTypes.put(result.getName(), result);
      } else if (result.equals(currentValue)) {
        result = currentValue;
      } else {
        throw new IllegalArgumentException(LocalizedStrings.StatisticsTypeFactoryImpl_STATISTICS_TYPE_NAMED_0_ALREADY_EXISTS.toLocalizedString(result.getName()));
      }
    }
    return result;
  }
  public StatisticsType createType(String name, String description,
                                   StatisticDescriptor[] stats) {
    return addType(new StatisticsTypeImpl(name, description, stats));
  }
  public StatisticsType findType(String name) {
    return (StatisticsType)this.statTypes.get(name);
  }
  public StatisticsType[] createTypesFromXml(Reader reader)
    throws IOException {
    return StatisticsTypeImpl.fromXml(reader, this);
  }

  public StatisticDescriptor createIntCounter(String name, String description,
                                              String units) {
    return StatisticDescriptorImpl.createIntCounter(name, description, units, true);
  }
  public StatisticDescriptor createLongCounter(String name, String description,
                                               String units) {
    return StatisticDescriptorImpl.createLongCounter(name, description, units, true);
  }
  public StatisticDescriptor createDoubleCounter(String name, String description,
                                                 String units) {
    return StatisticDescriptorImpl.createDoubleCounter(name, description, units, true);
  }
  public StatisticDescriptor createIntGauge(String name, String description,
                                            String units) {
    return StatisticDescriptorImpl.createIntGauge(name, description, units, false);
  }
  public StatisticDescriptor createLongGauge(String name, String description,
                                             String units) {
    return StatisticDescriptorImpl.createLongGauge(name, description, units, false);
  }
  public StatisticDescriptor createDoubleGauge(String name, String description,
                                               String units) {
    return StatisticDescriptorImpl.createDoubleGauge(name, description, units, false);
  }

  public StatisticDescriptor createIntCounter(String name, String description,
                                              String units, boolean largerBetter) {
    return StatisticDescriptorImpl.createIntCounter(name, description, units, largerBetter);
  }
  public StatisticDescriptor createLongCounter(String name, String description,
                                               String units, boolean largerBetter) {
    return StatisticDescriptorImpl.createLongCounter(name, description, units, largerBetter);
  }
  public StatisticDescriptor createDoubleCounter(String name, String description,
                                                 String units, boolean largerBetter) {
    return StatisticDescriptorImpl.createDoubleCounter(name, description, units, largerBetter);
  }
  public StatisticDescriptor createIntGauge(String name, String description,
                                            String units, boolean largerBetter) {
    return StatisticDescriptorImpl.createIntGauge(name, description, units, largerBetter);
  }
  public StatisticDescriptor createLongGauge(String name, String description,
                                             String units, boolean largerBetter) {
    return StatisticDescriptorImpl.createLongGauge(name, description, units, largerBetter);
  }
  public StatisticDescriptor createDoubleGauge(String name, String description,
                                               String units, boolean largerBetter) {
    return StatisticDescriptorImpl.createDoubleGauge(name, description, units, largerBetter);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy