001 /*
002 * Copyright 2011-2016 UnboundID Corp.
003 * All Rights Reserved.
004 */
005 /*
006 * Copyright (C) 2011-2016 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 }