示例#1
0
  /**
   * Creates a deep clone of a WikiPage. Strings are not cloned, since they're immutable. Attributes
   * are not cloned, only the internal HashMap (so if you modify the contents of a value of an
   * attribute, these will reflect back to everyone).
   *
   * @return A deep clone of the WikiPage
   */
  public Object clone() {
    WikiPage p = new WikiPage(m_engine, m_name);

    p.m_wiki = m_wiki;

    p.m_author = m_author;
    p.m_version = m_version;
    p.m_lastModified = m_lastModified != null ? (Date) m_lastModified.clone() : null;

    p.m_fileSize = m_fileSize;

    for (Map.Entry<String, Object> entry : m_attributes.entrySet()) {
      p.m_attributes.put(entry.getKey(), entry.getValue());
    }

    if (m_accessList != null) {
      p.m_accessList = new AclImpl();

      for (Enumeration entries = m_accessList.entries(); entries.hasMoreElements(); ) {
        AclEntry e = (AclEntry) entries.nextElement();

        p.m_accessList.addEntry(e);
      }
    }

    return p;
  }