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

me.prettyprint.hom.cache.IdClassParserValidator Maven / Gradle / Ivy

There is a newer version: 3.0-04
Show newest version
package me.prettyprint.hom.cache;

import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.util.Map;

import javax.persistence.IdClass;
import javax.persistence.Table;

import me.prettyprint.hom.CFMappingDef;
import me.prettyprint.hom.ClassCacheMgr;

public class IdClassParserValidator implements ParserValidator {

  @Override
  public  void parse(ClassCacheMgr cacheMgr, Annotation anno, CFMappingDef cfMapDef) {
    if (anno instanceof IdClass) {
      parseIdClassAnnotation(cacheMgr, (IdClass) anno, cfMapDef);
    } else {
      throw new HectorObjectMapperException("This class cannot parse annotation "
          + anno.getClass().getSimpleName());
    }
  }

  @Override
  public  void validateAndSetDefaults(ClassCacheMgr cacheMgr, CFMappingDef cfMapDef) {
    // nothing to do
  }

  private  void parseIdClassAnnotation(ClassCacheMgr cacheMgr, IdClass anno,
      CFMappingDef cfMapDef) {
    Class pkClazz = anno.value();

    verifyClassConformsToJpaSpec(pkClazz);
    Map pdMap;
    try {
      pdMap = cacheMgr.getFieldPropertyDescriptorMap(pkClazz);
    } catch (IntrospectionException e) {
      throw new HectorObjectMapperException("exception while introspecting class, "
          + pkClazz.getName(), e);
    }
  }

  private void verifyClassConformsToJpaSpec(Class pkClazz) {
    // TODO:BTB double check the JPA spec, section 2.4

    if (!(Serializable.class.isAssignableFrom(pkClazz))) {
      throw new HectorObjectMapperException("JPA requires that primary key class, "
          + pkClazz.getName() + ", must be Serializable");
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy