001    /*--------------------------------------------------------------------------+
002    $Id: IdManagerBase.java 26283 2010-02-18 11:18:57Z juergens $
003    |                                                                          |
004    | Copyright 2005-2010 Technische Universitaet Muenchen                     |
005    |                                                                          |
006    | Licensed under the Apache License, Version 2.0 (the "License");          |
007    | you may not use this file except in compliance with the License.         |
008    | You may obtain a copy of the License at                                  |
009    |                                                                          |
010    |    http://www.apache.org/licenses/LICENSE-2.0                            |
011    |                                                                          |
012    | Unless required by applicable law or agreed to in writing, software      |
013    | distributed under the License is distributed on an "AS IS" BASIS,        |
014    | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
015    | See the License for the specific language governing permissions and      |
016    | limitations under the License.                                           |
017    +--------------------------------------------------------------------------*/
018    package edu.tum.cs.commons.collections;
019    
020    import java.util.Map;
021    
022    /**
023     * Base class for id managers.
024     * 
025     * 
026     * @author Florian Deissenboeck
027     * @author $Author: juergens $
028     * @version $Rev: 26283 $
029     * @levd.rating GREEN Hash: 90DF9C120C62D3E775BE3F45FBA0E008
030     */
031    public class IdManagerBase<K> {
032        /** Maps from object to ids. */
033        private final Map<K, Integer> ids;
034    
035        /** the next id to bes used */
036        private int currentId = 0;
037    
038        /**
039         * Create new id manager
040         * 
041         * @param map
042         *            maps from object to ids
043         */
044        protected IdManagerBase(Map<K, Integer> map) {
045            this.ids = map;
046        }
047    
048        /**
049         * Obtain a unique id for an object. Note that obtaining a id for an object
050         * prevents it from being garbage collected.
051         */
052        public int obtainId(K k) {
053    
054            // is already stored
055            if (ids.containsKey(k)) {
056                return ids.get(k);
057            }
058    
059            ids.put(k, currentId);
060    
061            // return id and increase it afterwards
062            return currentId++;
063        }
064    
065        /**
066         * Clear the manager. Adding an object to the manager, clearing the manager
067         * and re-adding the object will not result in the same ids.
068         */
069        public void clear() {
070            ids.clear();
071            currentId = 0;
072        }
073    }