view flys-backend/src/main/java/de/intevation/flys/importer/ImportWstColumnValue.java @ 478:db430bd9e0e0

Implemented a WstColumnValue cache to speed up inserting WST files into database. flys-backend/trunk@1734 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Wed, 20 Apr 2011 07:21:03 +0000
parents 29a408f80a89
children 67fd63e4ef66
line wrap: on
line source
package de.intevation.flys.importer;

import de.intevation.flys.model.WstColumnValue;
import de.intevation.flys.model.WstColumn;
import de.intevation.flys.model.River;

import java.math.BigDecimal;

import org.apache.log4j.Logger;

import org.hibernate.Session;

import java.util.Map;


public class ImportWstColumnValue
{
    protected Logger logger = Logger.getLogger(ImportWstColumnValue.class);

    protected BigDecimal      position;
    protected BigDecimal      w;
    protected ImportWstColumn wstColumn;

    protected Map<WstColumnValueKey, WstColumnValue> cache;

    protected WstColumnValue  peer;

    public ImportWstColumnValue() {
    }

    public ImportWstColumnValue(
        ImportWstColumn wstColumn,
        BigDecimal      position,
        BigDecimal      w,
        Map<WstColumnValueKey, WstColumnValue> cache
    ) {
        this.wstColumn = wstColumn;
        this.position  = position;
        this.w         = w;
        this.cache     = cache;
    }

    public BigDecimal getPosition() {
        return position;
    }

    public void setPosition(BigDecimal position) {
        this.position = position;
    }

    public BigDecimal getW() {
        return w;
    }

    public void setW(BigDecimal w) {
        this.w = w;
    }

    public ImportWstColumn getWstColumn() {
        return wstColumn;
    }

    public void setWstColumn(ImportWstColumn wstColumn) {
        this.wstColumn = wstColumn;
    }

    public WstColumnValue getPeer(River river) {
        if (peer == null) {
            WstColumn c = wstColumn.getPeer(river);

            // check the cache before we fire a db query
            WstColumnValue value = cache.get(new WstColumnValueKey(
                c.getId(),
                position.doubleValue(),
                w.doubleValue()));

            if (value != null) {
                peer = value;
                return peer;
            }

            Session session = Importer.sessionHolder.get();
            peer = new WstColumnValue(c, position, w);
            session.save(peer);

            cache.put(new WstColumnValueKey(peer), peer);
        }

        return peer;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org