Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/CrossSectionFactory.java @ 4708:45d05402b2a6
Importer: Emit log message when a dry run was run.
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Wed, 19 Dec 2012 11:40:19 +0100 |
parents | b2ea89a665bc |
children |
line wrap: on
line source
package de.intevation.flys.artifacts.model; import java.util.List; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import de.intevation.flys.backend.SessionHolder; import de.intevation.flys.model.CrossSection; import de.intevation.flys.model.River; import de.intevation.flys.artifacts.cache.CacheFactory; import org.hibernate.Session; import org.hibernate.Query; /** * Get Cross Sections. */ public class CrossSectionFactory { protected final static String CACHE_NAME = "cross_sections"; // TODO use caching consistently, streamline acces. /** * Get CrossSections for an instantiated River. * * @param river river object. * * @return List of Cross Sections of river. */ public static List<CrossSection> getCrossSections(River river) { return getCrossSections(river.getName()); } /** * Get Cross Sections for a river by name. * * @param riverName name of the river of interest. * * @return List of Cross Sections of river. */ public static List<CrossSection> getCrossSections(String riverName) { Session session = SessionHolder.HOLDER.get(); Query query = session.createQuery( "from CrossSection where river.name = :rivername"); query.setParameter("rivername", riverName); return query.list(); } /** * True if the given section is the "newest" for that river. * @param section Given section * @return true if the section has the most advanced end of its validity interval * or the most advanced start of its validity interval. */ public static boolean isNewest(CrossSection section) { Session session = SessionHolder.HOLDER.get(); Query query = session.createQuery( "from CrossSection where river.id = :riverid " + " order by timeInterval.stopTime desc, timeInterval.startTime desc"); query.setParameter("riverid", section.getRiver().getId()); List result = query.list(); if (result == null || result.isEmpty()) { return true; } else { CrossSection cs = (CrossSection) result.get(0); return section.getId().equals(cs.getId()); } } /** * Get a specific CrossSection from db. * @param id The dbid of the cross-section to load. */ public static CrossSection getCrossSection(int id) { Cache cache = CacheFactory.getCache(CACHE_NAME); if (cache != null) { Element element = cache.get(Integer.valueOf(id)); if (element != null) { return (CrossSection) element.getValue(); } } CrossSection section = getCrossSectionUncached(id); if (cache != null) { Element element = new Element(Integer.valueOf(id), section); cache.put(element); } return section; } /** Get specific CrossSection from database. */ protected static CrossSection getCrossSectionUncached(int id) { Session session = SessionHolder.HOLDER.get(); Query query = session.createQuery( "from CrossSection where id=:id"); query.setParameter("id", id); List<CrossSection> list = query.list(); return list.isEmpty() ? null : list.get(0); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :