sascha@497: package de.intevation.flys.importer; sascha@497: sascha@497: import java.util.Iterator; sascha@497: import java.util.Map; sascha@497: import java.util.HashMap; sascha@497: sascha@497: import java.math.BigDecimal; sascha@497: sascha@497: import org.hibernate.SessionFactory; sascha@497: import org.hibernate.Session; sascha@497: import org.hibernate.Query; sascha@497: sascha@497: import de.intevation.flys.backend.SessionFactoryProvider; sascha@497: sascha@497: import de.intevation.flys.model.WstColumnValue; sascha@497: import de.intevation.flys.model.WstColumn; sascha@498: import de.intevation.flys.model.DischargeTableValue; sascha@498: import de.intevation.flys.model.DischargeTable; sascha@497: sascha@497: public class ImporterSession sascha@497: { sascha@497: private static final ThreadLocal SESSION = sascha@497: new ThreadLocal() { sascha@497: @Override sascha@497: protected ImporterSession initialValue() { sascha@497: return new ImporterSession(); sascha@497: } sascha@497: }; sascha@497: sascha@497: protected Session databaseSession; sascha@497: sascha@498: protected Map wstColumnValues; sascha@498: sascha@498: protected Map dischargeTableValues; sascha@497: sascha@497: public static ImporterSession getInstance() { sascha@497: return SESSION.get(); sascha@497: } sascha@497: sascha@497: public ImporterSession() { sascha@497: SessionFactory sessionFactory = sascha@497: SessionFactoryProvider.createSessionFactory(); sascha@497: databaseSession = sessionFactory.openSession(); sascha@497: } sascha@497: sascha@497: public Session getDatabaseSession() { sascha@497: return databaseSession; sascha@497: } sascha@497: sascha@497: public WstColumnValue getWstColumnValue( sascha@497: WstColumn column, sascha@497: BigDecimal position, sascha@497: BigDecimal w sascha@497: ) { sascha@497: if (wstColumnValues == null) { sascha@497: loadWstColumnValues(); sascha@497: } sascha@497: sascha@498: IdValueKey key = new IdValueKey( sascha@497: column.getId(), sascha@497: position.doubleValue(), sascha@497: w.doubleValue()); sascha@497: sascha@497: WstColumnValue wcv = wstColumnValues.get(key); sascha@497: sascha@497: if (wcv != null) { sascha@497: return wcv; sascha@497: } sascha@497: sascha@497: wcv = new WstColumnValue(column, position, w); sascha@497: sascha@497: databaseSession.save(wcv); sascha@497: sascha@497: wstColumnValues.put(key, wcv); sascha@497: sascha@497: return wcv; sascha@497: } sascha@497: sascha@497: protected void loadWstColumnValues() { sascha@498: wstColumnValues = new HashMap(); sascha@497: sascha@497: Query query = databaseSession.createQuery("from WstColumnValue"); sascha@497: sascha@497: for (Iterator iter = query.iterate(); iter.hasNext();) { sascha@497: WstColumnValue wcv = (WstColumnValue)iter.next(); sascha@498: wstColumnValues.put(new IdValueKey(wcv), wcv); sascha@498: } sascha@498: } sascha@498: sascha@498: public DischargeTableValue getDischargeTableValue( sascha@498: DischargeTable table, sascha@498: BigDecimal q, sascha@498: BigDecimal w sascha@498: ) { sascha@498: if (dischargeTableValues == null) { sascha@498: loadDischargeTableValues(); sascha@498: } sascha@498: sascha@498: IdValueKey key = new IdValueKey( sascha@498: table.getId(), sascha@498: q.doubleValue(), sascha@498: w.doubleValue()); sascha@498: sascha@498: DischargeTableValue dtv = dischargeTableValues.get(key); sascha@498: sascha@498: if (dtv != null) { sascha@498: return dtv; sascha@498: } sascha@498: sascha@498: dtv = new DischargeTableValue(table, q, w); sascha@498: sascha@498: databaseSession.save(dtv); sascha@498: sascha@498: dischargeTableValues.put(key, dtv); sascha@498: sascha@498: return dtv; sascha@498: } sascha@498: sascha@498: protected void loadDischargeTableValues() { sascha@498: dischargeTableValues = new HashMap(); sascha@498: sascha@498: Query query = databaseSession.createQuery("from DischargeTableValue"); sascha@498: sascha@498: for (Iterator iter = query.iterate(); iter.hasNext();) { sascha@498: DischargeTableValue dtv = (DischargeTableValue)iter.next(); sascha@498: dischargeTableValues.put(new IdValueKey(dtv), dtv); sascha@497: } sascha@497: } sascha@497: } sascha@497: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :