| | |
| | | /** |
| | | * The default keyManager. |
| | | */ |
| | | private X509KeyManager keyManager = null; |
| | | private X509KeyManager keyManager; |
| | | |
| | | /** |
| | | * The default constructor. |
| | |
| | | public final class ArgumentGroup implements Comparable<ArgumentGroup> { |
| | | |
| | | /** Description for this group of arguments. */ |
| | | private LocalizableMessage description = null; |
| | | private LocalizableMessage description; |
| | | |
| | | /** List of arguments belonging to this group. */ |
| | | private List<Argument> args = null; |
| | | private List<Argument> args; |
| | | |
| | | /** Governs groups position within usage statement. */ |
| | | private final Integer priority; |
| | |
| | | static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | /** The 'hostName' global argument. */ |
| | | private StringArgument hostNameArg = null; |
| | | private StringArgument hostNameArg; |
| | | |
| | | /** The 'port' global argument. */ |
| | | private IntegerArgument portArg = null; |
| | | private IntegerArgument portArg; |
| | | |
| | | /** The 'bindDN' global argument. */ |
| | | private StringArgument bindNameArg = null; |
| | | private StringArgument bindNameArg; |
| | | |
| | | /** The 'bindPasswordFile' global argument. */ |
| | | private FileBasedArgument bindPasswordFileArg = null; |
| | | private FileBasedArgument bindPasswordFileArg; |
| | | |
| | | /** The 'password' value. */ |
| | | private char[] password = null; |
| | | private char[] password; |
| | | |
| | | /** The 'bindPassword' global argument. */ |
| | | private StringArgument bindPasswordArg = null; |
| | | private StringArgument bindPasswordArg; |
| | | |
| | | /** The 'connectTimeOut' global argument. */ |
| | | private IntegerArgument connectTimeOut = null; |
| | | private IntegerArgument connectTimeOut; |
| | | |
| | | /** The 'trustAllArg' global argument. */ |
| | | private BooleanArgument trustAllArg = null; |
| | | private BooleanArgument trustAllArg; |
| | | |
| | | /** The 'trustStore' global argument. */ |
| | | private StringArgument trustStorePathArg = null; |
| | | private StringArgument trustStorePathArg; |
| | | |
| | | /** The 'trustStorePassword' global argument. */ |
| | | private StringArgument trustStorePasswordArg = null; |
| | | private StringArgument trustStorePasswordArg; |
| | | |
| | | /** The 'trustStorePasswordFile' global argument. */ |
| | | private FileBasedArgument trustStorePasswordFileArg = null; |
| | | private FileBasedArgument trustStorePasswordFileArg; |
| | | |
| | | /** The 'keyStore' global argument. */ |
| | | private StringArgument keyStorePathArg = null; |
| | | private StringArgument keyStorePathArg; |
| | | |
| | | /** The 'keyStorePassword' global argument. */ |
| | | private StringArgument keyStorePasswordArg = null; |
| | | private StringArgument keyStorePasswordArg; |
| | | |
| | | /** The 'keyStorePasswordFile' global argument. */ |
| | | private FileBasedArgument keyStorePasswordFileArg = null; |
| | | private FileBasedArgument keyStorePasswordFileArg; |
| | | |
| | | /** The 'certNicknameArg' global argument. */ |
| | | private StringArgument certNicknameArg = null; |
| | | private StringArgument certNicknameArg; |
| | | |
| | | /** The 'useSSLArg' global argument. */ |
| | | private BooleanArgument useSSLArg = null; |
| | | private BooleanArgument useSSLArg; |
| | | |
| | | /** The 'useStartTLSArg' global argument. */ |
| | | private BooleanArgument useStartTLSArg = null; |
| | | private BooleanArgument useStartTLSArg; |
| | | |
| | | /** Argument indicating a SASL option. */ |
| | | private StringArgument saslOptionArg = null; |
| | | private StringArgument saslOptionArg; |
| | | |
| | | /** |
| | | * Whether to request that the server return the authorization ID in the |
| | |
| | | protected ConnectionFactory authenticatedConnFactory; |
| | | |
| | | /** The bind request to connect with. */ |
| | | private BindRequest bindRequest = null; |
| | | private BindRequest bindRequest; |
| | | |
| | | /** The console application linked to this connection in interactive mode. */ |
| | | private final ConsoleApplication app; |
| | | |
| | | /** If this connection should be an admin connection. */ |
| | | private boolean isAdminConnection = false; |
| | | private boolean isAdminConnection; |
| | | |
| | | /** |
| | | * Default constructor to create a connection factory designed for use with command line tools, |
| | |
| | | * Indicates whether the menu will allow selection of multiple |
| | | * numeric options. |
| | | */ |
| | | private boolean allowMultiSelect = false; |
| | | private boolean allowMultiSelect; |
| | | |
| | | /** The application console. */ |
| | | private final ConsoleApplication app; |
| | |
| | | private final List<Integer> columnWidths = new ArrayList<Integer>(); |
| | | |
| | | /** The call-back for the optional default action. */ |
| | | private MenuCallback<T> defaultCallback = null; |
| | | private MenuCallback<T> defaultCallback; |
| | | |
| | | /** The description of the optional default action. */ |
| | | private LocalizableMessage defaultDescription = null; |
| | | private LocalizableMessage defaultDescription; |
| | | |
| | | /** The numeric option call-backs. */ |
| | | private final List<MenuCallback<T>> numericCallbacks = new ArrayList<MenuCallback<T>>(); |
| | |
| | | private final List<List<LocalizableMessage>> numericFields = new ArrayList<List<LocalizableMessage>>(); |
| | | |
| | | /** The menu title. */ |
| | | private LocalizableMessage title = null; |
| | | private LocalizableMessage title; |
| | | |
| | | /** The menu prompt. */ |
| | | private LocalizableMessage prompt = null; |
| | | private LocalizableMessage prompt; |
| | | |
| | | /** |
| | | * The maximum number of times that we allow the user to provide an invalid |
| | |
| | | */ |
| | | public final class MultiColumnPrinter { |
| | | |
| | | /** |
| | | * Left ID. |
| | | */ |
| | | /** Left ID. */ |
| | | public static final int LEFT = 0; |
| | | |
| | | /** |
| | | * Center ID. |
| | | */ |
| | | /** Center ID. */ |
| | | public static final int CENTER = 1; |
| | | |
| | | /** |
| | | * Right ID. |
| | | */ |
| | | /** Right ID. */ |
| | | public static final int RIGHT = 2; |
| | | |
| | | private int numCol = 2; |
| | | |
| | | private int gap = 4; |
| | | |
| | | private int align = CENTER; |
| | | |
| | | private int titleAlign = CENTER; |
| | | |
| | | private String border = null; |
| | | |
| | | private List<String[]> titleTable = null; |
| | | |
| | | private List<int[]> titleSpanTable = null; |
| | | |
| | | private String border; |
| | | private List<String[]> titleTable; |
| | | private List<int[]> titleSpanTable; |
| | | private final int[] curLength; |
| | | |
| | | private final ConsoleApplication app; |
| | |
| | | * Counts the number of separators that should be output the next time a non-empty cell is displayed. The tab |
| | | * separators are not displayed immediately so that we can avoid displaying unnecessary trailing separators. |
| | | */ |
| | | private int requiredSeparators = 0; |
| | | private int requiredSeparators; |
| | | |
| | | /** Private constructor. */ |
| | | private Serializer() { |
| | |
| | | } |
| | | |
| | | /** Indicates whether or not the headings should be output. */ |
| | | private boolean displayHeadings = false; |
| | | private boolean displayHeadings; |
| | | |
| | | /** The output destination. */ |
| | | private PrintWriter writer = null; |
| | | private PrintWriter writer; |
| | | |
| | | /** |
| | | * Creates a new tab separated table printer for the specified output stream. Headings will not be displayed by |
| | |
| | | * The current column number in the current row where 0 represents |
| | | * the left-most column in the table. |
| | | */ |
| | | private int column = 0; |
| | | private int column; |
| | | |
| | | /** The current with of each column. */ |
| | | private List<Integer> columnWidths = new ArrayList<Integer>(); |
| | |
| | | private List<LocalizableMessage> header = new ArrayList<LocalizableMessage>(); |
| | | |
| | | /** The current number of rows in the table. */ |
| | | private int height = 0; |
| | | private int height; |
| | | |
| | | /** The list of table rows. */ |
| | | private List<List<String>> rows = new ArrayList<List<String>>(); |
| | |
| | | private List<Integer> sortKeys = new ArrayList<Integer>(); |
| | | |
| | | /** The current number of columns in the table. */ |
| | | private int width = 0; |
| | | private int width; |
| | | |
| | | /** |
| | | * Creates a new table printer. |
| | |
| | | private final List<String> currentRow = new ArrayList<String>(); |
| | | |
| | | /** Width of the table in columns. */ |
| | | private int totalColumns = 0; |
| | | private int totalColumns; |
| | | |
| | | /** The padding to use for indenting the table. */ |
| | | private final String indentPadding; |
| | |
| | | private final Map<Integer, Integer> fixedColumns = new HashMap<Integer, Integer>(); |
| | | |
| | | /** The number of characters the table should be indented. */ |
| | | private int indentWidth = 0; |
| | | private int indentWidth; |
| | | |
| | | /** |
| | | * The character which should be used to separate the table |
| | |
| | | private char headingSeparator = DEFAULT_HEADING_SEPARATOR; |
| | | |
| | | /** The column where the heading separator should begin. */ |
| | | private int headingSeparatorStartColumn = 0; |
| | | private int headingSeparatorStartColumn; |
| | | |
| | | /** |
| | | * The padding which will be used to separate a cell's |
| | |
| | | private int totalWidth = MAX_LINE_WIDTH; |
| | | |
| | | /** The output destination. */ |
| | | private PrintWriter writer = null; |
| | | private PrintWriter writer; |
| | | |
| | | /** |
| | | * Creates a new text table printer for the specified output stream. The text table printer will have the following |
| | |
| | | private static class MockConsoleApplication extends ConsoleApplication { |
| | | private static ByteArrayOutputStream out; |
| | | private static ByteArrayOutputStream err; |
| | | private boolean verbose = false; |
| | | private boolean interactive = false; |
| | | private boolean quiet = false; |
| | | private boolean verbose; |
| | | private boolean interactive; |
| | | private boolean quiet; |
| | | |
| | | private MockConsoleApplication(PrintStream out, PrintStream err) { |
| | | super(out, err); |
| | |
| | | private final class DefaultManagedObjectFactory implements RelationDefinitionVisitor<Void, Void> { |
| | | |
| | | /** Possible exceptions. */ |
| | | private ManagedObjectAlreadyExistsException moaee = null; |
| | | |
| | | private MissingMandatoryPropertiesException mmpe = null; |
| | | |
| | | private ConcurrentModificationException cme = null; |
| | | |
| | | private OperationRejectedException ore = null; |
| | | |
| | | private LdapException ere = null; |
| | | private ManagedObjectAlreadyExistsException moaee; |
| | | private MissingMandatoryPropertiesException mmpe; |
| | | private ConcurrentModificationException cme; |
| | | private OperationRejectedException ore; |
| | | private LdapException ere; |
| | | |
| | | /** {@inheritDoc} */ |
| | | @Override |
| | |
| | | * Any exception that occurred whilst retrieving inherited default |
| | | * values. |
| | | */ |
| | | private PropertyException exception = null; |
| | | private PropertyException exception; |
| | | |
| | | /** The path of the managed object containing the first property. */ |
| | | private final ManagedObjectPath<?, ?> firstPath; |
| | |
| | | private final boolean isCreate; |
| | | |
| | | /** The path of the managed object containing the next property. */ |
| | | private ManagedObjectPath<?, ?> nextPath = null; |
| | | private ManagedObjectPath<?, ?> nextPath; |
| | | |
| | | /** The next property whose default values were required. */ |
| | | private PropertyDefinition<T> nextProperty = null; |
| | | private PropertyDefinition<T> nextProperty; |
| | | |
| | | /** Private constructor. */ |
| | | private DefaultValueFinder(ManagedObjectPath<?, ?> p, boolean isCreate) { |
| | |
| | | } |
| | | |
| | | /** The strongly typed private implementation. */ |
| | | private Impl<?> impl = null; |
| | | private Impl<?> impl; |
| | | |
| | | /** The property name. */ |
| | | private final String propertyName; |
| | |
| | | public static final String GENERIC_TYPE = "generic"; |
| | | |
| | | private long sessionStartTime; |
| | | private boolean sessionStartTimePrinted = false; |
| | | private int sessionEquivalentOperationNumber = 0; |
| | | private boolean sessionStartTimePrinted; |
| | | private int sessionEquivalentOperationNumber; |
| | | |
| | | /** |
| | | * Provides the command-line arguments to the main application for processing. |
| | |
| | | /** |
| | | * The factory which the application should use to retrieve its management context. |
| | | */ |
| | | private LDAPManagementContextFactory factory = null; |
| | | private LDAPManagementContextFactory factory; |
| | | |
| | | /** |
| | | * Flag indicating whether or not the global arguments have already been initialized. |
| | | */ |
| | | private boolean globalArgumentsInitialized = false; |
| | | private boolean globalArgumentsInitialized; |
| | | |
| | | /** The sub-command handler factory. */ |
| | | private SubCommandHandlerFactory handlerFactory = null; |
| | | private SubCommandHandlerFactory handlerFactory; |
| | | |
| | | /** Mapping of sub-commands to their implementations. */ |
| | | private final Map<SubCommand, SubCommandHandler> handlers = new HashMap<SubCommand, SubCommandHandler>(); |
| | |
| | | implements MenuCallback<Void> { |
| | | |
| | | /** Any exception that was caught during processing. */ |
| | | private ClientException e = null; |
| | | private ClientException e; |
| | | |
| | | /** The managed object being edited. */ |
| | | private final ManagedObject<?> mo; |
| | |
| | | implements MenuCallback<Boolean> { |
| | | |
| | | /** Any exception that was caught during processing. */ |
| | | private ClientException e = null; |
| | | private ClientException e; |
| | | |
| | | /** The managed object being edited. */ |
| | | private final ManagedObject<?> mo; |
| | |
| | | MenuCallback<Boolean> { |
| | | |
| | | /** Any exception that was caught during processing. */ |
| | | private ClientException e = null; |
| | | private ClientException e; |
| | | |
| | | /** The managed object being edited. */ |
| | | private final ManagedObject<?> mo; |
| | |
| | | implements MenuCallback<Boolean> { |
| | | |
| | | /** Any exception that was caught during processing. */ |
| | | private ClientException e = null; |
| | | private ClientException e; |
| | | |
| | | /** The managed object being edited. */ |
| | | private final ManagedObject<?> mo; |
| | |
| | | /** |
| | | * Any argument exception thrown when creating the naming arguments. |
| | | */ |
| | | private ArgumentException e = null; |
| | | private ArgumentException e; |
| | | |
| | | /** |
| | | * Indicates whether the sub-command is a create-xxx sub-command, in which case the final path element will have |
| | |
| | | private final SortedSet<DeleteSubCommandHandler> deleteHandlers = new TreeSet<DeleteSubCommandHandler>(); |
| | | |
| | | /** Any exception that occurred whilst creating the sub-commands. */ |
| | | private ArgumentException exception = null; |
| | | private ArgumentException exception; |
| | | |
| | | /** The set of get-xxx-prop available sub-commands. */ |
| | | private final SortedSet<GetPropSubCommandHandler> getPropHandlers = new TreeSet<GetPropSubCommandHandler>(); |
| | | |
| | | /** The help sub-command handler. */ |
| | | private HelpSubCommandHandler helpHandler = null; |
| | | private HelpSubCommandHandler helpHandler; |
| | | |
| | | /** The set of list-xxx available sub-commands. */ |
| | | private final SortedSet<ListSubCommandHandler> listHandlers = new TreeSet<ListSubCommandHandler>(); |
| | |
| | | * Any exception that occurred whilst retrieving inherited default |
| | | * values. |
| | | */ |
| | | private PropertyException exception = null; |
| | | private PropertyException exception; |
| | | |
| | | /** |
| | | * Optional new configuration entry which does not yet exist in |
| | |
| | | private final Entry newConfigEntry; |
| | | |
| | | /** The path of the managed object containing the next property. */ |
| | | private ManagedObjectPath<?, ?> nextPath = null; |
| | | private ManagedObjectPath<?, ?> nextPath; |
| | | |
| | | /** The next property whose default values were required. */ |
| | | private PropertyDefinition<T> nextProperty = null; |
| | | private PropertyDefinition<T> nextProperty; |
| | | |
| | | /** Private constructor. */ |
| | | private DefaultValueFinder(Entry newConfigEntry) { |
| | |
| | | @SuppressWarnings("javadoc") |
| | | public class BooleanPropertyDefinitionTest extends ConfigTestCase { |
| | | |
| | | BooleanPropertyDefinition.Builder builder = null; |
| | | private BooleanPropertyDefinition.Builder builder; |
| | | |
| | | @BeforeClass |
| | | public void setUp() throws Exception { |
| | |
| | | |
| | | package org.forgerock.opendj.config; |
| | | |
| | | import static org.testng.Assert.assertEquals; |
| | | import static org.testng.Assert.assertTrue; |
| | | |
| | | import java.util.Comparator; |
| | | import java.util.List; |
| | | |
| | |
| | | import org.testng.annotations.DataProvider; |
| | | import org.testng.annotations.Test; |
| | | |
| | | import static org.forgerock.opendj.config.ClassPropertyDefinition.*; |
| | | import static org.testng.Assert.*; |
| | | |
| | | @SuppressWarnings("javadoc") |
| | | public class ClassPropertyDefinitionTest extends ConfigTestCase { |
| | | |
| | |
| | | |
| | | public Comparator<Dummy> comparator() { |
| | | return new Comparator<ClassPropertyDefinitionTest.Dummy>() { |
| | | @Override |
| | | public int compare(Dummy o1, Dummy o2) { |
| | | // No implementation required. |
| | | return 0; |
| | |
| | | } |
| | | } |
| | | |
| | | ClassPropertyDefinition.Builder builder = null; |
| | | |
| | | @DataProvider(name = "validClassNames") |
| | | public Object[][] createBuilderAddInstanceOfData() { |
| | | return new Object[][] { |
| | |
| | | |
| | | @Test(dataProvider = "validClassNames") |
| | | public void testBuilderAddInstanceOf(String classNameToAdd) { |
| | | ClassPropertyDefinition.Builder localBuilder = ClassPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), |
| | | "test-property"); |
| | | ClassPropertyDefinition.Builder localBuilder = createBuilder(RootCfgDefn.getInstance(), "test-property"); |
| | | localBuilder.addInstanceOf(classNameToAdd); |
| | | ClassPropertyDefinition propertyDef = localBuilder.getInstance(); |
| | | List<String> instances = propertyDef.getInstanceOfInterface(); |
| | |
| | | |
| | | @Test(dataProvider = "invalidClassNames", expectedExceptions = { IllegalArgumentException.class }) |
| | | public void testBuilderAddInstanceInvalid(String className) { |
| | | ClassPropertyDefinition.Builder localBuilder = ClassPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), |
| | | "test-property"); |
| | | ClassPropertyDefinition.Builder localBuilder = createBuilder(RootCfgDefn.getInstance(), "test-property"); |
| | | localBuilder.addInstanceOf(className); |
| | | ClassPropertyDefinition propertyDef = localBuilder.getInstance(); |
| | | List<String> instances = propertyDef.getInstanceOfInterface(); |
| | |
| | | @Test(dataProvider = "loadClasses") |
| | | public <T> void testLoadClass(String interfaceName, String loadClassName, Class<T> instanceOfClass, |
| | | Class<?> expectedClass) { |
| | | ClassPropertyDefinition.Builder localBuilder = ClassPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), |
| | | "test-property"); |
| | | ClassPropertyDefinition.Builder localBuilder = createBuilder(RootCfgDefn.getInstance(), "test-property"); |
| | | localBuilder.addInstanceOf(interfaceName); |
| | | ClassPropertyDefinition propertyDef = localBuilder.getInstance(); |
| | | Class<?> clazz = propertyDef.loadClass(loadClassName, instanceOfClass); |
| | |
| | | @Test(dataProvider = "loadClassesIllegal", expectedExceptions = { PropertyException.class }) |
| | | public <T> void testLoadClassIllegal(String interfaceName, String loadClassName, Class<T> instanceOfClass, |
| | | Class<?> expectedClass) { |
| | | ClassPropertyDefinition.Builder localBuilder = ClassPropertyDefinition.createBuilder(RootCfgDefn.getInstance(), |
| | | "test-property"); |
| | | ClassPropertyDefinition.Builder localBuilder = createBuilder(RootCfgDefn.getInstance(), "test-property"); |
| | | localBuilder.addInstanceOf(interfaceName); |
| | | ClassPropertyDefinition propertyDef = localBuilder.getInstance(); |
| | | Class<?> clazz = propertyDef.loadClass(loadClassName, instanceOfClass); |
| | |
| | | ONE, TWO, THREE |
| | | } |
| | | |
| | | private EnumPropertyDefinition.Builder<TestEnum> builder = null; |
| | | private EnumPropertyDefinition.Builder<TestEnum> builder; |
| | | |
| | | @BeforeClass |
| | | public void setUp() { |
| | |
| | | @SuppressWarnings("javadoc") |
| | | public class ManagedObjectDefinitionI18NResourceTest extends ConfigTestCase { |
| | | |
| | | ManagedObjectDefinitionI18NResource definitionI18NResource = null; |
| | | private ManagedObjectDefinitionI18NResource definitionI18NResource; |
| | | |
| | | @BeforeClass |
| | | public void setUp() { |
| | |
| | | |
| | | private TestParentCfgDefn parentDefinition; |
| | | |
| | | private RelativeInheritedDefaultBehaviorProvider<Boolean> defaultBehaviorProvider = null; |
| | | private RelativeInheritedDefaultBehaviorProvider<Boolean> defaultBehaviorProvider; |
| | | |
| | | @BeforeClass |
| | | public void setUp() { |
| | |
| | | private static final String DUMMY_TEST_RELATION = "*dummy*test*relation*"; |
| | | |
| | | /** Indicates if the dummy relation profile has been registered. */ |
| | | private static boolean isProfileRegistered = false; |
| | | private static boolean isProfileRegistered; |
| | | |
| | | /** Prevent instantiation. */ |
| | | private AdminTestCaseUtils() { |
| | |
| | | * definition. |
| | | */ |
| | | private AggregationPropertyDefinition<ConnectionHandlerCfgClient, ConnectionHandlerCfg> |
| | | aggregationPropertyDefinitionDefault = null; |
| | | aggregationPropertyDefinitionDefault; |
| | | |
| | | /** |
| | | * An aggregation where the target must be enabled if the source is enabled. |
| | | */ |
| | | private AggregationPropertyDefinition<ConnectionHandlerCfgClient, ConnectionHandlerCfg> |
| | | aggregationPropertyDefinitionTargetAndSourceMustBeEnabled = null; |
| | | aggregationPropertyDefinitionTargetAndSourceMustBeEnabled; |
| | | |
| | | /** An aggregation where the target must be enabled. */ |
| | | private AggregationPropertyDefinition<ConnectionHandlerCfgClient, ConnectionHandlerCfg> |
| | | aggregationPropertyDefinitionTargetMustBeEnabled = null; |
| | | aggregationPropertyDefinitionTargetMustBeEnabled; |
| | | // @Checkstyle:on |
| | | |
| | | @BeforeClass |
| | |
| | | return new GetSymmetricKeyExtendedRequest(); |
| | | } |
| | | |
| | | private String requestSymmetricKey = null; |
| | | |
| | | private String instanceKeyID = null; |
| | | private String requestSymmetricKey; |
| | | private String instanceKeyID; |
| | | |
| | | /** Instantiation via factory. */ |
| | | private GetSymmetricKeyExtendedRequest() { |
| | | |
| | | } |
| | | |
| | | /** |
| | |
| | | */ |
| | | public final class Iterators { |
| | | private static final class ArrayIterator<M> implements Iterator<M> { |
| | | private int i = 0; |
| | | private int i; |
| | | private final M[] a; |
| | | |
| | | /** Constructed via factory methods. */ |
| | |
| | | |
| | | private boolean hasNextMustIterate = true; |
| | | private final Iterator<M> iterator; |
| | | private M next = null; |
| | | private M next; |
| | | |
| | | private final P parameter; |
| | | private final Predicate<? super M, P> predicate; |
| | |
| | | } |
| | | } |
| | | |
| | | private T instance = null; |
| | | private T instance; |
| | | private final Object lock = new Object(); |
| | | private int refCount = 0; |
| | | private int refCount; |
| | | |
| | | /** |
| | | * Creates a new referenced object whose reference count is initially zero. |
| | |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | private int state = ASN1.ELEMENT_READ_STATE_NEED_TYPE; |
| | | |
| | | private byte peekType = 0; |
| | | |
| | | private byte peekType; |
| | | private int peekLength = -1; |
| | | |
| | | private final int maxElementSize; |
| | | |
| | | private ByteSequenceReader reader; |
| | | |
| | | private final LinkedList<ByteSequenceReader> readerStack; |
| | | |
| | | /** |
| | |
| | | private static final LocalizedLogger logger = LocalizedLogger.getLoggerForThisClass(); |
| | | |
| | | private int state = ASN1.ELEMENT_READ_STATE_NEED_TYPE; |
| | | |
| | | private byte peekType = 0; |
| | | |
| | | private byte peekType; |
| | | private int peekLength = -1; |
| | | |
| | | private int lengthBytesNeeded = 0; |
| | | |
| | | private int lengthBytesNeeded; |
| | | private final int maxElementSize; |
| | | |
| | | private InputStream in; |
| | | |
| | | private final LinkedList<InputStream> streamStack; |
| | | |
| | | private byte[] buffer; |
| | | |
| | | /** |
| | |
| | | private final ByteString attributeValue; |
| | | |
| | | /** Cached normalized value using equality matching rule. */ |
| | | private ByteString equalityNormalizedAttributeValue = null; |
| | | private ByteString equalityNormalizedAttributeValue; |
| | | |
| | | /** Cached normalized value using ordering matching rule. */ |
| | | private ByteString orderingNormalizedAttributeValue = null; |
| | | private ByteString orderingNormalizedAttributeValue; |
| | | |
| | | /** |
| | | * Creates a new attribute value assertion (AVA) using the provided |
| | |
| | | /** |
| | | * Guarded by stateLock. |
| | | */ |
| | | private int offlineFactoriesCount = 0; |
| | | private int offlineFactoriesCount; |
| | | private final long monitoringInterval; |
| | | private final TimeUnit monitoringIntervalTimeUnit; |
| | | /** |
| | |
| | | */ |
| | | public final class AttributeFilter { |
| | | // TODO: exclude specific attributes, matched values, custom predicates, etc. |
| | | private boolean includeAllOperationalAttributes = false; |
| | | private boolean includeAllOperationalAttributes; |
| | | /** Depends on constructor. */ |
| | | private boolean includeAllUserAttributes; |
| | | private boolean typesOnly = false; |
| | | private boolean typesOnly; |
| | | |
| | | /** |
| | | * Use a map so that we can perform membership checks as well as recover the |
| | |
| | | public final class ByteSequenceReader { |
| | | |
| | | /** The current position in the byte sequence. */ |
| | | private int pos = 0; |
| | | private int pos; |
| | | |
| | | /** The underlying byte sequence. */ |
| | | private final ByteSequence sequence; |
| | |
| | | private final Connection connection; |
| | | private LdapException error; |
| | | private final AtomicBoolean isClosed = new AtomicBoolean(false); |
| | | private boolean isDisconnectNotification = false; |
| | | private List<ConnectionEventListener> listeners = null; |
| | | private boolean isDisconnectNotification; |
| | | private List<ConnectionEventListener> listeners; |
| | | private final Object stateLock = new Object(); |
| | | |
| | | PooledConnection(final Connection connection) { |
| | |
| | | private final FailureHandler<LdapException> connectionFailureHandler = new ConnectionFailureHandler(); |
| | | private final int corePoolSize; |
| | | private final ConnectionFactory factory; |
| | | private boolean isClosed = false; |
| | | private boolean isClosed; |
| | | private final ScheduledFuture<?> idleTimeoutFuture; |
| | | private final long idleTimeoutMillis; |
| | | private final int maxPoolSize; |
| | |
| | | * When true, attribute values are compared byte for byte, otherwise |
| | | * they are compared using their matching rules. |
| | | */ |
| | | private boolean useExactMatching = false; |
| | | private boolean useExactMatching; |
| | | |
| | | /** |
| | | * When greater than 0, modifications with REPLACE type will be |
| | |
| | | * "useReplaceMaxValues" attribute values. Otherwise, modifications with |
| | | * DELETE + ADD types will be generated. |
| | | */ |
| | | private int useReplaceMaxValues = 0; |
| | | private int useReplaceMaxValues; |
| | | |
| | | private DiffOptions() { |
| | | // Nothing to do. |
| | |
| | | }; |
| | | |
| | | private static final MultiValueImpl MULTI_VALUE_IMPL = new MultiValueImpl(); |
| | | |
| | | private static final SingleValueImpl SINGLE_VALUE_IMPL = new SingleValueImpl(); |
| | | |
| | | private static final ZeroValueImpl ZERO_VALUE_IMPL = new ZeroValueImpl(); |
| | | |
| | | private final AttributeDescription attributeDescription; |
| | | |
| | | private Map<ByteString, ByteString> multipleValues = null; |
| | | |
| | | private ByteString normalizedSingleValue = null; |
| | | |
| | | private Map<ByteString, ByteString> multipleValues; |
| | | private ByteString normalizedSingleValue; |
| | | private Impl pimpl = ZERO_VALUE_IMPL; |
| | | |
| | | private ByteString singleValue = null; |
| | | private ByteString singleValue; |
| | | |
| | | /** |
| | | * Creates a new attribute having the same attribute description and |
| | |
| | | } |
| | | |
| | | protected final H resultHandler; |
| | | |
| | | /** These should be notified when a cancel request arrives, at most once. */ |
| | | private List<CancelRequestListener> cancelRequestListeners = null; |
| | | |
| | | private LocalizableMessage cancelRequestReason = null; |
| | | |
| | | private List<CancelRequestListener> cancelRequestListeners; |
| | | private LocalizableMessage cancelRequestReason; |
| | | /** These should be notified when the result is set. */ |
| | | private List<ExtendedResultHandlerHolder<?>> cancelResultHandlers = null; |
| | | |
| | | private List<ExtendedResultHandlerHolder<?>> cancelResultHandlers; |
| | | private final ServerConnectionImpl clientConnection; |
| | | |
| | | private final boolean isCancelSupported; |
| | | |
| | | private final int messageID; |
| | | |
| | | private boolean sendResult = true; |
| | | |
| | | private RequestState state = RequestState.PENDING; |
| | | |
| | | /** Cancellation state guarded by lock. */ |
| | | private final Object stateLock = new Object(); |
| | | |
| | |
| | | */ |
| | | public static final String PROTOCOL_TLS1_1 = "TLSv1.1"; |
| | | |
| | | private TrustManager trustManager = null; |
| | | private KeyManager keyManager = null; |
| | | private TrustManager trustManager; |
| | | private KeyManager keyManager; |
| | | private String protocol = PROTOCOL_TLS1; |
| | | private SecureRandom random = null; |
| | | private SecureRandom random; |
| | | |
| | | /** These are mutually exclusive. */ |
| | | private Provider provider = null; |
| | | private String providerName = null; |
| | | private Provider provider; |
| | | private String providerName; |
| | | |
| | | /** |
| | | * Creates a new SSL context builder using default parameters. |
| | |
| | | /** |
| | | * Used to signal thread shutdown. |
| | | */ |
| | | private volatile boolean shutdownRequested = false; |
| | | private volatile boolean shutdownRequested; |
| | | |
| | | /** |
| | | * Contains the minimum delay for listeners which were added while the |
| | |
| | | |
| | | private final Map<String, String> additionalAuthParams = new LinkedHashMap<String, String>(); |
| | | private String authenticationID; |
| | | private String authorizationID = null; |
| | | private String authorizationID; |
| | | |
| | | private String cipher = null; |
| | | private Integer maxReceiveBufferSize = null; |
| | | private Integer maxSendBufferSize = null; |
| | | private String cipher; |
| | | private Integer maxReceiveBufferSize; |
| | | private Integer maxSendBufferSize; |
| | | private byte[] password; |
| | | private final List<String> qopValues = new LinkedList<String>(); |
| | | private String realm = null; |
| | | private String realm; |
| | | /** |
| | | * Do not use primitives for these so that we can distinguish between default |
| | | * settings (null) and values set by the caller. |
| | | */ |
| | | private Boolean serverAuth = null; |
| | | private Boolean serverAuth; |
| | | |
| | | DigestMD5SASLBindRequestImpl(final DigestMD5SASLBindRequest digestMD5SASLBindRequest) { |
| | | super(digestMD5SASLBindRequest); |
| | |
| | | } |
| | | } |
| | | |
| | | private String authorizationID = null; |
| | | private String authorizationID; |
| | | |
| | | ExternalSASLBindRequestImpl() { |
| | | // Nothing to do. |
| | |
| | | private final Map<String, String> additionalAuthParams = new LinkedHashMap<String, String>(); |
| | | |
| | | /** Ignored if subject is non-null. */ |
| | | private String authenticationID = null; |
| | | private String authenticationID; |
| | | /** Optional authorization ID. */ |
| | | private String authorizationID = null; |
| | | private String kdcAddress = null; |
| | | private String authorizationID; |
| | | private String kdcAddress; |
| | | |
| | | private Integer maxReceiveBufferSize = null; |
| | | private Integer maxReceiveBufferSize; |
| | | private Integer maxSendBufferSize; |
| | | |
| | | private Integer maxSendBufferSize = null; |
| | | |
| | | private byte[] password = null; |
| | | private byte[] password; |
| | | private final List<String> qopValues = new LinkedList<String>(); |
| | | |
| | | private String realm = null; |
| | | private String realm; |
| | | /** |
| | | * Don't use primitives for these so that we can distinguish between default |
| | | * settings (null) and values set by the caller. |
| | | */ |
| | | private Boolean serverAuth = null; |
| | | private Boolean serverAuth; |
| | | /** If null then authenticationID and password must be present. */ |
| | | private Subject subject = null; |
| | | private Subject subject; |
| | | |
| | | GSSAPISASLBindRequestImpl(final GSSAPISASLBindRequest gssapiSASLBindRequest) { |
| | | super(gssapiSASLBindRequest); |
| | |
| | | new GenericExtendedResultDecoder(); |
| | | |
| | | private String requestName; |
| | | private ByteString requestValue = null; |
| | | private ByteString requestValue; |
| | | |
| | | GenericExtendedRequestImpl(final GenericExtendedRequest genericExtendedRequest) { |
| | | super(genericExtendedRequest); |
| | |
| | | */ |
| | | final class ModifyDNRequestImpl extends AbstractRequestImpl<ModifyDNRequest> implements |
| | | ModifyDNRequest { |
| | | private boolean deleteOldRDN = false; |
| | | private boolean deleteOldRDN; |
| | | private DN name; |
| | | private RDN newRDN; |
| | | private DN newSuperior = null; |
| | | private DN newSuperior; |
| | | |
| | | ModifyDNRequestImpl(final DN name, final RDN newRDN) { |
| | | this.name = name; |
| | |
| | | * component in a password modify extended request. |
| | | */ |
| | | private static final byte TYPE_PASSWORD_MODIFY_USER_ID = (byte) 0x80; |
| | | private byte[] newPassword = null; |
| | | private byte[] oldPassword = null; |
| | | private byte[] newPassword; |
| | | private byte[] oldPassword; |
| | | |
| | | private ByteString userIdentity = null; |
| | | private ByteString userIdentity; |
| | | |
| | | /** Instantiation via factory. */ |
| | | PasswordModifyExtendedRequestImpl() { |
| | |
| | | private Filter filter; |
| | | private DN name; |
| | | private SearchScope scope; |
| | | private int sizeLimit = 0; |
| | | private int timeLimit = 0; |
| | | private boolean typesOnly = false; |
| | | private int sizeLimit; |
| | | private int timeLimit; |
| | | private boolean typesOnly; |
| | | |
| | | SearchRequestImpl(final DN name, final SearchScope scope, final Filter filter) { |
| | | this.name = name; |
| | |
| | | abstract class AbstractResultImpl<S extends Result> extends AbstractResponseImpl<S> implements |
| | | Result { |
| | | /** For local errors caused by internal exceptions. */ |
| | | private Throwable cause = null; |
| | | private Throwable cause; |
| | | private String diagnosticMessage = ""; |
| | | private String matchedDN = ""; |
| | | private final List<String> referralURIs = new LinkedList<String>(); |
| | |
| | | * Bind result implementation. |
| | | */ |
| | | final class BindResultImpl extends AbstractResultImpl<BindResult> implements BindResult { |
| | | private ByteString credentials = null; |
| | | private ByteString credentials; |
| | | |
| | | BindResultImpl(final BindResult bindResult) { |
| | | super(bindResult); |
| | |
| | | final class GenericExtendedResultImpl extends AbstractExtendedResult<GenericExtendedResult> |
| | | implements ExtendedResult, GenericExtendedResult { |
| | | |
| | | private String responseName = null; |
| | | private ByteString responseValue = null; |
| | | private String responseName; |
| | | private ByteString responseValue; |
| | | |
| | | GenericExtendedResultImpl(final GenericExtendedResult genericExtendedResult) { |
| | | super(genericExtendedResult); |
| | |
| | | AbstractIntermediateResponse<GenericIntermediateResponse> implements |
| | | GenericIntermediateResponse { |
| | | |
| | | private String responseName = null; |
| | | private ByteString responseValue = null; |
| | | private String responseName; |
| | | private ByteString responseValue; |
| | | |
| | | GenericIntermediateResponseImpl() { |
| | | // Nothing to do. |
| | |
| | | WhoAmIExtendedResult { |
| | | |
| | | /** The authorization ID. */ |
| | | private String authorizationID = null; |
| | | private String authorizationID; |
| | | |
| | | /** Instantiation via factory. */ |
| | | WhoAmIExtendedResultImpl(final ResultCode resultCode) { |
| | |
| | | private boolean needsValidating = true; |
| | | |
| | | /** The indicates whether or not validation failed. */ |
| | | private boolean isValid = false; |
| | | private boolean isValid; |
| | | |
| | | AttributeType(final String oid, final List<String> names, final String description, |
| | | final boolean obsolete, final String superiorType, final String equalityMatchingRule, |
| | |
| | | private boolean needsValidating = true; |
| | | |
| | | /** The indicates whether or not validation failed. */ |
| | | private boolean isValid = false; |
| | | private boolean isValid; |
| | | |
| | | DITStructureRule(final Integer ruleID, final List<String> names, final String description, |
| | | final boolean obsolete, final String nameFormOID, final Set<Integer> superiorRuleIDs, |
| | |
| | | public static final class Builder extends SchemaElementBuilder<Builder> { |
| | | private String oid; |
| | | private final List<String> names = new LinkedList<String>(); |
| | | private boolean isObsolete = false; |
| | | private boolean isObsolete; |
| | | private String syntaxOID; |
| | | private MatchingRuleImpl impl; |
| | | |
| | |
| | | * A fluent API for incrementally constructing name forms. |
| | | */ |
| | | public static final class Builder extends SchemaElementBuilder<Builder> { |
| | | private boolean isObsolete = false; |
| | | private boolean isObsolete; |
| | | private final List<String> names = new LinkedList<String>(); |
| | | private String oid; |
| | | private final Set<String> optionalAttributes = new LinkedHashSet<String>(); |
| | |
| | | private boolean needsValidating = true; |
| | | |
| | | /** The indicates whether or not validation failed. */ |
| | | private boolean isValid = false; |
| | | private boolean isValid; |
| | | |
| | | ObjectClass(final String oid, final List<String> names, final String description, |
| | | final boolean obsolete, final Set<String> superiorClassOIDs, |
| | |
| | | private Action requireSingleStructuralObjectClass = Action.REJECT; |
| | | private Action checkAttributesAndObjectClasses = Action.REJECT; |
| | | private Action checkAttributeValues = Action.REJECT; |
| | | private EntryResolver checkDITStructureRulesEntryResolver = null; |
| | | private EntryResolver checkDITStructureRulesEntryResolver; |
| | | |
| | | /** Prevent direct instantiation. */ |
| | | private SchemaValidationPolicy() { |
| | |
| | | * {@code true} if the connection has failed due to a disconnect |
| | | * notification. |
| | | */ |
| | | private boolean failedDueToDisconnect = false; |
| | | private boolean failedDueToDisconnect; |
| | | |
| | | /** |
| | | * Registered event listeners. |
| | |
| | | Schema schema = Schema.getDefaultSchema().asNonStrictSchema(); |
| | | SchemaValidationPolicy schemaValidationPolicy = SchemaValidationPolicy.ignoreAll(); |
| | | private final LDIFReaderImpl impl; |
| | | private long lineNumber = 0; |
| | | private long lineNumber; |
| | | |
| | | AbstractLDIFReader(final InputStream in) { |
| | | this(new InputStreamReader(in)); |
| | |
| | | final Set<AttributeDescription> excludeAttributes = new HashSet<AttributeDescription>(); |
| | | final Set<DN> excludeBranches = new HashSet<DN>(); |
| | | final List<Matcher> excludeFilters = new LinkedList<Matcher>(); |
| | | boolean excludeOperationalAttributes = false; |
| | | boolean excludeUserAttributes = false; |
| | | boolean excludeOperationalAttributes; |
| | | boolean excludeUserAttributes; |
| | | final Set<AttributeDescription> includeAttributes = new HashSet<AttributeDescription>(); |
| | | final Set<DN> includeBranches = new HashSet<DN>(); |
| | | final List<Matcher> includeFilters = new LinkedList<Matcher>(); |
| | |
| | | |
| | | /** Regular expression used for splitting comments on line-breaks. */ |
| | | private static final Pattern SPLIT_NEWLINE = Pattern.compile("\\r?\\n"); |
| | | boolean addUserFriendlyComments = false; |
| | | boolean addUserFriendlyComments; |
| | | final LDIFWriterImpl impl; |
| | | int wrapColumn = 0; |
| | | int wrapColumn; |
| | | private final StringBuilder builder = new StringBuilder(80); |
| | | |
| | | AbstractLDIFWriter(final List<String> ldifLines) { |
| | |
| | | */ |
| | | private static final class BufferHandler implements SearchResultHandler, ResultHandler<Result> { |
| | | private final BlockingQueue<Response> responses; |
| | | private volatile boolean isInterrupted = false; |
| | | private volatile boolean isInterrupted; |
| | | |
| | | private BufferHandler(final BlockingQueue<Response> responses) { |
| | | this.responses = responses; |
| | |
| | | |
| | | private final BufferHandler buffer; |
| | | private final LdapPromise<Result> promise; |
| | | private Response nextResponse = null; |
| | | private Response nextResponse; |
| | | |
| | | /** |
| | | * Creates a new connection entry reader whose destination is the provided |
| | |
| | | private final List<LocalizableMessage> warnings = new LinkedList<LocalizableMessage>(); |
| | | |
| | | /** Indicates if the generator is closed. */ |
| | | private boolean isClosed = false; |
| | | private boolean isClosed; |
| | | |
| | | /** Indicates if the generator is initialized, which means template file has been parsed. */ |
| | | private boolean isInitialized = false; |
| | | private boolean isInitialized; |
| | | |
| | | /** Random seed is used to generate random data. */ |
| | | private int randomSeed = DEFAULT_RANDOM_SEED; |
| | |
| | | } |
| | | } |
| | | |
| | | private ChangeRecord nextChangeRecord = null; |
| | | private ChangeRecord nextChangeRecord; |
| | | |
| | | /** |
| | | * Creates a new LDIF change record reader whose source is the provided |
| | |
| | | } |
| | | } |
| | | |
| | | private Entry nextEntry = null; |
| | | private Entry nextEntry; |
| | | |
| | | /** |
| | | * Creates a new LDIF entry reader whose source is the provided input |
| | |
| | | * Indicates whether the values should be selected sequentially or at |
| | | * random. |
| | | */ |
| | | private boolean isSequential = false; |
| | | private boolean isSequential; |
| | | |
| | | /** The index used for sequential access. */ |
| | | private int nextIndex; |
| | |
| | | |
| | | /** The mapping between entry DNs and the corresponding entries. */ |
| | | private final ConcurrentHashMap<DN, Entry> entryMap = new ConcurrentHashMap<DN, Entry>(); |
| | | |
| | | /** The LDAP listener. */ |
| | | private LDAPListener listener = null; |
| | | |
| | | private LDAPListener listener; |
| | | /** Whether the server is running. */ |
| | | private volatile boolean isRunning; |
| | | |
| | |
| | | private final CountDownLatch closedLatch = new CountDownLatch(1); |
| | | private final CountDownLatch errorLatch = new CountDownLatch(1); |
| | | private final CountDownLatch notificationLatch = new CountDownLatch(1); |
| | | private Boolean isDisconnectNotification = null; |
| | | private Boolean isDisconnectNotification; |
| | | private LdapException error; |
| | | private ExtendedResult notification = null; |
| | | private ExtendedResult notification; |
| | | private final AtomicInteger invocationCount = new AtomicInteger(); |
| | | |
| | | /** {@inheritDoc} */ |
| | |
| | | private final Callable<T> callable; |
| | | private final CountDownLatch isDone = new CountDownLatch(1); |
| | | private final boolean removeAfterCall; |
| | | private T result = null; |
| | | private T result; |
| | | |
| | | private ScheduledCallableFuture(final Callable<T> callable, final boolean removeAfterCall) { |
| | | this.callable = callable; |
| | |
| | | |
| | | private static final int MAX_STRING_BUFFER_SIZE = 1024; |
| | | private int state = ASN1.ELEMENT_READ_STATE_NEED_TYPE; |
| | | private byte peekType = 0; |
| | | private byte peekType; |
| | | private int peekLength = -1; |
| | | private int lengthBytesNeeded = 0; |
| | | private int lengthBytesNeeded; |
| | | private final int maxElementSize; |
| | | private final CompositeBuffer buffer; |
| | | private SequenceLimiter readLimiter; |
| | |
| | | private static final class ClientContextImpl implements LDAPClientContext { |
| | | private final Connection<?> connection; |
| | | private final AtomicBoolean isClosed = new AtomicBoolean(); |
| | | private ServerConnection<Integer> serverConnection = null; |
| | | private ServerConnection<Integer> serverConnection; |
| | | |
| | | private ClientContextImpl(final Connection<?> connection) { |
| | | this.connection = connection; |
| | |
| | | private static int port; |
| | | private static String bindDN; |
| | | private static String bindPassword; |
| | | private static boolean useStartTLS = false; |
| | | private static boolean useSSL = false; |
| | | private static boolean useStartTLS; |
| | | private static boolean useSSL; |
| | | private static String keystore; |
| | | private static String storepass; |
| | | |
| | |
| | | private AuthenticationMethod authenticationMethod = AuthenticationMethod.SEARCH_SIMPLE; |
| | | private ConnectionFactory bindLDAPConnectionFactory; |
| | | /** Indicates whether or not authentication should be performed. */ |
| | | private boolean isEnabled = false; |
| | | private boolean isEnabled; |
| | | private boolean reuseAuthenticatedConnection = true; |
| | | private String saslAuthzIdTemplate; |
| | | private final Schema schema = Schema.getDefaultSchema(); |
| | |
| | | AttributeMapper { |
| | | List<Object> defaultJSONValues = emptyList(); |
| | | final AttributeDescription ldapAttributeName; |
| | | private boolean isRequired = false; |
| | | private boolean isSingleValued = false; |
| | | private boolean isRequired; |
| | | private boolean isSingleValued; |
| | | private WritabilityPolicy writabilityPolicy = READ_WRITE; |
| | | |
| | | AbstractLDAPAttributeMapper(final AttributeDescription ldapAttributeName) { |
| | |
| | | private final Config config; |
| | | private final ServerContext context; |
| | | private Connection connection; |
| | | private Control proxiedAuthzControl = null; |
| | | private Control proxiedAuthzControl; |
| | | |
| | | Context(final Config config, final ServerContext context) { |
| | | this.config = config; |
| | |
| | | private static final int SEARCH_MAX_CANDIDATES = 1000; |
| | | |
| | | private final DN baseDN; |
| | | private Filter filter = null; |
| | | private Filter filter; |
| | | private final AttributeMapper mapper; |
| | | private final AttributeDescription primaryKey; |
| | | private SearchScope scope = SearchScope.WHOLE_SUBTREE; |
| | |
| | | */ |
| | | final class SetupLog { |
| | | |
| | | private static File logFile = null; |
| | | private static FileHandler fileHandler = null; |
| | | private static File logFile; |
| | | private static FileHandler fileHandler; |
| | | static final String LOGNAME = "setup.log"; |
| | | |
| | | private SetupLog() { |
| | |
| | | private RuntimeOptions importLdifRuntimeSettings; |
| | | private DataConfiguration dataConfiguration; |
| | | |
| | | private ReplicationConfiguration replicationConfiguration = null; |
| | | private ReplicationConfiguration replicationConfiguration; |
| | | |
| | | /** |
| | | * Returns the listener settings. |