From e977578c32f2a1d1c5104e2707ab8cda8335793f Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Wed, 17 Dec 2014 10:31:22 +0000
Subject: [PATCH] Move SPI interfaces to separate package.
---
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Importer.java | 41 ++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadOperation.java | 32 +++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/StorageRuntimeException.java | 47 +++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java | 40 ++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadableStorage.java | 41 ++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java | 42 +++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java | 48 +++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteOperation.java | 32 +++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Cursor.java | 52 +++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/TreeName.java | 123 +++++++++++++
opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/package-info.java | 33 +++
11 files changed, 523 insertions(+), 8 deletions(-)
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
index 1abbddc..b4b9a95 100644
--- a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/persistit/PersistItStorage.java
@@ -1,3 +1,29 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
package org.opends.server.backends.persistit;
import java.io.File;
@@ -11,14 +37,14 @@
import org.forgerock.opendj.ldap.ByteSequence;
import org.forgerock.opendj.ldap.ByteString;
import org.opends.server.admin.std.server.LocalDBBackendCfg;
-import org.opends.server.backends.pluggable.BackendImpl.Cursor;
-import org.opends.server.backends.pluggable.BackendImpl.Importer;
-import org.opends.server.backends.pluggable.BackendImpl.ReadOperation;
-import org.opends.server.backends.pluggable.BackendImpl.Storage;
-import org.opends.server.backends.pluggable.BackendImpl.StorageRuntimeException;
-import org.opends.server.backends.pluggable.BackendImpl.TreeName;
-import org.opends.server.backends.pluggable.BackendImpl.WriteOperation;
-import org.opends.server.backends.pluggable.BackendImpl.WriteableStorage;
+import org.opends.server.backends.pluggable.spi.Cursor;
+import org.opends.server.backends.pluggable.spi.Importer;
+import org.opends.server.backends.pluggable.spi.ReadOperation;
+import org.opends.server.backends.pluggable.spi.Storage;
+import org.opends.server.backends.pluggable.spi.StorageRuntimeException;
+import org.opends.server.backends.pluggable.spi.TreeName;
+import org.opends.server.backends.pluggable.spi.WriteOperation;
+import org.opends.server.backends.pluggable.spi.WriteableStorage;
import org.opends.server.types.DN;
import com.persistit.Exchange;
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Cursor.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Cursor.java
new file mode 100644
index 0000000..6e67586
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Cursor.java
@@ -0,0 +1,52 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+import java.io.Closeable;
+
+import org.forgerock.opendj.ldap.ByteSequence;
+import org.forgerock.opendj.ldap.ByteString;
+
+public interface Cursor extends Closeable
+{
+ boolean positionToKey(ByteSequence key);
+
+ boolean positionToKeyOrNext(ByteSequence key);
+
+ boolean positionToLastKey();
+
+ boolean next();
+
+ boolean previous();
+
+ ByteString getKey();
+
+ ByteString getValue();
+
+ @Override
+ public void close();
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Importer.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Importer.java
new file mode 100644
index 0000000..f2df235
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Importer.java
@@ -0,0 +1,41 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+import java.io.Closeable;
+
+import org.forgerock.opendj.ldap.ByteSequence;
+
+public interface Importer extends Closeable
+{
+ void createTree(TreeName name);
+
+ void put(TreeName name, ByteSequence key, ByteSequence value);
+
+ @Override
+ void close();
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadOperation.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadOperation.java
new file mode 100644
index 0000000..9d9fd6c
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadOperation.java
@@ -0,0 +1,32 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+public interface ReadOperation<T>
+{
+ T run(ReadableStorage txn) throws Exception;
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadableStorage.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadableStorage.java
new file mode 100644
index 0000000..f9aa703
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/ReadableStorage.java
@@ -0,0 +1,41 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+import org.forgerock.opendj.ldap.ByteSequence;
+import org.forgerock.opendj.ldap.ByteString;
+
+public interface ReadableStorage
+{
+ ByteString get(TreeName name, ByteSequence key);
+
+ ByteString getRMW(TreeName name, ByteSequence key);
+
+ Cursor openCursor(TreeName name);
+
+ // TODO: contains, etc.
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java
new file mode 100644
index 0000000..d954134
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/Storage.java
@@ -0,0 +1,48 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+import java.io.Closeable;
+import java.util.Map;
+
+public interface Storage extends Closeable
+{
+ void initialize(Map<String, String> options) throws Exception;
+
+ Importer startImport() throws Exception;
+
+ void open() throws Exception;
+
+ <T> T read(ReadOperation<T> readTransaction) throws Exception;
+
+ void write(WriteOperation updateTransaction) throws Exception;
+
+ Cursor openCursor(TreeName name);
+
+ @Override
+ void close();
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/StorageRuntimeException.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/StorageRuntimeException.java
new file mode 100644
index 0000000..963b2d0
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/StorageRuntimeException.java
@@ -0,0 +1,47 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+@SuppressWarnings("serial")
+public final class StorageRuntimeException extends RuntimeException
+{
+
+ public StorageRuntimeException(final String message)
+ {
+ super(message);
+ }
+
+ public StorageRuntimeException(final String message, final Throwable cause)
+ {
+ super(message, cause);
+ }
+
+ public StorageRuntimeException(final Throwable cause)
+ {
+ super(cause);
+ }
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/TreeName.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/TreeName.java
new file mode 100644
index 0000000..d872ee9
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/TreeName.java
@@ -0,0 +1,123 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+/** Assumes name components don't contain a '/'. */
+public final class TreeName
+{
+ public static TreeName of(final String... names)
+ {
+ return new TreeName(Arrays.asList(names));
+ }
+
+ private final List<String> names;
+ private final String s;
+
+ public TreeName(final List<String> names)
+ {
+ this.names = names;
+ final StringBuilder builder = new StringBuilder();
+ for (final String name : names)
+ {
+ builder.append('/');
+ builder.append(name);
+ }
+ this.s = builder.toString();
+ }
+
+ public List<String> getNames()
+ {
+ return names;
+ }
+
+ public TreeName child(final String name)
+ {
+ final List<String> newNames = new ArrayList<String>(names.size() + 1);
+ newNames.addAll(names);
+ newNames.add(name);
+ return new TreeName(newNames);
+ }
+
+ public TreeName getSuffix()
+ {
+ if (names.size() == 0)
+ {
+ throw new IllegalStateException();
+ }
+ return new TreeName(Collections.singletonList(names.get(0)));
+ }
+
+ public boolean isSuffixOf(TreeName tree)
+ {
+ if (names.size() > tree.names.size())
+ {
+ return false;
+ }
+ for (int i = 0; i < names.size(); i++)
+ {
+ if (!tree.names.get(i).equals(names.get(i)))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ @Override
+ public boolean equals(final Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ else if (obj instanceof TreeName)
+ {
+ return s.equals(((TreeName) obj).s);
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return s.hashCode();
+ }
+
+ @Override
+ public String toString()
+ {
+ return s;
+ }
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteOperation.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteOperation.java
new file mode 100644
index 0000000..e99b1a2
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteOperation.java
@@ -0,0 +1,32 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+public interface WriteOperation
+{
+ void run(WriteableStorage txn) throws Exception;
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java
new file mode 100644
index 0000000..1c3beb6
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/WriteableStorage.java
@@ -0,0 +1,40 @@
+/*
+ * 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 2014 ForgeRock AS
+ */
+
+package org.opends.server.backends.pluggable.spi;
+
+import org.forgerock.opendj.ldap.ByteSequence;
+
+public interface WriteableStorage extends ReadableStorage
+{
+ void openTree(TreeName name);
+
+ void put(TreeName name, ByteSequence key, ByteSequence value);
+
+ boolean putIfAbsent(TreeName treeName, ByteSequence key, ByteSequence value);
+
+ boolean remove(TreeName name, ByteSequence key);
+}
\ No newline at end of file
diff --git a/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/package-info.java b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/package-info.java
new file mode 100644
index 0000000..351e87c
--- /dev/null
+++ b/opendj-sdk/opendj3-server-dev/src/server/org/opends/server/backends/pluggable/spi/package-info.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 2014 ForgeRock AS
+ */
+
+/**
+ * Interfaces and classes required when implementing new storage
+ * engines for the pluggable backend.
+ */
+@org.opends.server.types.PublicAPI(
+ stability=org.opends.server.types.StabilityLevel.PRIVATE)
+package org.opends.server.backends.pluggable.spi;
--
Gitblit v1.10.0