01: /*************************************************************************
02: * *
03: * EJBCA: The OpenSource Certificate Authority *
04: * *
05: * This software is free software; you can redistribute it and/or *
06: * modify it under the terms of the GNU Lesser General Public *
07: * License as published by the Free Software Foundation; either *
08: * version 2.1 of the License, or any later version. *
09: * *
10: * See terms of license at gnu.org. *
11: * *
12: *************************************************************************/package org.ejbca.core.model;
13:
14: import java.util.HashMap;
15:
16: /**
17: * UpgradeableDataHashMap is an class implementing the IUpgradeableData intended to be extended by
18: * classes saving it's data to a database in BLOB form.
19: *
20: * @version $Id: UpgradeableDataHashMap.java,v 1.6 2007/05/14 13:47:24 anatom Exp $
21: *
22: * @see org.ejbca.core.model.IUpgradeableData
23: */
24: public abstract class UpgradeableDataHashMap implements
25: IUpgradeableData, java.io.Serializable {
26: /**
27: * Determines if a de-serialized file is compatible with this class.
28: *
29: * Maintainers must change this value if and only if the new version
30: * of this class is not compatible with old versions. See Sun docs
31: * for <a href=http://java.sun.com/products/jdk/1.1/docs/guide
32: * /serialization/spec/version.doc.html> details. </a>
33: *
34: */
35: private static final long serialVersionUID = -1766329888474901945L;
36:
37: /**
38: * Creates a new UpgradeableDataHashMap object.
39: */
40: public UpgradeableDataHashMap() {
41: data = new HashMap();
42: data.put(VERSION, new Float(getLatestVersion()));
43: }
44:
45: /**
46: * Should return a constant containing the latest available version of the class.
47: *
48: * @return DOCUMENT ME!
49: */
50: public abstract float getLatestVersion();
51:
52: /**
53: * Function returning the current version of the class data.
54: *
55: * @return DOCUMENT ME!
56: */
57: public float getVersion() {
58: return ((Float) data.get(VERSION)).floatValue();
59: }
60:
61: /**
62: * Function sending the data to be saved to the database.
63: *
64: * @return DOCUMENT ME!
65: */
66: public Object saveData() {
67: return data;
68: }
69:
70: /**
71: * Function loading saved data into to data structure.
72: *
73: * @param data DOCUMENT ME!
74: */
75: public void loadData(Object data) {
76: this .data = (HashMap) data;
77:
78: if (Float.compare(getLatestVersion(), getVersion()) > 0) {
79: upgrade();
80: }
81: }
82:
83: /**
84: * Function that should handle the update if of the data in the class so it's up to date with
85: * the latest version. An update is only done when needed.
86: */
87: public abstract void upgrade();
88:
89: protected HashMap data;
90: public static final String VERSION = "version";
91: }
|