package com.buschmais.xo.impl;
import java.util.Set;
import com.buschmais.xo.api.XOException;
import com.buschmais.xo.impl.proxy.ProxyMethodService;
import com.buschmais.xo.impl.proxy.entity.EntityProxyMethodService;
import com.buschmais.xo.spi.datastore.TypeMetadataSet;
public class EntityInstanceManager<EntityId, Entity, EntityDiscriminator> extends AbstractInstanceManager<EntityId, Entity> {
private final SessionContext<EntityId, Entity, ?, EntityDiscriminator, ?, ?, ?, ?, ?> sessionContext;
private final ProxyMethodService<Entity> proxyMethodService;
public EntityInstanceManager(SessionContext<EntityId, Entity, ?, EntityDiscriminator, ?, ?, ?, ?, ?> sessionContext) {
super(sessionContext.getEntityCache(), sessionContext.getInstanceListenerService(), sessionContext.getProxyFactory());
this.sessionContext = sessionContext;
this.proxyMethodService = new EntityProxyMethodService<>(sessionContext);
}
@Override
public boolean isDatastoreType(Object o) {
return sessionContext.getDatastoreSession().getDatastoreEntityManager().isEntity(o);
}
@Override
public EntityId getDatastoreId(Entity entity) {
if (entity == null) {
throw new XOException("No entity provided.");
}
return sessionContext.getDatastoreSession().getDatastoreEntityManager().getEntityId(entity);
}
@Override
protected TypeMetadataSet<?> getTypes(Entity entity) {
Set<EntityDiscriminator> discriminators = sessionContext.getDatastoreSession().getDatastoreEntityManager().getEntityDiscriminators(entity);
return sessionContext.getMetadataProvider().getTypes(discriminators);
}
@Override
protected ProxyMethodService<Entity> getProxyMethodService() {
return proxyMethodService;
}
}