/* $Id$ */ package org.noreply.fancydress.directory.parser; import java.util.*; /** * Hold all sections and entries that are in a directory. * * This class holds all sections and entries of a directory. All data * are stored in sections, which in turn hold entries of key:value pairs. * * The values themselves are not yet parsed, nor is the content * cryptographically verified. * * The DirectoryParser returns an object of this class. * * @see org.noreply.fancydress.directory.Directory * @see DirectoryParser * @see DirectorySection * @see DirectoryEntry */ public class DirectoryMessage implements Cloneable { /** * List of directory sections */ private ArrayList sections; /** * Default constructor. * * Creates a new DirectoryMessage, adding section to * the section list. * * @param section First section of the directory. It is used directly, not copied. */ public DirectoryMessage(DirectorySection section) { this(); sections.add(section); } /** * Emty constructor. * * Creates a new DirectoryMessage. */ public DirectoryMessage() { sections = new ArrayList(); } /** * Copy constructor. * * Creates a new DirectoryMessage copying all values (recursively) from * message. * * @param message message to copy from. */ public DirectoryMessage(DirectoryMessage message) { this(); for (Iterator i = message.sections.iterator(); i.hasNext(); ) sections.add(new DirectorySection((DirectorySection)i.next())); } /** * Add a section to this message. * * @param section Section to add. It is used directly, not copied. */ public void addSection(DirectorySection section) { sections.add(section); } /** * Blind a value in order to verify or create a signature. * * @param section Section in which to blind the entry named. * @param entry Entry to blind. * @return The number of entries blinded. */ public int blindValue(String section, String entry) { int count = 0; for (Iterator i = sections.iterator(); i.hasNext(); ) { DirectorySection s = (DirectorySection) i.next(); if (s.getName().equals(section)) count += s.blindValue(entry); }; return count; } /** * Return the first section with that name * * @param section Section to return. * @return first DirectorySection that matches the name or null. */ public DirectorySection getSection(String section) { int count = 0; for (Iterator i = sections.iterator(); i.hasNext(); ) { DirectorySection s = (DirectorySection) i.next(); if (s.getName().equals(section)) return s; }; return null; } /** * Return an iterator over the sections. * * @return Iterator over sections. */ public Iterator getSectionsIterator() { return sections.iterator(); } /** * Returns a string representation of the directory. * * This representation can be parsed again using the directory parser. * * @return a string representation of the object. */ public String toString() { StringBuffer strbuf = new StringBuffer(); for (Iterator i = sections.iterator(); i.hasNext(); ) { Object o = i.next(); strbuf.append(o.toString()); } return strbuf.toString(); } }