// Copyright 2000-2003, FreeHEP.
package hep.graphics.heprep.ref;
import hep.graphics.heprep.HepRepAttDef;
import hep.graphics.heprep.HepRepDefinition;
import hep.graphics.heprep.util.ValueSet;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.Hashtable;
import java.util.Map;
import java.util.Set;
/**
*
* @author M.Donszelmann
*
* @version $Id: DefaultHepRepDefinition.java 8584 2006-08-10 23:06:37Z duns $
*/
public abstract class DefaultHepRepDefinition extends DefaultHepRepAttribute implements HepRepDefinition, Serializable {
private Map/*<LowerCaseNamae, HepRepAttDef>*/ atts;
protected DefaultHepRepDefinition() {
super();
}
private void writeObject(ObjectOutputStream stream) throws IOException {
stream.defaultWriteObject();
}
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException {
stream.defaultReadObject();
}
public Set/*<HepRepAttDef>*/ getAttDefsFromNode() {
return new ValueSet(atts);
}
public void addAttDef(HepRepAttDef hepRepAttDef) {
try {
DefaultHepRepAttDef def = (DefaultHepRepAttDef)hepRepAttDef;
if (atts == null) atts = new Hashtable();
atts.put(def.getLowerCaseName(), def);
} catch (ClassCastException cce) {
System.err.println("DefaultHepRepAttribute.addDefinition() cannot add argument of class: "+hepRepAttDef.getClass()+", ignored.");
}
}
public void addAttDef(String name, String desc, String category, String extra) {
addAttDef(new DefaultHepRepAttDef(name, desc, category, extra));
}
public HepRepAttDef getAttDefFromNode(String lowerCaseName) {
lowerCaseName = lowerCaseName.intern();
if (atts == null) return null;
return (HepRepAttDef)atts.get(lowerCaseName);
}
public boolean equals(Object o) {
if (o == this) return true;
if (!super.equals(o)) return false;
if (o instanceof HepRepDefinition) {
HepRepDefinition def = (HepRepDefinition)o;
return def.getAttDefsFromNode().equals(getAttDefsFromNode());
}
return false;
}
/* Disabled for FREEHEP-386
public int hashCode() {
long code = super.hashCode();
code += getAttDefsFromNode().hashCode();
return (int)code;
}
*/
public abstract HepRepAttDef getAttDef(String name);
}