Package org.hivedb.services

Source Code of org.hivedb.services.DataGenerationServiceImpl

package org.hivedb.services;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.shards.strategy.access.SequentialShardAccessStrategy;
import org.hibernate.shards.util.Lists;
import org.hibernate.shards.util.Maps;
import org.hivedb.Hive;
import org.hivedb.annotations.Resource;
import org.hivedb.configuration.EntityConfig;
import org.hivedb.hibernate.*;
import org.hivedb.util.PrimitiveUtils;
import org.hivedb.util.classgen.GenerateInstance;
import org.hivedb.util.classgen.GeneratePrimitiveValue;
import org.hivedb.util.classgen.ReflectionTools;
import org.hivedb.util.functional.Generator;
import org.hivedb.util.functional.Transform;
import org.hivedb.util.functional.Unary;

import javax.jws.WebService;
import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

@WebService(endpointInterface = "org.hivedb.services.DataGenerationService")
public class DataGenerationServiceImpl implements DataGenerationService {

  private ConfigurationReader config;
  private Map<Class, DataAccessObject<Object, Serializable>> daos = Maps.newHashMap();
  private Log log = LogFactory.getLog(DataGenerationServiceImpl.class);

  public DataGenerationServiceImpl(Collection<Class<?>> classes, Hive hive) {
    config = new ConfigurationReader(classes);
    List<Class<?>> hiveSessionClasses = Lists.newArrayList();
    hiveSessionClasses.addAll(new EntityResolver(config.getHiveConfiguration()).getEntityClasses());
    HiveSessionFactory factory = new HiveSessionFactoryBuilderImpl(config.getHiveConfiguration(), classes, hive, new SequentialShardAccessStrategy());
    for (Class clazz : hiveSessionClasses) {
      if (clazz.getAnnotation(Resource.class) != null) {
        daos.put(clazz, new BaseDataAccessObject(config.getEntityConfig(clazz.getName()), hive, factory));
      }
    }
  }

  /* (non-Javadoc)
    * @see org.hivedb.services.DataGenerationService#listClasses()
    */
  public Collection<String> listClasses() {
    return Transform.map(new Unary<EntityConfig, String>() {
      public String f(EntityConfig item) {
        return item.getRepresentedInterface().getName();
      }
    }, config.getConfigurations());
  }

  /* (non-Javadoc)
    * @see org.hivedb.services.DataGenerationService#generate(java.lang.String, java.lang.Integer, java.lang.Integer)
    */
  public Collection<Long> generate(String clazz, Integer partitionKeyCount, Integer instanceCount) {
    Collection<Long> ids = Lists.newArrayList();
    try {
      EntityConfig entityConfig = config.getEntityConfig(clazz);
      Generator<Object> pKeyGenerator;
      if (PrimitiveUtils.isPrimitiveClass(entityConfig.getPrimaryKeyClass()))
        pKeyGenerator = new GeneratePrimitiveValue<Object>((Class<Object>) entityConfig.getPrimaryKeyClass());
      else
        pKeyGenerator = new GenerateInstance<Object>((Class<Object>) entityConfig.getPrimaryKeyClass());
      for (int i = 0; i < partitionKeyCount; i++) {
        Object pkey = pKeyGenerator.generate();
        DataAccessObject<Object, Serializable> dao = daos.get(entityConfig.getRepresentedInterface());
        GenerateInstance<Object> instanceGenerator = new GenerateInstance<Object>((Class<Object>) entityConfig.getRepresentedInterface());
        for (int j = 0; j < instanceCount; j++) {
          Object instance = instanceGenerator.generate();
          ReflectionTools.invokeSetter(instance, entityConfig.getPrimaryIndexKeyPropertyName(), pkey);
          dao.save(instance);
          Serializable id = entityConfig.getId(instance);
          if (Number.class.isAssignableFrom(id.getClass())) {
            ids.add(Long.parseLong(id.toString()));
          } else
            throw new UnsupportedOperationException("This implementation can only generate classes with numeric ids.");
        }
      }
    } catch (RuntimeException e) {
      log.fatal(e);
      log.fatal(e.getMessage());
      throw e;
    }
    return ids;
  }
}
TOP

Related Classes of org.hivedb.services.DataGenerationServiceImpl

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.