package org.om.core.impl.session; import org.om.core.api.exception.ObjectMapperException; import org.om.core.api.mapping.EntityMapping; import org.om.core.api.mapping.registry.MappingRegistry; import org.om.core.api.persistence.PersistenceAdapter; import org.om.core.api.persistence.PersistenceAdapterFactory; import org.om.core.api.persistence.PersistenceContext; import org.om.core.api.persistence.proxy.ProxyFactory; import org.om.core.api.session.Session; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @author Jakob Külzer * @author tom */ public class ImmutableSessionImpl implements Session { private static final Logger LOGGER = LoggerFactory.getLogger(ImmutableSessionImpl.class); private final MappingRegistry mappingRegistry; private final PersistenceContext persistenceContext; private final PersistenceAdapterFactory persistenceDelegateFactory; private final ProxyFactory proxyFactory; public ImmutableSessionImpl(PersistenceContext persistenceContext, PersistenceAdapterFactory persistenceDelegateFactory, MappingRegistry mappingRegistry, ProxyFactory proxyFactory) { this.persistenceContext = persistenceContext; this.persistenceDelegateFactory = persistenceDelegateFactory; this.mappingRegistry = mappingRegistry; this.proxyFactory = proxyFactory; LOGGER.debug("New session with context {}", persistenceContext); } public void close() throws ObjectMapperException { throw new ObjectMapperException("not implemented"); } public void commit() { // TODO Auto-generated method stub } public void delete(Object o) throws ObjectMapperException { throw new ObjectMapperException("not implemented"); } @SuppressWarnings("unchecked") public <T> T get(Class<T> clazz, Object id) throws ObjectMapperException { if (clazz == null) { throw new NullPointerException("Class is null."); } final EntityMapping entityMapping = mappingRegistry.getMapping(clazz); final PersistenceAdapter persistenceAdapter = persistenceDelegateFactory.create(id, entityMapping, persistenceContext); LOGGER.debug("Retrieving entity of type {} from {}", clazz, id); return (T) proxyFactory.create(this, entityMapping, persistenceAdapter); } public void save(Object o) throws ObjectMapperException { try { /* * get the entity mapping */ final EntityMapping entityMapping = mappingRegistry.getMapping(o.getClass()); /* * get the id */ // Object id = EntityUtils.getEntityId(entityMapping, o); /* * get a persistence delegate */ // final PersistenceAdapter persistenceAdapter = // persistenceDelegateFactory.create(this, id, entityMapping, // persistenceContext, true); /* * walk the fields and save them */ // Iterator<Mapping> iter = // entityMapping.getItemMappings().getAll().iterator(); // while (iter.hasNext()) { // /* // * get property // */ // PropertyMapping propertyMapping = (PropertyMapping) iter.next(); // /* // * save it // */ // persistenceAdapter.setProperty(propertyMapping, // EntityUtils.getEntityPropertyValue(propertyMapping, o)); // } throw new UnsupportedOperationException("Implement me."); } catch (Exception e) { throw new ObjectMapperException("Exception in save", e); } } }