Package ch.uzh.ifi.ddis.ifp.esper.cassandra

Source Code of ch.uzh.ifi.ddis.ifp.esper.cassandra.DatatypeRegistry

package ch.uzh.ifi.ddis.ifp.esper.cassandra;

/*
* #%L
* Cassandra for Esper
* %%
* Copyright (C) 2013 University of Zurich
* %%
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 2 of the
* License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program.  If not, see
* <http://www.gnu.org/licenses/gpl-2.0.html>.
* #L%
*/

import java.net.URI;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.datastax.driver.core.DataType;

/**
* Maps java classes to Cassandra datatypes.
*
* @author Thomas Scharrenbach
* @version 0.2.4
* @since 0.2.4
*
*/
public class DatatypeRegistry {

  private static final Logger _log = LoggerFactory
      .getLogger(DatatypeRegistry.class);

  private static final Map<Class<?>, DataType> _defaultRegistryPrivate = new HashMap<Class<?>, DataType>();

  static {
    _defaultRegistryPrivate.put(String.class, DataType.varchar());
    _defaultRegistryPrivate.put(Long.class, DataType.bigint());
    _defaultRegistryPrivate.put(byte[].class, DataType.blob());
    _defaultRegistryPrivate.put(Boolean.class, DataType.cboolean());
    _defaultRegistryPrivate.put(Double.class, DataType.cdouble());
    _defaultRegistryPrivate.put(Float.class, DataType.cfloat());
    _defaultRegistryPrivate.put(Integer.class, DataType.cint());
    _defaultRegistryPrivate.put(URI.class, DataType.inet());
    _defaultRegistryPrivate.put(Date.class, DataType.timestamp());
    _defaultRegistryPrivate.put(UUID.class, DataType.uuid());
  }

  public static final Map<Class<?>, DataType> DEFAULTREGISTRY = Collections
      .unmodifiableMap(_defaultRegistryPrivate);

  private static final DatatypeRegistry _defaultInstance = new DatatypeRegistry(
      DEFAULTREGISTRY);

  /**
   *
   * @return singleton instance with unmodifiable default values.
   */
  public static final DatatypeRegistry defaultRegistry() {
    return _defaultInstance;
  }

  /**
   *
   * @return new instance with changeable default values.
   */
  public static final DatatypeRegistry newInstance() {
    return new DatatypeRegistry(new HashMap<Class<?>, DataType>(
        _defaultRegistryPrivate));
  }

  //
  //
  //

  private final Map<Class<?>, DataType> _registry;

  private DatatypeRegistry(Map<Class<?>, DataType> registry) {
    _registry = registry;
  }

  public void addDataTypeMap(Class<?> clazz, DataType datatype) {
    if (_registry.containsKey(clazz)) {
      _log.warn("Overwriting exisiting datatype mapping!");
    }
    _registry.put(clazz, datatype);
  }

  public void removeDatatTypeMap(Class<?> clazz) {
    if (_registry.containsKey(clazz)) {
      DataType datatype = _registry.get(clazz);
      _log.info("Removing datatype map {} to {}", clazz, datatype);
      _registry.remove(clazz);
    } else {
      _log.warn("Trying to remove non-existing mapping for class {} !",
          clazz);
    }
  }

  public DataType get(Class<?> clazz) {
    return _registry.get(clazz);
  }

  public boolean contains(Class<?> clazz) {
    return _registry.containsKey(clazz);
  }

  /**
   *
   * @return copy of registry.
   */
  public Map<Class<?>, DataType> getRegistry() {
    return new HashMap<Class<?>, DataType>(_registry);
  }

}
TOP

Related Classes of ch.uzh.ifi.ddis.ifp.esper.cassandra.DatatypeRegistry

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.