@Override
 public void remove(QName name) {
   MessageTemplate template = nameMap.remove(name);
   Object id = templateMap.remove(template);
   idMap.remove(((Integer) id).intValue());
   templates.remove(template);
 }
 @Override
 public void register(int id, MessageTemplate template) {
   define(template);
   Integer tid = new Integer(id);
   idMap.put(id, template);
   templateMap.put(template, tid);
   notifyTemplateRegistered(template, id);
 }
 @Override
 public void register(int id, QName name) {
   if (!nameMap.containsKey(name)) {
     throw new IllegalArgumentException("The template named " + name + " is not defined.");
   }
   Integer tid = new Integer(id);
   MessageTemplate template = nameMap.get(name);
   templateMap.put(template, tid);
   idMap.put(id, template);
   notifyTemplateRegistered(template, id);
 }
 @Override
 public boolean isRegistered(int templateId) {
   return idMap.containsKey(templateId);
 }
 @Override
 public MessageTemplate get(int templateId) {
   return (MessageTemplate) idMap.get(templateId);
 }
 @Override
 public void remove(int id) {
   MessageTemplate template = (MessageTemplate) idMap.remove(id);
   templateMap.remove(template);
   nameMap.remove(template.getName());
 }
 @Override
 public void remove(MessageTemplate template) {
   Object id = templateMap.remove(template);
   nameMap.remove(template.getName());
   idMap.remove(((Integer) id).intValue());
 }