From 2f3c74dbc436b2e2c8f2c29159d29df44149aa02 Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Fri, 13 Dec 2013 16:17:22 +0000
Subject: [PATCH] Fix OPENDJ-1223: Copy DataProvider PoC from branch to OpenDJ 3 trunk
---
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEventListener.java | 62 +
opendj-server3/src/main/java/org/forgerock/opendj/server/core/BackupConfig.java | 33
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderConnection.java | 159 ++++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderID.java | 154 ++++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/ExportableDataProvider.java | 61 +
opendj-server3/src/main/java/org/forgerock/opendj/server/core/ArchivableDataProvider.java | 100 ++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderCfg.java | 33
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEvent.java | 129 +++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/Privilege.java | 33
opendj-server3/pom.xml | 137 +++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/BindRequestContext.java | 55 +
opendj-server3/src/main/java/org/forgerock/opendj/server/core/AttachmentHolder.java | 80 ++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/package-info.java | 34
opendj-server3/src/site/xdoc/index.xml.vm | 108 +++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderStatus.java | 79 ++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/Attachment.java | 109 +++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProvider.java | 250 ++++++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderFactory.java | 91 ++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/RestoreConfig.java | 33
opendj-server3/src/main/java/org/forgerock/opendj/server/core/AbstractDataProvider.java | 138 +++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/Operation.java | 202 +++++
opendj-server3/src/main/java/org/forgerock/opendj/server/core/ImportableDataProvider.java | 69 +
22 files changed, 2,149 insertions(+), 0 deletions(-)
diff --git a/opendj-server3/pom.xml b/opendj-server3/pom.xml
new file mode 100644
index 0000000..c37f192
--- /dev/null
+++ b/opendj-server3/pom.xml
@@ -0,0 +1,137 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! CDDL HEADER START
+ !
+ ! The contents of this file are subject to the terms of the
+ ! Common Development and Distribution License, Version 1.0 only
+ ! (the "License"). You may not use this file except in compliance
+ ! with the License.
+ !
+ ! You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ ! or http://forgerock.org/license/CDDLv1.0.html.
+ ! See the License for the specific language governing permissions
+ ! and limitations under the License.
+ !
+ ! When distributing Covered Code, include this CDDL HEADER in each
+ ! file and include the License file at legal-notices/CDDLv1_0.txt.
+ ! If applicable, add the following below this CDDL HEADER, with the
+ ! fields enclosed by brackets "[]" replaced with your own identifying
+ ! information:
+ ! Portions Copyright [yyyy] [name of copyright owner]
+ !
+ ! CDDL HEADER END
+ !
+ ! Copyright 2013 ForgeRock AS
+ !
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <artifactId>opendj-project</artifactId>
+ <groupId>org.forgerock.opendj</groupId>
+ <version>3.0.0-SNAPSHOT</version>
+ </parent>
+ <artifactId>opendj-server3</artifactId>
+ <name>OpenDJ LDAP Directory Server</name>
+ <description>
+ This module includes the core functionality of the OpenDJ LDAP Directory Server.
+ </description>
+ <packaging>jar</packaging>
+ <dependencies>
+ <dependency>
+ <groupId>org.forgerock.opendj</groupId>
+ <artifactId>opendj-core</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.forgerock.opendj</groupId>
+ <artifactId>opendj-grizzly</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.forgerock.opendj</groupId>
+ <artifactId>opendj-admin</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.forgerock.commons</groupId>
+ <artifactId>forgerock-util</artifactId>
+ <version>1.2.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.forgerock.commons</groupId>
+ <artifactId>i18n-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.forgerock.opendj</groupId>
+ <artifactId>opendj-core</artifactId>
+ <type>test-jar</type>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.forgerock</groupId>
+ <artifactId>forgerock-build-tools</artifactId>
+ <version>${forgerockBuildToolsVersion}</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.forgerock.commons</groupId>
+ <artifactId>i18n-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <phase>generate-sources</phase>
+ <goals>
+ <goal>generate-messages</goal>
+ </goals>
+ <configuration>
+ <messageFiles>
+ <!-- <messageFile>com/forgerock/opendj/grizzly/grizzly.properties</messageFile> -->
+ </messageFiles>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-source-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+ <reporting>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-project-info-reports-plugin</artifactId>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>dependencies</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <links>
+ <link>http://commons.forgerock.org/i18n-framework/i18n-core/apidocs</link>
+ </links>
+ </configuration>
+ </plugin>
+ </plugins>
+ </reporting>
+</project>
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/AbstractDataProvider.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/AbstractDataProvider.java
new file mode 100644
index 0000000..59f88b0
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/AbstractDataProvider.java
@@ -0,0 +1,138 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008-2009 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import java.util.List;
+import java.util.Set;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.opendj.ldap.DN;
+import org.opends.server.types.DirectoryException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * This class provides a skeletal implementation of the {@link DataProvider}
+ * interface, to minimize the effort required to implement this interface.
+ */
+public abstract class AbstractDataProvider implements DataProvider {
+ private static final Logger debugLogger = LoggerFactory.getLogger(AbstractDataProvider.class);
+
+ // The list of event listeners associated with this data provider.
+ private final List<DataProviderEventListener> eventListeners =
+ new CopyOnWriteArrayList<DataProviderEventListener>();
+
+ /**
+ * Creates a new abstract data provider.
+ */
+ protected AbstractDataProvider() {
+ // No implementation required.
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * The default implementation is to invoke {@code getEntry(dn)} and return
+ * {@code true} if the entry was successfully retrieved.
+ */
+ @Override
+ public boolean containsEntry(final DN dn) throws DirectoryException {
+ return getEntry(dn) != null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final void deregisterEventListener(final DataProviderEventListener listener) {
+ eventListeners.remove(listener);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public final void registerEventListener(final DataProviderEventListener listener) {
+ eventListeners.add(listener);
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * The default implementation is to return false for all base DNs indicating
+ * that change notification is not supported.
+ */
+ @Override
+ public boolean supportsChangeNotification(final DN baseDN) throws DirectoryException {
+ return false;
+ }
+
+ /**
+ * Notify all event listeners that this data provider has changed state due
+ * to an operational error, configuration change, or an administrative
+ * action.
+ * <p>
+ * This method can be used to forward events to parent data providers.
+ *
+ * @param event
+ * The data provider event.
+ */
+ protected final void notifyDataProviderEventOccurred(final DataProviderEvent event) {
+ for (final DataProviderEventListener listener : eventListeners) {
+ try {
+ listener.handleDataProviderEvent(event);
+ } catch (final Exception e) {
+ debugLogger.trace("Unexpected error occurred while invoking listener", e);
+ }
+ }
+ }
+
+ /**
+ * Notify all event listeners that this data provider has changed state due
+ * to an operational error, configuration change, or an administrative
+ * action.
+ * <p>
+ * This method is equivalent to the following code:
+ *
+ * <pre>
+ * DataProviderEvent event = new DataProviderEvent(reason, types);
+ * notifyDataProviderStateChanged(event);
+ * </pre>
+ *
+ * @param reason
+ * A message describing this event.
+ * @param types
+ * The types of event that have occurred in the data provider.
+ */
+ protected final void notifyDataProviderEventOccurred(final LocalizableMessage reason,
+ final Set<DataProviderEvent.Type> types) {
+ final DataProviderEvent event = new DataProviderEvent(reason, types);
+ notifyDataProviderEventOccurred(event);
+ }
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ArchivableDataProvider.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ArchivableDataProvider.java
new file mode 100644
index 0000000..8fd1d8e
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ArchivableDataProvider.java
@@ -0,0 +1,100 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import org.forgerock.opendj.ldap.FutureResult;
+import org.forgerock.opendj.ldap.ResultHandler;
+
+/**
+ * A data provider which supports backup and restore functionality.
+ * <p>
+ * TODO: do we need supportsRestore?
+ * <p>
+ * TODO: do we need removeBackup?
+ * <p>
+ * TODO: is there any boiler plate code that abstracted in order to make
+ * implementation simpler? E.g. initialization, crypto.
+ * <p>
+ * FIXME: the async APIs used below are a bad fit. We do not want to return an
+ * ErrorResultException. We really need a more generic promises API.
+ */
+public interface ArchivableDataProvider {
+
+ /**
+ * Creates a backup of the contents of this data provider in a form that may
+ * be restored at a later date if necessary. This method should only be
+ * called if {@code supportsBackup} returns {@code true}.
+ * <p>
+ * Note that the server will not explicitly initialize this data provider
+ * before calling this method.
+ *
+ * @param backupConfig
+ * The configuration to use when performing the backup.
+ * @param handler
+ * A handler which will be notified when the backup completes.
+ * @return A future representing the completion of the backup.
+ */
+ FutureResult<Void> createBackup(BackupConfig backupConfig, ResultHandler<Void> handler);
+
+ /**
+ * Returns the ID of this data provider.
+ *
+ * @return The ID of this data provider.
+ */
+ DataProviderID getDataProviderID();
+
+ /**
+ * Restores a backup of the contents of this data provider.
+ * <p>
+ * Note that the server will not explicitly initialize this data provider
+ * before calling this method.
+ *
+ * @param restoreConfig
+ * The configuration to use when performing the restore.
+ * @param handler
+ * A handler which will be notified when the restore completes.
+ * @return A future representing the completion of the restore.
+ */
+ FutureResult<Void> restoreBackup(RestoreConfig restoreConfig, ResultHandler<Void> handler);
+
+ /**
+ * Indicates whether this data provider provides a mechanism to perform a
+ * backup of its contents in a form that can be restored later, based on the
+ * provided configuration.
+ *
+ * @param backupConfig
+ * The configuration of the backup for which to make the
+ * determination.
+ * @param unsupportedReason
+ * A buffer to which a message can be appended explaining why the
+ * requested backup is not supported.
+ * @return {@code true} if this data provider provides a mechanism for
+ * performing backups with the provided configuration, or
+ * {@code false} if not.
+ */
+ boolean supportsBackup(BackupConfig backupConfig, StringBuilder unsupportedReason);
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Attachment.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Attachment.java
new file mode 100644
index 0000000..6c5e453
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Attachment.java
@@ -0,0 +1,109 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2010 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.server.core;
+
+/**
+ * Class used to define dynamic typed attachments on {@link AttachmentHolder}
+ * instances. Storing attachment values in {@link AttachmentHolder} has the
+ * advantage of the <tt>Attachment</tt> value being typed when compared to Map
+ * storage:
+ *
+ * @param <T>
+ * The type of attachment.
+ */
+public final class Attachment<T> {
+ private final T defaultValue;
+ private final String name;
+
+ /**
+ * Construct a new attachment with the specified name and default value.
+ *
+ * @param name
+ * Attachment name.
+ * @param defaultValue
+ * Attachment default value, which will be used, if it is not
+ * set.
+ */
+ public Attachment(final String name, final T defaultValue) {
+ this.name = name;
+ this.defaultValue = defaultValue;
+ }
+
+ /**
+ * Retrieves the attachment value, stored on the {@link AttachmentHolder}.
+ *
+ * @param attachmentHolder
+ * {@link AttachmentHolder}.
+ * @return attachment value.
+ */
+ public T get(final AttachmentHolder attachmentHolder) {
+ T value = get0(attachmentHolder);
+ if (value == null) {
+ value = defaultValue;
+ }
+ return value;
+ }
+
+ /**
+ * Remove attachment value, stored on the {@link AttachmentHolder}.
+ *
+ * @param attachmentHolder
+ * {@link AttachmentHolder}.
+ * @return The former value or {@code null} if there was previously no
+ * value.
+ */
+ public T remove(final AttachmentHolder attachmentHolder) {
+ final T value = get0(attachmentHolder);
+ if (value != null) {
+ set(attachmentHolder, null);
+ }
+ return value;
+ }
+
+ /**
+ * Set attachment value, stored on the {@link AttachmentHolder}. If a value
+ * already exists, it will be replaced.
+ *
+ * @param attachmentHolder
+ * {@link AttachmentHolder}.
+ * @param value
+ * attachment value to set.
+ * @return The former value or {@code null} if there was previously no
+ * value.
+ */
+ public T set(final AttachmentHolder attachmentHolder, final T value) {
+ final T oldValue = get0(attachmentHolder);
+ attachmentHolder.setAttachment(name, value);
+ return oldValue;
+ }
+
+ @SuppressWarnings("unchecked")
+ private T get0(final AttachmentHolder attachmentHolder) {
+ return (T) attachmentHolder.getAttachment(name);
+ }
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/AttachmentHolder.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/AttachmentHolder.java
new file mode 100644
index 0000000..226f987
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/AttachmentHolder.java
@@ -0,0 +1,80 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2010 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.server.core;
+
+import java.util.Set;
+
+/**
+ * Interface declares common functionality for objects, which can store
+ * {@link Attachment}s.
+ */
+public interface AttachmentHolder {
+ /**
+ * Retrieves the attachment with the specified name.
+ *
+ * @param name
+ * The name for the attachment to retrieve. It will be treated in
+ * a case-sensitive manner.
+ * @return The requested attachment object, or {@code null} if it does not
+ * exist.
+ */
+ Object getAttachment(String name);
+
+ /**
+ * Retrieves the set of attachment names defined for this holder, as a
+ * mapping between the attachment name and the associated object.
+ *
+ * @return The set of attachments defined for this operation.
+ */
+ Set<String> getAttachmentNames();
+
+ /**
+ * Removes the attachment with the specified name.
+ *
+ * @param name
+ * The name for the attachment to remove. It will be treated in a
+ * case-sensitive manner.
+ * @return The attachment that was removed, or {@code null} if it does not
+ * exist.
+ */
+ Object removeAttachment(String name);
+
+ /**
+ * Sets the value of the specified attachment. If an attachment already
+ * exists with the same name, it will be replaced. Otherwise, a new
+ * attachment will be added.
+ *
+ * @param name
+ * The name to use for the attachment.
+ * @param value
+ * The value to use for the attachment.
+ * @return The former value held by the attachment with the given name, or
+ * {@code null} if there was previously no such attachment.
+ */
+ Object setAttachment(String name, Object value);
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/BackupConfig.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/BackupConfig.java
new file mode 100644
index 0000000..b1bd6f8
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/BackupConfig.java
@@ -0,0 +1,33 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+/**
+ * Configuration options for performing backups.
+ */
+public interface BackupConfig {
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/BindRequestContext.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/BindRequestContext.java
new file mode 100644
index 0000000..1a61ca1
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/BindRequestContext.java
@@ -0,0 +1,55 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2010 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.server.core;
+
+import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.requests.BindRequest;
+
+/**
+ * The bind request context allows for updating the authentication state of the
+ * connection.
+ */
+public interface BindRequestContext extends Operation {
+
+ /**
+ * Specifies information about the authentication that has been performed
+ * for this connection.
+ *
+ * @param bindRequest
+ * The bind request the client used for authentication.
+ * @param authenticationEntry
+ * The entry for the user as whom the client is authenticated, or
+ * {@code null} if the client is unauthenticated.
+ * @param authorizationEntry
+ * The entry for the user that should be considered the
+ * authorization identity for this client, or {@code null} if it
+ * should be the unauthenticated user.
+ */
+ void setAuthenticationInfo(BindRequest bindRequest, Entry authenticationEntry,
+ Entry authorizationEntry);
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProvider.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProvider.java
new file mode 100644
index 0000000..20d6bf9
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProvider.java
@@ -0,0 +1,250 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008-2009 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import java.util.Set;
+
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.RequestHandler;
+import org.opends.server.types.DirectoryException;
+
+/**
+ * An entry container which provides the content of one or more sub-trees.
+ * <p>
+ * A data provider can be:
+ * <ul>
+ * <li>a simple data source such as a local back-end, a remote LDAP server or a
+ * local LDIF file.
+ * <li>used to route operations. This is the case for load balancing and
+ * distribution.
+ * <li>combine and transform data from underlying data providers. For example,
+ * DN mapping, attribute renaming, attribute value transformations, etc.
+ * </ul>
+ * Data providers operate in two states:
+ * <ul>
+ * <li>initialized
+ * <li>accepting requests
+ * </ul>
+ * Data providers are created in the <i>initialized</i> state. In this state a
+ * data provider has validated its configuration and registered support for
+ * off-line services such as export, import, backup, and restore if available.
+ * <p>
+ * A data provider transitions to the <i>accepting requests</i> state when the
+ * {@link #startDataProvider()} method is invoked. In this state a data provider
+ * has acquired any remaining resources that it needs in order to be fully
+ * operational. This may include connections to underlying data providers. See
+ * the documentation for {@link #startDataProvider()} for more information.
+ * <p>
+ * A data provider transitions back to the <i>initialized</i> state using the
+ * {@link #stopDataProvider()} method. This occurs when the data provider is no
+ * longer needed in order process client requests, but may still be needed in
+ * order to perform off-line services such as import, export, backup, and
+ * restore.
+ * <p>
+ * If data provider is disabled or deleted from the server configuration or if
+ * the server is shutdown, then the {@link #finalizeDataProvider()} method is
+ * invoked. This method should ensure that the data provider is stopped and no
+ * longer available for off-line services such as import, export, backup, and
+ * restore.
+ */
+public interface DataProvider extends RequestHandler<Operation> {
+
+ /**
+ * Indicates whether this data provider contains the specified entry.
+ *
+ * @param dn
+ * The DN of the entry.
+ * @return {@code true} if this data provider contains the specified entry,
+ * or {@code false} if it does not.
+ * @throws DirectoryException
+ * If a problem occurs while trying to make the determination,
+ * or if {@code dn} is not a DN equal to or subordinate to one
+ * of the base DNs managed by this data provider.
+ */
+ boolean containsEntry(DN dn) throws DirectoryException;
+
+ /**
+ * Deregisters an event listener from this data provider.
+ *
+ * @param listener
+ * The event listener.
+ */
+ void deregisterEventListener(DataProviderEventListener listener);
+
+ /**
+ * Performs any necessary work to finalize this data provider. This may
+ * include closing any connections to underlying data providers, databases,
+ * and deregistering any listeners, etc.
+ * <p>
+ * This method may be called during the Directory Server shutdown process or
+ * if a data provider is disabled with the server online. It must not return
+ * until this data provider is finalized.
+ * <p>
+ * Implementations should assume that this data provider has already been
+ * stopped using {@link #stopDataProvider()}.
+ * <p>
+ * Implementations must deregister any listeners such as those required for
+ * performing import, export, backup, and restore.
+ * <p>
+ * Implementations must not throw any exceptions. If any problems are
+ * encountered, then they may be logged but the closure should progress as
+ * completely as possible.
+ */
+ void finalizeDataProvider();
+
+ /**
+ * Returns an unmodifiable set containing the base DNs of the sub-trees
+ * which this data provider contains.
+ *
+ * @return An unmodifiable set containing the base DNs of the sub-trees
+ * which this data provider contains.
+ */
+ Set<DN> getBaseDNs();
+
+ /**
+ * Retrieves the specified entry from this data provider.
+ *
+ * @param dn
+ * The DN of the entry.
+ * @return The requested entry, or {@code null} if this data provider does
+ * not contain the specified entry.
+ * @throws DirectoryException
+ * If a problem occurs while trying to retrieve the entry, or if
+ * {@code dn} is not a DN equal to or subordinate to one of the
+ * base DNs managed by this data provider.
+ */
+ Entry getEntry(DN dn) throws DirectoryException;
+
+ /**
+ * Returns the current status of the provided base DN in this data provider.
+ *
+ * @param baseDN
+ * The base DN in this data provider.
+ * @return The current status of the provided base DN in this data provider.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by this
+ * data provider.
+ */
+ DataProviderStatus getStatus(DN baseDN) throws DirectoryException;
+
+ /**
+ * Returns an unmodifiable set containing the OIDs of the controls that may
+ * be supported by the provided base DN in this data provider.
+ *
+ * @param baseDN
+ * The base DN in this data provider.
+ * @return An unmodifiable set containing the OIDs of the controls that may
+ * be supported by the provided base DN in this data provider.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by this
+ * data provider.
+ */
+ Set<String> getSupportedControls(DN baseDN) throws DirectoryException;
+
+ /**
+ * Returns an unmodifiable set containing the OIDs of the features that may
+ * be supported by the provided base DN in this data provider.
+ *
+ * @param baseDN
+ * The base DN in this data provider.
+ * @return An unmodifiable set containing the OIDs of the features that may
+ * be supported by the provided base DN in this data provider.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by this
+ * data provider.
+ */
+ Set<String> getSupportedFeatures(DN baseDN) throws DirectoryException;
+
+ /**
+ * Registers an event listener with this data provider.
+ *
+ * @param listener
+ * The event listener.
+ */
+ void registerEventListener(DataProviderEventListener listener);
+
+ /**
+ * Starts this data provider so that it is ready to process client requests.
+ * This method is called immediately before the first data provider
+ * connection is opened.
+ * <p>
+ * Implementations must acquire any remaining resources in order to make
+ * this data provider fully operational. This may include any of the
+ * following:
+ * <ul>
+ * <li>connections to other data providers
+ * <li>connections to remote databases
+ * <li>connections to remote servers
+ * <li>opening local databases and files
+ * <li>pre-loading databases.
+ * </ul>
+ * Implementations must perform all required work synchronously such that,
+ * on return, this data provider is fully operational.
+ */
+ void startDataProvider();
+
+ /**
+ * Performs any necessary work to stop this data provider. This includes
+ * closing any connections to underlying data providers, databases, etc.
+ * <p>
+ * This method is called immediately after the last data provider connection
+ * is closed. It must not return until this data provider is stopped.
+ * <p>
+ * Implementations must release all resources acquired when this data
+ * provider was started. This includes:
+ * <ul>
+ * <li>connections to other data providers
+ * <li>connections to remote databases
+ * <li>connections to remote servers
+ * <li>closing local databases and files.
+ * </ul>
+ * Implementations must not deregister this data provider or any associated
+ * listeners such as those required for performing import, export, backup,
+ * and restore.
+ * <p>
+ * Implementations must not throw any exceptions. If any problems are
+ * encountered, then they may be logged but the shutdown should progress as
+ * completely as possible.
+ */
+ void stopDataProvider();
+
+ /**
+ * Indicates whether or not the provided base DN in this data provider
+ * supports change notification.
+ *
+ * @param baseDN
+ * The base DN in this data provider.
+ * @return {@code true} if the provided base DN in this data provider
+ * supports change notification.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by this
+ * data provider.
+ */
+ boolean supportsChangeNotification(DN baseDN) throws DirectoryException;
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderCfg.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderCfg.java
new file mode 100644
index 0000000..7e50d21
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderCfg.java
@@ -0,0 +1,33 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+/**
+ * This will be generated by the config framework.
+ */
+public interface DataProviderCfg {
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderConnection.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderConnection.java
new file mode 100644
index 0000000..b502776
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderConnection.java
@@ -0,0 +1,159 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008-2009 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import java.util.Set;
+
+import org.forgerock.opendj.ldap.DN;
+import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.RequestHandler;
+import org.opends.server.types.DirectoryException;
+
+/**
+ * A connection to a data provider. When a connection is no longer needed it
+ * must be closed.
+ */
+public interface DataProviderConnection extends RequestHandler<Operation> {
+
+ /**
+ * Closes this data provider connection. When this method returns the
+ * connection can no longer be used.
+ */
+ void close();
+
+ /**
+ * Indicates whether the underlying data provider contains the specified
+ * entry.
+ *
+ * @param dn
+ * The DN of the entry.
+ * @return {@code true} if the underlying data provider contains the
+ * specified entry, or {@code false} if it does not.
+ * @throws DirectoryException
+ * If a problem occurs while trying to make the determination,
+ * or if {@code dn} is not a DN equal to or subordinate to one
+ * of the base DNs managed by the underlying data provider.
+ */
+ boolean containsEntry(DN dn) throws DirectoryException;
+
+ /**
+ * Deregisters an event listener from the underlying data provider.
+ *
+ * @param listener
+ * The event listener.
+ */
+ void deregisterEventListener(DataProviderEventListener listener);
+
+ /**
+ * Returns an unmodifiable set containing the base DNs of the sub-trees
+ * which the underlying data provider contains.
+ *
+ * @return An unmodifiable set containing the base DNs of the sub-trees
+ * which the underlying data provider contains.
+ */
+ Set<DN> getBaseDNs();
+
+ /**
+ * Retrieves the specified entry from the underlying data provider.
+ *
+ * @param dn
+ * The DN of the entry.
+ * @return The requested entry, or {@code null} if the underlying data
+ * provider does not contain the specified entry.
+ * @throws DirectoryException
+ * If a problem occurs while trying to retrieve the entry, or if
+ * {@code dn} is not a DN equal to or subordinate to one of the
+ * base DNs managed by the underlying data provider.
+ */
+ Entry getEntry(DN dn) throws DirectoryException;
+
+ /**
+ * Returns the current status of the provided base DN in the underlying data
+ * provider.
+ *
+ * @param baseDN
+ * The base DN in the underlying data provider.
+ * @return The current status of the provided base DN in the underlying data
+ * provider.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by the
+ * underlying data provider.
+ */
+ DataProviderStatus getStatus(DN baseDN) throws DirectoryException;
+
+ /**
+ * Returns an unmodifiable set containing the OIDs of the controls that may
+ * be supported by the provided base DN in the underlying data provider.
+ *
+ * @param baseDN
+ * The base DN in the underlying data provider.
+ * @return An unmodifiable set containing the OIDs of the controls that may
+ * be supported by the provided base DN in the underlying data
+ * provider.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by the
+ * underlying data provider.
+ */
+ Set<String> getSupportedControls(DN baseDN) throws DirectoryException;
+
+ /**
+ * Returns an unmodifiable set containing the OIDs of the features that may
+ * be supported by the provided base DN in the underlying data provider.
+ *
+ * @param baseDN
+ * The base DN in the underlying data provider.
+ * @return An unmodifiable set containing the OIDs of the features that may
+ * be supported by the provided base DN in the underlying data
+ * provider.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by the
+ * underlying data provider.
+ */
+ Set<String> getSupportedFeatures(DN baseDN) throws DirectoryException;
+
+ /**
+ * Registers an event listener with the underlying data provider.
+ *
+ * @param listener
+ * The event listener.
+ */
+ void registerEventListener(DataProviderEventListener listener);
+
+ /**
+ * Indicates whether or not the provided base DN in the underlying data
+ * provider supports change notification.
+ *
+ * @param baseDN
+ * The base DN in the underlying data provider.
+ * @return {@code true} if the provided base DN in the underlying data
+ * provider supports change notification.
+ * @throws DirectoryException
+ * If {@code baseDN} is not one of the base DNs managed by the
+ * underlying data provider.
+ */
+ boolean supportsChangeNotification(DN baseDN) throws DirectoryException;
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEvent.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEvent.java
new file mode 100644
index 0000000..a3fa387
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEvent.java
@@ -0,0 +1,129 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Set;
+
+import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.util.Reject;
+
+/**
+ * An object that provides information about the source of a data provider
+ * related event. {@code DataProviderEvent} objects are generated when a data
+ * provider experiences an operational error or a state change resulting from
+ * configuration updates or administrative actions.
+ * <p>
+ * TODO: what else should this contain?
+ */
+public final class DataProviderEvent {
+
+ /**
+ * Indicates the type of event that has occurred in the data provider.
+ */
+ public static enum Type {
+ /**
+ * The data provider's access mode has changed.
+ */
+ ACCESS_MODE,
+
+ /**
+ * The data provider's set of base DNs has changed.
+ */
+ BASE_DNS,
+
+ /**
+ * The data provider's set of supported controls has changed.
+ */
+ SUPPORTED_CONTROLS,
+
+ /**
+ * The data provider's set of supported features has changed.
+ */
+ SUPPORTED_FEATURES;
+ }
+
+ // A message describing this event.
+ private final LocalizableMessage reason;
+
+ // the types of event that have occurred in the data provider.
+ private final Set<Type> types;
+
+ /**
+ * Creates a new data provider event.
+ *
+ * @param reason
+ * A message describing this event.
+ * @param types
+ * The types of event that have occurred in the data provider.
+ */
+ public DataProviderEvent(final LocalizableMessage reason, final Set<Type> types) {
+ Reject.ifNull(reason);
+ Reject.ifNull(types);
+ Reject.ifTrue(types.isEmpty());
+
+ this.reason = reason;
+
+ final EnumSet<Type> tmp = EnumSet.noneOf(Type.class);
+ for (final Type type : types) {
+ tmp.add(type);
+ }
+ this.types = Collections.unmodifiableSet(tmp);
+ }
+
+ /**
+ * Returns an unmodifiable set containing the types of event that have
+ * occurred in the data provider.
+ *
+ * @return The unmodifiable set containing the types of event that have
+ * occurred in the data provider.
+ */
+ public Set<Type> getEventTypes() {
+ return types;
+ }
+
+ /**
+ * Returns a message describing this event.
+ *
+ * @return A message describing this event.
+ */
+ public LocalizableMessage getReason() {
+ return reason;
+ }
+
+ /**
+ * Returns a string describing this event.
+ *
+ * @return A string describing this event.
+ */
+ @Override
+ public String toString() {
+ return reason.toString();
+ }
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEventListener.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEventListener.java
new file mode 100644
index 0000000..f558b83
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderEventListener.java
@@ -0,0 +1,62 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008-2009 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+/**
+ * An object that registers to be notified of events generated by a
+ * {@link DataProviderConnection} object. Data provider events may be triggered
+ * as a result of:
+ * <ul>
+ * <li>The data provider connection being closed.
+ * <li>An operational error. For example, a proxy data provider might lose
+ * connectivity with the remote server.
+ * <li>A configuration change. For example, a data provider may be disabled, or
+ * have a new base DN added.
+ * <li>An administrative action. For example, a data provider may be temporarily
+ * disabled during an import or restore from backup.
+ * </ul>
+ * In the case of configuration changes, the data provider will only notify its
+ * listeners once the configuration change has been applied. If a listener
+ * wishes to validate configuration changes before they are applied to a data
+ * provider then the listener should use the registration methods provided by
+ * {@code DataProviderCfg}.
+ */
+public interface DataProviderEventListener {
+
+ /**
+ * The data provider has changed state due to an operational error,
+ * configuration change, or an administrative action.
+ * <p>
+ * Implementations should examine the provided {@link DataProviderEvent} in
+ * order to determine how the data provider has changed.
+ *
+ * @param event
+ * The data provider event.
+ */
+ void handleDataProviderEvent(DataProviderEvent event);
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderFactory.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderFactory.java
new file mode 100644
index 0000000..b19b477
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderFactory.java
@@ -0,0 +1,91 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import java.util.List;
+
+import org.forgerock.i18n.LocalizableMessage;
+import org.opends.server.config.ConfigException;
+import org.opends.server.types.InitializationException;
+
+/**
+ * A factory for creating data provider instances.
+ *
+ * @param <T>
+ * The type of configuration handled by this data provider.
+ * @see DataProvider
+ */
+public interface DataProviderFactory<T extends DataProviderCfg> {
+
+ /**
+ * Creates and initializes a new data provider based on the information in
+ * the provided configuration.
+ * <p>
+ * Implementations must not start any services nor attempt to connect to
+ * other data providers. However, they may register with the backup/restore
+ * and import/export managers.
+ *
+ * @param id
+ * The ID which should be used to uniquely identify this data
+ * provider.
+ * @param configuration
+ * The configuration that contains the information to use to
+ * create and initialize the new data provider.
+ * @return The new data provider instance.
+ * @throws ConfigException
+ * If an unrecoverable problem arises during initialization of
+ * the data provider as a result of the server configuration.
+ * @throws InitializationException
+ * If a problem occurs during initialization of the data
+ * provider that is not related to the server configuration.
+ * @see DataProvider#startDataProvider()
+ */
+ DataProvider createDataProvider(DataProviderID id, T configuration) throws ConfigException,
+ InitializationException;
+
+ /**
+ * Indicates whether the provided configuration is acceptable for creating
+ * and initializing a new data provider using this data provider factory.
+ * <p>
+ * This method will be called before
+ * {@link #createDataProvider(DataProviderID, DataProviderCfg)} in order
+ * validate the configuration.
+ * <p>
+ * Implementations should perform basic validation of the configuration but
+ * should not attempt to start any resource or connect to other data
+ * providers.
+ *
+ * @param configuration
+ * The configuration for which to make the determination.
+ * @param unacceptableReasons
+ * A list that may be used to hold the reasons that the provided
+ * configuration is not acceptable.
+ * @return {@code true} if the provided configuration is acceptable for this
+ * data provider factory, or {@code false} if not.
+ */
+ boolean isConfigurationAcceptable(T configuration, List<LocalizableMessage> unacceptableReasons);
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderID.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderID.java
new file mode 100644
index 0000000..ae6d661
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderID.java
@@ -0,0 +1,154 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import java.util.Locale;
+
+/**
+ * A unique ID which can be used for identifying data providers.
+ * <p>
+ * There are two types of data provider:
+ * <ul>
+ * <li><b>User configured</b>: these are data providers which have been defined
+ * using the server's configuration.
+ * <li><b>Internal</b>: these are data providers which have been created
+ * internally.
+ * </ul>
+ */
+public final class DataProviderID implements Comparable<DataProviderID> {
+
+ /**
+ * Creates a new ID for an internal data provider.
+ *
+ * @param name
+ * The name of the internal data provider.
+ * @return The new data provider ID.
+ */
+ public static DataProviderID newInternalID(final String name) {
+ return new DataProviderID(name, true /* internal */);
+ }
+
+ /**
+ * Creates a new ID for a user configured data provider.
+ *
+ * @param name
+ * The name of the user configured data provider.
+ * @return The new data provider ID.
+ */
+ public static DataProviderID newUserID(final String name) {
+ return new DataProviderID(name, false /* user */);
+ }
+
+ // Flag indicating whether or not this ID represents an internal
+ // data provider.
+ private final boolean isInternal;
+
+ // The data provider name.
+ private final String name;
+
+ // The normalized name.
+ private final String normalizedName;
+
+ // Prevent direct instantiation.
+ private DataProviderID(final String name, final boolean isInternal) {
+ this.name = name;
+ this.normalizedName = name.trim().toLowerCase(Locale.ENGLISH);
+ this.isInternal = isInternal;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int compareTo(final DataProviderID o) {
+ if (isInternal != o.isInternal) {
+ // Internal data providers sort last.
+ return isInternal ? 1 : -1;
+ } else {
+ return normalizedName.compareTo(o.normalizedName);
+ }
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public boolean equals(final Object obj) {
+ if (this == obj) {
+ return true;
+ } else if (obj instanceof DataProviderID) {
+ final DataProviderID other = (DataProviderID) obj;
+ if (isInternal != other.isInternal) {
+ return false;
+ } else {
+ return normalizedName.equals(other.normalizedName);
+ }
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * Returns the data provider name associated with this data provider ID.
+ *
+ * @return The data provider name associated with this data provider ID.
+ */
+ public String getName() {
+ return name;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public int hashCode() {
+ return normalizedName.hashCode();
+ }
+
+ /**
+ * Indicating whether or not this ID represents an internal data provider.
+ *
+ * @return <code>true</code> if this ID represents an internal data
+ * provider.
+ */
+ public boolean isInternal() {
+ return isInternal;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ if (isInternal) {
+ return "__" + name;
+ } else {
+ return name;
+ }
+ }
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderStatus.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderStatus.java
new file mode 100644
index 0000000..fc2ae6e
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/DataProviderStatus.java
@@ -0,0 +1,79 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+/**
+ * The status of a data provider. A data provider may be enabled, disabled, or
+ * providing a restricted service.
+ */
+public enum DataProviderStatus {
+ /**
+ * The data provider is disabled and rejecting all operations.
+ */
+ DISABLED("disabled"),
+
+ /**
+ * The data provider is enabled and accepting all operations.
+ */
+ ENABLED("enabled"),
+
+ /**
+ * The data provider is only accepting read operations; all write operations
+ * will be rejected.
+ */
+ READ_ONLY("read-only"),
+
+ /**
+ * The data provider is accepting read operations, internal write
+ * operations, and updates through synchronization; all other write
+ * operations will be rejected.
+ */
+ WRITE_INTERNAL_ONLY("write-internal-only");
+
+ // The human-readable name for this status.
+ private String name;
+
+ /**
+ * Creates a new data provider status with the provided name.
+ *
+ * @param name
+ * The human-readable name for this status.
+ */
+ private DataProviderStatus(final String name) {
+ this.name = name;
+ }
+
+ /**
+ * Retrieves a string representation of this status.
+ *
+ * @return A string representation of this status.
+ */
+ @Override
+ public String toString() {
+ return name;
+ }
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ExportableDataProvider.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ExportableDataProvider.java
new file mode 100644
index 0000000..00c5c36
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ExportableDataProvider.java
@@ -0,0 +1,61 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import org.forgerock.opendj.ldap.FutureResult;
+import org.forgerock.opendj.ldap.ResultHandler;
+import org.forgerock.opendj.ldif.EntryWriter;
+
+/**
+ * A data provider which supports LDIF export functionality.
+ * <p>
+ * FIXME: the async APIs used below are a bad fit. We do not want to return an
+ * ErrorResultException. We really need a more generic promises API.
+ */
+public interface ExportableDataProvider {
+
+ /**
+ * Exports the contents of this data provider to the provided entry writer.
+ * <p>
+ * Note that the server will not explicitly initialize this data provider
+ * before calling this method.
+ *
+ * @param writer
+ * The entry writer.
+ * @param handler
+ * A handler which will be notified when the export completes.
+ * @return A future representing the completion of the export.
+ */
+ FutureResult<Void> exportEntries(EntryWriter writer, ResultHandler<Void> handler);
+
+ /**
+ * Returns the ID of this data provider.
+ *
+ * @return The ID of this data provider.
+ */
+ DataProviderID getDataProviderID();
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ImportableDataProvider.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ImportableDataProvider.java
new file mode 100644
index 0000000..08f4916
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/ImportableDataProvider.java
@@ -0,0 +1,69 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+import org.forgerock.opendj.ldap.FutureResult;
+import org.forgerock.opendj.ldap.ResultHandler;
+import org.forgerock.opendj.ldif.EntryReader;
+
+/**
+ * A data provider which supports LDIF import functionality.
+ * <p>
+ * FIXME: the async APIs used below are a bad fit. We do not want to return an
+ * ErrorResultException. We really need a more generic promises API.
+ * <p>
+ * FIXME: it would be nice if we can use EntryReader, however we may need to
+ * provide an optimized implementation for use in multi-threaded imports. E.g.
+ * performing DN checking as early as possible before doing schema validation.
+ * <p>
+ * FIXME: import allows you to append, merge, replace entries. Do we need to
+ * expose that here?
+ */
+public interface ImportableDataProvider {
+
+ /**
+ * Returns the ID of this data provider.
+ *
+ * @return The ID of this data provider.
+ */
+ DataProviderID getDataProviderID();
+
+ /**
+ * Imports the contents of this data provider from the provided entry
+ * reader.
+ * <p>
+ * Note that the server will not explicitly initialize this data provider
+ * before calling this method.
+ *
+ * @param reader
+ * The entry reader.
+ * @param handler
+ * A handler which will be notified when the import completes.
+ * @return A future representing the completion of the import.
+ */
+ FutureResult<Void> importEntries(EntryReader reader, ResultHandler<Void> handler);
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Operation.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Operation.java
new file mode 100644
index 0000000..a453f88
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Operation.java
@@ -0,0 +1,202 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+
+package org.forgerock.opendj.server.core;
+
+import java.net.InetSocketAddress;
+import java.util.Collection;
+
+import org.forgerock.opendj.ldap.Connection;
+import org.forgerock.opendj.ldap.Entry;
+import org.forgerock.opendj.ldap.RequestContext;
+import org.forgerock.opendj.ldap.requests.BindRequest;
+
+/**
+ * The context in which a request is to be processed.
+ * <p>
+ * Implementations may query the context in order to:
+ * <ul>
+ * <li>query the schema associated with the request (attribute types, decode
+ * DNs, etc)
+ * <li>perform internal operations
+ * <li>query information regarding client performing the request
+ * </ul>
+ * Context implementations take care of correctly routing internal requests.
+ * <p>
+ * In addition, the context acts as a transaction manager, coordinating any
+ * resources accessed during the processing of a request and any subsequent
+ * requests forming part of the same logical transaction.
+ * <p>
+ * FiXME: this interface should be split up into sub-components, such as network
+ * information (protocol, addresses), client information (auth ID, SSF,
+ * privileges).
+ */
+public interface Operation extends RequestContext, AttachmentHolder {
+ /**
+ * Retrieves the entry for the user that should be considered the
+ * authorization identity for this operation. In many cases, it will be the
+ * same as the authorization entry for the underlying client connection, or
+ * {@code null} if no authentication has been performed on that connection.
+ * However, it may be some other value if special processing has been
+ * requested (e.g., the operation included a proxied authorization control).
+ *
+ * @return The entry for the user that should be considered the
+ * authorization identity for this operation, or {@code null} if the
+ * authorization identity should be the unauthenticated user.
+ */
+ public Entry getAuthorizationEntry();
+
+ /**
+ * Returns a connection for performing internal operations.
+ *
+ * @return A connection for performing internal operations.
+ */
+ public Connection getConnection();
+
+ /**
+ * Retrieves the operation ID for this operation.
+ *
+ * @return The operation ID for this operation.
+ */
+ public long getOperationID();
+
+ /**
+ * Indicates whether the authenticate client has all of the specified
+ * privileges.
+ *
+ * @param privileges
+ * The array of privileges for which to make the determination.
+ * @return {@code true} if the authenticated client has all of the specified
+ * privileges, or {@code false} if not.
+ */
+ public boolean hasAllPrivileges(Collection<Privilege> privileges);
+
+ /**
+ * Indicates whether the authenticated client has the specified privilege.
+ *
+ * @param privilege
+ * The privilege for which to make the determination.
+ * @return {@code true} if the authenticated client has the specified
+ * privilege, or {@code false} if not.
+ */
+ public boolean hasPrivilege(Privilege privilege);
+
+ /**
+ * Sets the entry for the user that should be considered the authorization
+ * identity for this operation.
+ *
+ * @param authorizationEntry
+ * The entry for the user that should be considered the
+ * authorization identity for this operation, or {@code null} if
+ * it should be the unauthenticated user.
+ */
+ public void setAuthorizationEntry(Entry authorizationEntry);
+
+ /**
+ * Retrieves the entry for the user as whom the client is authenticated.
+ *
+ * @return The entry for the user as whom the client is authenticated, or
+ * {@code null} if the client is unauthenticated.
+ */
+ Entry getAuthenticationEntry();
+
+ /**
+ * Retrieves the last successful bind request from the client.
+ *
+ * @return The last successful bind request or {@code null} if the client
+ * have not yet successfully bind.
+ */
+ BindRequest getBindRequest();
+
+ /**
+ * Retrieves the unique identifier that is assigned to the client connection
+ * that submitted this operation.
+ *
+ * @return The unique identifier that is assigned to the client connection
+ * that submitted this operation.
+ */
+ long getConnectionID();
+
+ /**
+ * Returns the {@code InetSocketAddress} associated with the local system.
+ *
+ * @return The {@code InetSocketAddress} associated with the local system.
+ */
+ InetSocketAddress getLocalAddress();
+
+ /**
+ * Retrieves the default maximum number of entries that should checked for
+ * matches during a search.
+ *
+ * @return The default maximum number of entries that should checked for
+ * matches during a search.
+ */
+ int getLookthroughLimit();
+
+ /**
+ * Returns the {@code InetSocketAddress} associated with the remote system.
+ *
+ * @return The {@code InetSocketAddress} associated with the remote system.
+ */
+ InetSocketAddress getPeerAddress();
+
+ /**
+ * Retrieves the protocol that the client is using to communicate with the
+ * Directory Server.
+ *
+ * @return The protocol that the client is using to communicate with the
+ * Directory Server.
+ */
+ String getProtocol();
+
+ /**
+ * Returns the strongest cipher strength currently in use by the underlying
+ * connection.
+ *
+ * @return The strongest cipher strength currently in use by the underlying
+ * connection.
+ */
+ int getSecurityStrengthFactor();
+
+ /**
+ * Retrieves the size limit that will be enforced for searches performed
+ * using this client connection.
+ *
+ * @return The size limit that will be enforced for searches performed using
+ * this client connection.
+ */
+ int getSizeLimit();
+
+ /**
+ * Retrieves the time limit that will be enforced for searches performed
+ * using this client connection.
+ *
+ * @return The time limit that will be enforced for searches performed using
+ * this client connection.
+ */
+ int getTimeLimit();
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Privilege.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Privilege.java
new file mode 100644
index 0000000..bc13639
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/Privilege.java
@@ -0,0 +1,33 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+/**
+ * TODO: User privilege.
+ */
+public interface Privilege {
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/RestoreConfig.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/RestoreConfig.java
new file mode 100644
index 0000000..5add780
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/RestoreConfig.java
@@ -0,0 +1,33 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2013 ForgeRock AS.
+ */
+package org.forgerock.opendj.server.core;
+
+/**
+ * Configuration options for restoring backups.
+ */
+public interface RestoreConfig {
+
+}
diff --git a/opendj-server3/src/main/java/org/forgerock/opendj/server/core/package-info.java b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/package-info.java
new file mode 100644
index 0000000..5bdc87e
--- /dev/null
+++ b/opendj-server3/src/main/java/org/forgerock/opendj/server/core/package-info.java
@@ -0,0 +1,34 @@
+/*
+* CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License, Version 1.0 only
+ * (the "License"). You may not use this file except in compliance
+ * with the License.
+ *
+ * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
+ * or http://forgerock.org/license/CDDLv1.0.html.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at legal-notices/CDDLv1_0.txt.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information:
+ * Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ *
+ * Copyright 2006-2008 Sun Microsystems, Inc.
+ * Portions copyright 2013 ForgeRock AS.
+ */
+
+/**
+ * Contains APIs for new DataProvider design. This is work in
+ * progress. On completion, this package will be removed and
+ * classes put in their appropriate locations.
+ */
+package org.forgerock.opendj.server.core;
+
diff --git a/opendj-server3/src/site/xdoc/index.xml.vm b/opendj-server3/src/site/xdoc/index.xml.vm
new file mode 100644
index 0000000..7d88718
--- /dev/null
+++ b/opendj-server3/src/site/xdoc/index.xml.vm
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ! CCPL HEADER START
+ !
+ ! This work is licensed under the Creative Commons
+ ! Attribution-NonCommercial-NoDerivs 3.0 Unported License.
+ ! To view a copy of this license, visit
+ ! http://creativecommons.org/licenses/by-nc-nd/3.0/
+ ! or send a letter to Creative Commons, 444 Castro Street,
+ ! Suite 900, Mountain View, California, 94041, USA.
+ !
+ ! You can also obtain a copy of the license at
+ ! trunk/opendj3/legal-notices/CC-BY-NC-ND.txt.
+ ! See the License for the specific language governing permissions
+ ! and limitations under the License.
+ !
+ ! If applicable, add the following below this CCPL HEADER, with the fields
+ ! enclosed by brackets "[]" replaced with your own identifying information:
+ ! Portions Copyright [yyyy] [name of copyright owner]
+ !
+ ! CCPL HEADER END
+ !
+ ! Copyright 2013 ForgeRock AS
+ !
+-->
+<document xmlns="http://maven.apache.org/XDOC/2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/XDOC/2.0 http://maven.apache.org/xsd/xdoc-2.0.xsd">
+ <properties>
+ <title>About ${project.name}</title>
+ <author email="opendj-dev@forgerock.org">${project.organization.name}</author>
+ </properties>
+ <body>
+ <section name="About ${project.name}">
+ <p>
+ ${project.description}
+ </p>
+ </section>
+ <section name="Documentation for ${project.name}">
+ <p>
+ Javadoc for this module can be found <a href="apidocs/index.html">here</a>.
+ </p>
+ </section>
+ <section name="Get ${project.name}">
+ <p>
+ Start developing your applications by obtaining ${project.name}
+ using any of the following methods:
+ </p>
+ <subsection name="Maven">
+ <p>
+ By far the simplest method is to develop your application using Maven
+ and add the following settings to your <b>pom.xml</b>:
+ </p>
+ <source><repositories>
+ <repository>
+ <id>forgerock-staging-repository</id>
+ <name>ForgeRock Release Repository</name>
+ <url>${mavenRepoReleases}</url>
+ <snapshots>
+ <enabled>false</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>forgerock-snapshots-repository</id>
+ <name>ForgeRock Snapshot Repository</name>
+ <url>${mavenRepoSnapshots}</url>
+ <releases>
+ <enabled>false</enabled>
+ </releases>
+ </repository>
+</repositories>
+
+...
+
+<dependencies>
+ <dependency>
+ <groupId>${project.groupId}</groupId>
+ <artifactId>${project.artifactId}</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+</dependencies></source>
+ </subsection>
+ <subsection name="Download">
+ <p>
+ If you are not using Maven then you will need to download a pre-built
+ binary from the ForgeRock Maven repository, along with any compile
+ time <a href="dependencies.html">dependencies</a>:
+ </p>
+ <ul>
+ <li><a href="${mavenRepoReleases}/org/forgerock/opendj/${project.artifactId}">Stable releases</a></li>
+ <li><a href="${mavenRepoSnapshots}/org/forgerock/opendj/${project.artifactId}/${project.version}">Latest development snapshot</a></li>
+ </ul>
+ </subsection>
+ <subsection name="Build">
+ <p>
+ For the DIY enthusiasts you can build it yourself by checking out the
+ latest code using <a href="source-repository.html">Subversion</a>
+ and building it with Maven 3.
+ </p>
+ </subsection>
+ </section>
+ <section name="Getting started">
+ <p>
+ The following example shows how ${project.name} may be used:
+ </p>
+ <source>TODO</source>
+ </section>
+ </body>
+</document>
--
Gitblit v1.10.0