/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 Michael Powers This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.datastore; import java.io.Serializable; import net.wotonomy.foundation.internal.ValueConverter; /** * Represents an abstract key for a piece of data * */ public class DataKey implements Comparable, Serializable, Cloneable { static final long serialVersionUID = 8421127539579065705L; Long key; public DataKey() { key = 0L; } /** * Converts string representation to new object. */ public DataKey(String aString) { this(); setKeyString(aString); } @Override public int hashCode() { return key.intValue(); } public void increment() { key = Long.valueOf(key.longValue() + 1); } @Override public Object clone() { return new DataKey(this.toString()); } @Override public String toString() { return key.toString(); } public String getKeyString() { return key.toString(); } public void setKeyString(String aString) { Long parsed = ValueConverter.getLong(aString); if (parsed != null) key = parsed; } @Override public boolean equals(Object anObject) { if (anObject instanceof String) { if (toString().equals(anObject)) { return true; } } if (!(anObject instanceof DataKey)) return false; return key.equals(((DataKey) anObject).key); } @Override public int compareTo(Object anObject) { if (anObject instanceof String) { if (toString().equals(anObject)) { return 0; } } if (!(anObject instanceof DataKey)) { Long converted = (Long) ValueConverter.getLong(anObject); if (converted != null) { return (int) (key.longValue() - converted.longValue()); } return 0; } ; return (int) (key.longValue() - ((DataKey) anObject).key.longValue()); } } /* * $Log$ Revision 1.2 2006/02/19 16:26:19 cgruber Move non-unit-test code to * tests project Fix up code to work with proper imports Fix maven dependencies. * * Revision 1.1 2006/02/16 13:18:56 cgruber Check in all sources in * eclipse-friendly maven-enabled packages. * * Revision 1.4 2003/08/14 19:29:38 chochos minor cleanup (imports, static * method calls, etc) * * Revision 1.3 2001/02/23 23:44:44 mpowers Fixes for hashcode to ensure proper * key comparison. * * Revision 1.2 2001/02/15 21:12:41 mpowers Added accessors for key throughout * the api. This breaks compatibility. insertObject now returns the permanent * key for the newly created object. The old way returned a copy of the object * which was an additional read that was often ignored. Now you can read it only * if you need it. Furthermore, there was not other way of getting the permanent * key. * * Revision 1.1.1.1 2000/12/21 15:47:04 mpowers Contributing wotonomy. * * Revision 1.2 2000/12/20 16:25:36 michael Added log to all files. * * */