001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: *
017: * $Header:$
018: */
019: package org.apache.beehive.netui.pageflow.requeststate;
020:
021: import java.util.Map;
022: import java.util.Set;
023: import java.util.Collection;
024: import java.util.HashMap;
025:
026: /**
027: * This class implements the <code>java.util.Map</code> interface in a lazy way. It will delegate to the
028: * <code>java.util.HashMap</code> for the real implementation. The HashMap will only be created when it
029: * certain methods are called such as <code>put</code>, <code>get</code>, etc.
030: */
031: class LazyMap implements Map {
032: private HashMap _map;
033:
034: final boolean isMapCreated() {
035: return (_map != null);
036: }
037:
038: ///************************* This is the MAP interface implementation *************************
039:
040: final public int size() {
041: return (_map == null) ? 0 : _map.size();
042: }
043:
044: final public boolean isEmpty() {
045: return (_map == null) || _map.isEmpty();
046: }
047:
048: final public boolean containsKey(Object key) {
049: return (_map != null) && _map.containsKey(key);
050: }
051:
052: final public boolean containsValue(Object value) {
053: return (_map != null) && _map.containsValue(value);
054: }
055:
056: final public Object get(Object key) {
057: Map map = getMap();
058: return map.get(key);
059: }
060:
061: final public Object put(Object key, Object value) {
062: Map map = getMap();
063: return map.put(key, value);
064: }
065:
066: final public Object remove(Object key) {
067: Map map = getMap();
068: return map.remove(key);
069: }
070:
071: final public void putAll(Map t) {
072: Map map = getMap();
073: map.putAll(t);
074: }
075:
076: final public void clear() {
077: if (_map != null)
078: _map.clear();
079: }
080:
081: final public Set keySet() {
082: Map map = getMap();
083: return map.keySet();
084: }
085:
086: final public Collection values() {
087: Map map = getMap();
088: return map.values();
089: }
090:
091: final public Set entrySet() {
092: Map map = getMap();
093: return map.entrySet();
094: }
095:
096: /****************************************** End Map Interface **********************************************
097:
098: /**
099: * This method will return the map. If the map hasn't been created
100: * it will be created. This is done in a thread safe way.
101: * @return the map implementation.
102: */
103: private Map getMap() {
104: if (_map != null)
105: return _map;
106:
107: synchronized (this ) {
108: if (_map != null)
109: return _map;
110: _map = new HashMap();
111: }
112: return _map;
113: }
114: }
|