package com.alvazan.orm.layer0.base; import javax.inject.Inject; import com.alvazan.orm.api.base.MetaLayer; import com.alvazan.orm.api.z8spi.meta.DboColumnIdMeta; import com.alvazan.orm.impl.meta.data.MetaClass; import com.alvazan.orm.impl.meta.data.MetaInfo; @SuppressWarnings("rawtypes") public class MetaLayerImpl implements MetaLayer { @Inject private MetaInfo metaInfo; @SuppressWarnings({ "unchecked" }) @Override public Object getKey(Object entity) { MetaClass metaClass = getMetaClass(entity.getClass()); return metaClass.fetchId(entity); } private MetaClass getMetaClass(Class type) { MetaClass meta = metaInfo.getMetaClass(type); if(meta == null) throw new IllegalArgumentException("Meta information not found on class="+type.getSimpleName()); return meta; } @Override public boolean isManagedEntity(Class<?> type) { MetaClass metaClass = metaInfo.getMetaClass(type); return metaClass != null; } @Override public String getKeyFieldName(Class<?> type) { MetaClass meta = getMetaClass(type); return meta.getIdField().getFieldName(); } @Override public Object convertIdFromString(Class<?> entityType, String idAsString) { MetaClass meta = getMetaClass(entityType); DboColumnIdMeta idMeta = meta.getIdField().getMetaIdDbo(); return idMeta.convertStringToType(idAsString); } }