01: /*
02: * Version: MPL 1.1/GPL 2.0/LGPL 2.1
03: *
04: * "The contents of this file are subject to the Mozilla Public License
05: * Version 1.1 (the "License"); you may not use this file except in
06: * compliance with the License. You may obtain a copy of the License at
07: * http://www.mozilla.org/MPL/
08: *
09: * Software distributed under the License is distributed on an "AS IS"
10: * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
11: * License for the specific language governing rights and limitations under
12: * the License.
13: *
14: * The Original Code is ICEfaces 1.5 open source software code, released
15: * November 5, 2006. The Initial Developer of the Original Code is ICEsoft
16: * Technologies Canada, Corp. Portions created by ICEsoft are Copyright (C)
17: * 2004-2006 ICEsoft Technologies Canada, Corp. All Rights Reserved.
18: *
19: * Contributor(s): _____________________.
20: *
21: * Alternatively, the contents of this file may be used under the terms of
22: * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"
23: * License), in which case the provisions of the LGPL License are
24: * applicable instead of those above. If you wish to allow use of your
25: * version of this file only under the terms of the LGPL License and not to
26: * allow others to use your version of this file under the MPL, indicate
27: * your decision by deleting the provisions above and replace them with
28: * the notice and other provisions required by the LGPL License. If you do
29: * not delete the provisions above, a recipient may use your version of
30: * this file under either the MPL or the LGPL License."
31: *
32: */
33:
34: package com.icesoft.faces.context.effects;
35:
36: import javax.faces.context.FacesContext;
37: import java.util.HashMap;
38: import java.util.Map;
39: import java.util.logging.Logger;
40: import java.util.logging.Level;
41:
42: /**
43: * Store values of Draggable and Droppables between requests
44: *
45: */
46: public class DragCache {
47: private static Logger log = Logger.getLogger(DragCache.class
48: .getName());
49:
50: private static final String CACHE_CLEARED = "ICESOFT_DRAG_CACHE_CLEARED_FLAG";
51: private static final String CACHE_KEY = "ICESOFT_DRAG_CACHE_RGDM_FLAG";
52: private static final String KEY_START = "ICEDRAGKEY[";
53: private static final String KEY_END = "]ICEDRAGKEY";
54:
55: /**
56: * Add a value to the cache
57: * @param value
58: * @param context
59: * @return
60: */
61: public static String put(Object value, FacesContext context) {
62: Map sessionMap = context.getExternalContext().getSessionMap();
63: //TODO: Clear out when values are no longer needed. How can this be detected?
64: if (sessionMap.get(CACHE_KEY) == null) {
65: sessionMap.put(CACHE_KEY, new HashMap());
66: }
67: Map cache = (Map) sessionMap.get(CACHE_KEY);
68: String key = KEY_START + cache.size() + KEY_END;
69: cache.put(key, value);
70:
71: return key;
72: }
73:
74: /**
75: * Get a value from the cache
76: * @param key
77: * @param context
78: * @return
79: */
80: public static Object get(String key, FacesContext context) {
81: if (key == null) {
82: throw new NullPointerException("Key can't be null");
83: }
84: key = key.trim();
85: Map sessionMap = context.getExternalContext().getSessionMap();
86: Map cache = (Map) sessionMap.get(CACHE_KEY);
87: if (cache == null) {
88: throw new IllegalStateException(
89: "No Drag component placed a value in the cache.");
90: }
91: Object o = cache.get(key);
92: if (o == null) {
93: log.log(Level.SEVERE, "DragCache: No value found for key ["
94: + key + "]");
95: }
96: return cache.get(key);
97: }
98:
99: }
|