Mercurial > dive4elements > river
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 : |