001    /*
002     * Copyright 2011-2015 UnboundID Corp.
003     * All Rights Reserved.
004     */
005    /*
006     * Copyright (C) 2011-2015 UnboundID Corp.
007     *
008     * This program is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU General Public License (GPLv2 only)
010     * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011     * as published by the Free Software Foundation.
012     *
013     * This program is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016     * GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with this program; if not, see <http://www.gnu.org/licenses>.
020     */
021    package com.unboundid.ldap.listener;
022    
023    
024    
025    import java.io.Serializable;
026    import java.util.Collections;
027    import java.util.Map;
028    import java.util.TreeMap;
029    
030    import com.unboundid.ldap.sdk.DN;
031    import com.unboundid.ldap.sdk.ReadOnlyEntry;
032    import com.unboundid.util.NotMutable;
033    import com.unboundid.util.ThreadSafety;
034    import com.unboundid.util.ThreadSafetyLevel;
035    
036    
037    
038    /**
039     * This class provides an opaque data structure which represents a point-in-time
040     * snapshot for an in-memory directory server instance. Note that this snapshot
041     * will reflect only data held in the server (including both user data and any
042     * changelog information, if that is enabled), but will not alter the settings
043     * of the server which are defined through configuration.
044     */
045    @NotMutable()
046    @ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
047    public final class InMemoryDirectoryServerSnapshot
048           implements Serializable
049    {
050      /**
051       * The serial version UID for this serializable class.
052       */
053      private static final long serialVersionUID = 4691579754615787705L;
054    
055    
056    
057      // The first change number value at the time the snapshot was created.
058      private final long firstChangeNumber;
059    
060      // The last change number value at the time the snapshot was created.
061      private final long lastChangeNumber;
062    
063      // The set of entries held in the server at the time the snapshot was created.
064      private final Map<DN,ReadOnlyEntry> entryMap;
065    
066    
067    
068      /**
069       * Creates a new in-memory directory server snapshot with the provided
070       * information.
071       *
072       * @param  m                  A map of the entries contained in the server
073       *                            (including changelog entries) at the time the
074       *                            snapshot was created.
075       * @param  firstChangeNumber  The first change number value at the time the
076       *                            snapshot was created.
077       * @param  lastChangeNumber   The last change number value at the time the
078       *                            snapshot was created.
079       */
080      InMemoryDirectoryServerSnapshot(final Map<DN,ReadOnlyEntry> m,
081                                      final long firstChangeNumber,
082                                      final long lastChangeNumber)
083      {
084        this.firstChangeNumber = firstChangeNumber;
085        this.lastChangeNumber  = lastChangeNumber;
086    
087        entryMap = Collections.unmodifiableMap(new TreeMap<DN,ReadOnlyEntry>(m));
088      }
089    
090    
091    
092      /**
093       * Retrieves an unmodifiable map of all entries defined in the server at the
094       * time the snapshot was created.  This will include user-defined entries as
095       * sell as changelog entries, but it will exclude the root DSE and the schema
096       * subentry (since they are dynamically generated from the configuration).
097       *
098       * @return  An unmodifiable map of all entries defined in the server at the
099       *          time the snapshot was created.
100       */
101      public Map<DN,ReadOnlyEntry> getEntryMap()
102      {
103        return entryMap;
104      }
105    
106    
107    
108      /**
109       * Retrieves the first change number for the server at the time the snapshot
110       * was created.
111       *
112       * @return  The first change number for the server at the time the snapshot
113       *          was created.
114       */
115      public long getFirstChangeNumber()
116      {
117        return firstChangeNumber;
118      }
119    
120    
121    
122      /**
123       * Retrieves the last change number for the server at the time the snapshot
124       * was created.
125       *
126       * @return  The last change number for the server at the time the snapshot
127       *          was created.
128       */
129      public long getLastChangeNumber()
130      {
131        return lastChangeNumber;
132      }
133    }