package org.compass.core.test; import org.compass.core.CompassAnalyzerHelper; import org.compass.core.CompassException; import org.compass.core.CompassHits; import org.compass.core.CompassQuery; import org.compass.core.CompassQueryBuilder; import org.compass.core.CompassQueryFilterBuilder; import org.compass.core.CompassSession; import org.compass.core.Resource; import org.compass.core.cache.first.FirstLevelCache; import org.compass.core.config.CompassSettings; import org.compass.core.engine.SearchEngine; import org.compass.core.mapping.CompassMapping; import org.compass.core.marshall.MarshallingContext; import org.compass.core.marshall.MarshallingStrategy; import org.compass.core.metadata.CompassMetaData; import org.compass.core.spi.DirtyOperationContext; import org.compass.core.spi.InternalCompass; import org.compass.core.spi.InternalCompassSession; import org.compass.core.spi.InternalSessionDelegateClose; import at.molindo.elastic.compass.ElasticSearchEngine; public class AutoRefressingCompassSession implements InternalCompassSession { private final InternalCompassSession _wrapped; private boolean _dirty; public AutoRefressingCompassSession(CompassSession wrapped) { if (wrapped == null) { throw new NullPointerException("wrapped"); } _wrapped = (InternalCompassSession) wrapped; _dirty = true; } public void create(Object object) { _wrapped.create(object); _dirty = true; } public void setReadOnly() { _wrapped.setReadOnly(); } public void evictAll() { _wrapped.evictAll(); } public void flush() { _wrapped.flush(); refreshIfDirty(); } public void create(String alias, Object obj) { _wrapped.create(alias, obj); _dirty = true; } public void delete(Resource resource) { _wrapped.delete(resource); _dirty = true; } public void delete(Object obj) { _wrapped.delete(obj); _dirty = true; } public void delete(Class<?> clazz, Object obj) { _wrapped.delete(clazz, obj); _dirty = true; } public void delete(String alias, Object obj) { _wrapped.delete(alias, obj); _dirty = true; } public void save(Object obj) { _wrapped.save(obj); _dirty = true; } public void save(String alias, Object obj) { _wrapped.save(alias, obj); _dirty = true; } public void evict(Object obj) { _wrapped.evict(obj); } public void evict(String alias, Object id) { _wrapped.evict(alias, id); } public CompassQueryBuilder queryBuilder() throws CompassException { refreshIfDirty(); return _wrapped.queryBuilder(); } public CompassQueryFilterBuilder queryFilterBuilder() throws CompassException { refreshIfDirty(); return _wrapped.queryFilterBuilder(); } public CompassAnalyzerHelper analyzerHelper() throws CompassException { refreshIfDirty(); return _wrapped.analyzerHelper(); } public CompassSettings getSettings() { return _wrapped.getSettings(); } public Object get(String alias, Object id) throws CompassException { refreshIfDirty(); return _wrapped.get(alias, id); } public <T> T get(Class<T> clazz, Object id) throws CompassException { refreshIfDirty(); return _wrapped.get(clazz, id); } public Object get(String alias, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.get(alias, ids); } public <T> T load(Class<T> clazz, Object id) throws CompassException { refreshIfDirty(); return _wrapped.load(clazz, id); } public Object load(String alias, Object id) { refreshIfDirty(); return _wrapped.load(alias, id); } public Resource getResource(Class<?> clazz, Object id) { refreshIfDirty(); return _wrapped.getResource(clazz, id); } public Resource getResource(String alias, Object id) { refreshIfDirty(); return _wrapped.getResource(alias, id); } public Resource loadResource(Class<?> clazz, Object id) { refreshIfDirty(); return _wrapped.loadResource(clazz, id); } public Resource loadResource(String alias, Object id) { refreshIfDirty(); return _wrapped.loadResource(alias, id); } public CompassHits find(String query) { refreshIfDirty(); return _wrapped.find(query); } public void close() { _wrapped.close(); } public void delete(String alias, Object... ids) throws CompassException { _wrapped.delete(alias, ids); _dirty = true; } public void delete(Class<?> clazz, Object... ids) throws CompassException { _wrapped.delete(clazz, ids); _dirty = true; } public void delete(CompassQuery query) throws CompassException { _wrapped.delete(query); _dirty = true; } public Resource getResource(Class<?> clazz, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.getResource(clazz, ids); } public boolean isClosed() { return _wrapped.isClosed(); } public Resource getResource(String alias, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.getResource(alias, ids); } public Resource loadResource(Class<?> clazz, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.loadResource(clazz, ids); } public Resource loadResource(String alias, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.loadResource(alias, ids); } public <T> T get(Class<T> clazz, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.get(clazz, ids); } public <T> T load(Class<T> clazz, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.load(clazz, ids); } public Object load(String alias, Object... ids) throws CompassException { refreshIfDirty(); return _wrapped.load(alias, ids); } public void evict(Resource resource) { _wrapped.evict(resource); } public final void beginTransaction() { bindSession(); } public void bindSession() { _wrapped.bindSession(); } // InternalCompassSession public InternalCompass getCompass() { return _wrapped.getCompass(); } public FirstLevelCache getFirstLevelCache() { return _wrapped.getFirstLevelCache(); } public CompassMapping getMapping() { return _wrapped.getMapping(); } public CompassMetaData getMetaData() { return _wrapped.getMetaData(); } public SearchEngine getSearchEngine() { return _wrapped.getSearchEngine(); } public MarshallingStrategy getMarshallingStrategy() { return _wrapped.getMarshallingStrategy(); } public boolean isReadOnly() { return _wrapped.isReadOnly(); } public void delete(Object value, DirtyOperationContext context) { _wrapped.delete(value, context); _dirty = true; } public void create(Object value, DirtyOperationContext context) { _wrapped.create(value, context); _dirty = true; } public void save(Object value, DirtyOperationContext context) { _wrapped.save(value, context); _dirty = true; } public Object getByResource(Resource resource) throws CompassException { refreshIfDirty(); return _wrapped.getByResource(resource); } public void addDelegateClose(InternalSessionDelegateClose delegateClose) { _wrapped.addDelegateClose(delegateClose); } public Resource getResourceByIdResource(Resource idResource) throws CompassException { refreshIfDirty(); return _wrapped.getResourceByIdResource(idResource); } public Resource getResourceByIdResourceNoCache(Resource idResource) throws CompassException { refreshIfDirty(); return _wrapped.getResourceByIdResourceNoCache(idResource); } public Object get(String alias, Object id, MarshallingContext context) throws CompassException { refreshIfDirty(); return _wrapped.get(alias, id, context); } // refreshing void refreshIfDirty() { if (_dirty) { refresh(); } } void refresh() { ((ElasticSearchEngine) _wrapped.getSearchEngine()).refresh(); _dirty = false; } }