comparison flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/CrossSectionFactory.java @ 1965:e71615d95afb

Added method to CrossSectionFactory to get single CrossSection, employ cache. flys-artifacts/trunk@3376 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Fri, 09 Dec 2011 15:52:22 +0000
parents 59622ba800c8
children f7e2a84a6d88
comparison
equal deleted inserted replaced
1964:85e442933e6d 1965:e71615d95afb
1 package de.intevation.flys.artifacts.model; 1 package de.intevation.flys.artifacts.model;
2 2
3 import java.util.List; 3 import java.util.List;
4
5 import net.sf.ehcache.Cache;
6 import net.sf.ehcache.Element;
4 7
5 import de.intevation.flys.backend.SessionHolder; 8 import de.intevation.flys.backend.SessionHolder;
6 import de.intevation.flys.model.CrossSection; 9 import de.intevation.flys.model.CrossSection;
7 import de.intevation.flys.model.River; 10 import de.intevation.flys.model.River;
8 11
12 import de.intevation.flys.artifacts.cache.CacheFactory;
13
9 import org.hibernate.Session; 14 import org.hibernate.Session;
10 import org.hibernate.Query; 15 import org.hibernate.Query;
16
11 17
12 /** 18 /**
13 * Get Cross Sections. 19 * Get Cross Sections.
14 */ 20 */
15 public class CrossSectionFactory { 21 public class CrossSectionFactory {
16 22
23 protected final static String CACHE_NAME = "cross_sections";
24
25 // TODO use caching consistently, streamline acces.
17 /** 26 /**
18 * Get CrossSections for an instantiated River. 27 * Get CrossSections for an instantiated River.
19 * 28 *
20 * @param river river object. 29 * @param river river object.
21 * 30 *
38 Query query = session.createQuery( 47 Query query = session.createQuery(
39 "from CrossSection where river.name = :rivername"); 48 "from CrossSection where river.name = :rivername");
40 query.setParameter("rivername", riverName); 49 query.setParameter("rivername", riverName);
41 return query.list(); 50 return query.list();
42 } 51 }
52
53
54 /** Get a specific CrossSection from db. */
55 public static CrossSection getCrossSection(int id) {
56 Cache cache = CacheFactory.getCache(CACHE_NAME);
57 if (cache != null) {
58 Element element = cache.get(Integer.valueOf(id));
59 if (element != null) {
60 return (CrossSection) element.getValue();
61 }
62 }
63
64 CrossSection section = getCrossSectionUncached(id);
65 if (cache != null) {
66 Element element = new Element(Integer.valueOf(id), section);
67 cache.put(element);
68 }
69
70 return section;
71 }
72
73
74 /** Get specific CrossSection from database. */
75 protected static CrossSection getCrossSectionUncached(int id) {
76 Session session = SessionHolder.HOLDER.get();
77 Query query = session.createQuery(
78 "from CrossSection where id=:id");
79 query.setParameter("id", id);
80 List<CrossSection> list = query.list();
81 return list.isEmpty() ? null : list.get(0);
82 }
43 } 83 }
44 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 : 84 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf-8 :

http://dive4elements.wald.intevation.org