View Javadoc

1   /********************************************************************************
2    *InternetCafe is a software solution that helps the management of Cybercafes 
3    * according with the ITALIAN DECREE LAW ON ANTI-TERROR MEASURES, 27 JULY 2005.
4    * Copyright (C) 2006  Guido Angelo Ingenito
5   
6    * This program is free software; you can redistribute it and/or
7    * modify it under the terms of the GNU General Public License
8    * as published by the Free Software Foundation; either version 2
9    * of the License, or (at your option) any later version.
10  
11   * This program is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14   * GNU General Public License for more details.
15   * 
16   * You should have received a copy of the GNU General Public License
17   * along with this program; if not, write to the Free Software
18   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19   *******************************************************************************/
20  package base.jdbs.cryptography;
21  
22  import java.io.File;
23  import java.security.KeyStore;
24  import java.util.Collection;
25  import java.util.Enumeration;
26  import java.util.Hashtable;
27  
28  import org.apache.log4j.Logger;
29  
30  
31  public abstract class KeyRing<K> {
32  	
33  	private static final transient Logger logger = Logger.getLogger(KeyRing.class.getName());
34  
35  	/***The AsymmetricKeyRings' element collection.**/
36  	private Hashtable<Integer, K> element = new Hashtable<Integer , K>();
37  	
38  	/***The current element id.**/
39  	private int currentElementId = 0;
40  	
41  	/***
42  	 * This method computes a new Id for a KeyPair.
43  	 * @return A new Id for a KeyPair.
44  	 */
45  	protected Integer nextElementId(){
46  		return ++currentElementId;
47  	}
48  	
49  	/***
50  	 * This method adds to the KeyRing the target object.
51  	 * @param id The id associated to the object.
52  	 * @param object The object to be added.
53  	 */
54  	protected void add(Integer id, K object){
55  		this.element.put(id, object);
56  	}
57  	
58  	/***
59  	 * This method removes a stored element from the KeyRing.
60  	 * @param id The id associated to the element to remove.
61  	 */
62  	protected void remove(Integer id){
63  		this.element.remove(id);
64  	}
65  	
66  	/***
67  	 * This method removes all the stored elements from the KeyRing.
68  	 */
69  	protected void removeAll(){
70  		Enumeration keys = element.keys();
71  		for(;keys.hasMoreElements();)
72  			this.element.remove(keys.nextElement());
73  	}
74  	
75  	/***
76  	 * This method retrieves a stored element by id. 
77  	 * @param id The id associated to the element to retrieve.
78  	 * @return The stored element otherwise null.
79  	 */
80  	protected K get(Integer id){
81  		return this.element.get(id);
82  	}
83  	
84  	/***
85  	 * This method returns a collection of all stored elements.
86  	 * @return A collection of stored elements.
87  	 */
88  	protected Collection<K> getAll(){
89  		return this.element.values();
90  	}
91  	
92  	/***
93  	 * This method saves the content of the key ring in a file system location.
94  	 * @param location The location where the key ring must be stored.
95  	 * @param password The password associated to the file.
96  	 */
97  	public abstract void store(File location, String password);
98  	
99  	/***
100 	 * This method retrieves the content of a stored key ring from a file system location.
101 	 * @param location The location from wich the content of the key ring must be retrieved.
102 	 * @param password The password associated to the file.
103 	 * @return The KeyStore associated to the input location, null if the input location isn't a valid key store archive.
104 	 */
105 	public abstract KeyStore retrieve(File location, String password);
106 	
107 }