Mercurial > dive4elements > river
view flys-backend/src/main/java/de/intevation/flys/importer/ImporterSession.java @ 497:67fd63e4ef66
Importer: centralized caching
flys-backend/trunk@1851 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Sun, 08 May 2011 15:29:45 +0000 |
parents | |
children | 8ab04de0b879 |
line wrap: on
line source
package de.intevation.flys.importer; import java.util.Iterator; import java.util.Map; import java.util.HashMap; import java.math.BigDecimal; import org.hibernate.SessionFactory; import org.hibernate.Session; import org.hibernate.Query; import de.intevation.flys.backend.SessionFactoryProvider; import de.intevation.flys.model.WstColumnValue; import de.intevation.flys.model.WstColumn; public class ImporterSession { private static final ThreadLocal<ImporterSession> SESSION = new ThreadLocal<ImporterSession>() { @Override protected ImporterSession initialValue() { return new ImporterSession(); } }; protected Session databaseSession; protected Map<WstColumnValueKey, WstColumnValue> wstColumnValues; public static ImporterSession getInstance() { return SESSION.get(); } public ImporterSession() { SessionFactory sessionFactory = SessionFactoryProvider.createSessionFactory(); databaseSession = sessionFactory.openSession(); } public Session getDatabaseSession() { return databaseSession; } public WstColumnValue getWstColumnValue( WstColumn column, BigDecimal position, BigDecimal w ) { if (wstColumnValues == null) { loadWstColumnValues(); } WstColumnValueKey key = new WstColumnValueKey( column.getId(), position.doubleValue(), w.doubleValue()); WstColumnValue wcv = wstColumnValues.get(key); if (wcv != null) { return wcv; } wcv = new WstColumnValue(column, position, w); databaseSession.save(wcv); wstColumnValues.put(key, wcv); return wcv; } protected void loadWstColumnValues() { wstColumnValues = new HashMap<WstColumnValueKey, WstColumnValue>(); Query query = databaseSession.createQuery("from WstColumnValue"); for (Iterator iter = query.iterate(); iter.hasNext();) { WstColumnValue wcv = (WstColumnValue)iter.next(); wstColumnValues.put(new WstColumnValueKey(wcv), wcv); } } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :