// --- BEGIN COPYRIGHT BLOCK --- // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; version 2 of the License. // // This program 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 General Public License for more details. // // You should have received a copy of the GNU General Public License along // with this program; if not, write to the Free Software Foundation, Inc., // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. // // (C) 2007 Red Hat, Inc. // All rights reserved. // --- END COPYRIGHT BLOCK --- package com.netscape.certsrv.base; import java.util.Enumeration; import java.util.Hashtable; import netscape.security.util.ObjectIdentifier; /** * A class representing a meta attribute defintion. *
*
* @version $Revision$, $Date$
*/
public class MetaAttributeDef {
private String mName;
private ObjectIdentifier mOid;
private Class> mValueClass;
private static Hashtable
*
* @param name attribute name
* @param valueClass attribute value class
* @param oid attribute object identifier
*/
private MetaAttributeDef(String name, Class> valueClass,
ObjectIdentifier oid) {
mName = name;
mValueClass = valueClass;
mOid = oid;
}
/**
* Gets an attribute OID.
*
*
* @return returns attribute OID or null if not defined.
*/
public ObjectIdentifier getOID() {
return mOid;
}
/**
* Gets an Java class for the attribute values
*
*
* @return returns Java class for the attribute values
*/
public Class> getValueClass() {
return mValueClass;
}
/**
* Gets attribute name
*
*
* @return returns attribute name
*/
public String getName() {
return mName;
}
/**
* Registers new MetaAttribute defintion
* Attribute is defined by name, Java class for attribute values and
* optional object identifier
*
*
* @param name attribute name
* @param valueClass attribute value class
* @param oid attribute object identifier
* @exception IllegalArgumentException if name or valueClass are null, or
* conflicting attribute definition already exists
*/
public static MetaAttributeDef register(String name, Class> valueClass,
ObjectIdentifier oid) {
if (name == null) {
throw new IllegalArgumentException(
"Attribute name must not be null");
}
if (valueClass == null) {
throw new IllegalArgumentException(
"Attribute value class must not be null");
}
MetaAttributeDef newDef = new MetaAttributeDef(name, valueClass, oid);
MetaAttributeDef oldDef;
if ((oldDef = mNameToAttrDef.get(name)) != null &&
!oldDef.equals(newDef)) {
throw new IllegalArgumentException(
"Attribute \'" + name + "\' is already defined");
}
if (oid != null &&
(oldDef = mOidToAttrDef.get(oid)) != null &&
!oldDef.equals(newDef)) {
throw new IllegalArgumentException(
"OID \'" + oid + "\' is already in use");
}
mNameToAttrDef.put(name, newDef);
if (oid != null) {
mOidToAttrDef.put(oid, newDef);
}
return newDef;
}
/**
* Compares this attribute definition with another, for equality.
*
*
* @return true iff names, valueClasses and object identifiers
* are identical.
*/
public boolean equals(Object other) {
if (other == this)
return true;
if (other instanceof MetaAttributeDef) {
MetaAttributeDef otherDef = (MetaAttributeDef) other;
if ((mOid != null && otherDef.mOid != null &&
!mOid.equals(otherDef.mOid)) ||
(mOid == null && otherDef.mOid != null) ||
!mName.equals(otherDef.mName) ||
!mValueClass.equals(otherDef.mValueClass)) {
return false;
}
}
return false;
}
/**
* Retrieves attribute definition by name
*
*
* @param name attribute name
* @return attribute definition or null if not found
*/
public static MetaAttributeDef forName(String name) {
return mNameToAttrDef.get(name);
}
/**
* Retrieves attribute definition by object identifier
*
*
* @param oid attribute object identifier
* @return attribute definition or null if not found
*/
public static MetaAttributeDef forOID(ObjectIdentifier oid) {
return mOidToAttrDef.get(oid);
}
/**
* Returns enumeration of the registered attribute names
*
*
* @return returns enumeration of the registered attribute names
*/
public static Enumeration
*
* @return returns enumeration of the attribute object identifiers
*/
public static Enumeration