You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by am...@apache.org on 2021/08/27 11:15:52 UTC

[ignite-3] 02/02: Move SchemaBuilders to ignite-api.

This is an automated email from the ASF dual-hosted git repository.

amashenkov pushed a commit to branch ignite-15382
in repository https://gitbox.apache.org/repos/asf/ignite-3.git

commit 6d63b682f10287a4b462e8adb251c9dbe344b347
Author: Andrew Mashenkov <an...@gmail.com>
AuthorDate: Fri Aug 27 14:15:37 2021 +0300

    Move SchemaBuilders to ignite-api.
---
 .../org/apache/ignite/schema/SchemaBuilders.java   | 94 ++++++++++++++++++----
 modules/schema/pom.xml                             |  9 +++
 .../schema/builder/SchemaBuilderFactoryImpl.java   | 71 ++++++++++++++++
 ...nite.schema.SchemaBuilders$SchemaBuilderFactory |  1 +
 4 files changed, 160 insertions(+), 15 deletions(-)

diff --git a/modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java b/modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
similarity index 53%
rename from modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
rename to modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
index fa806c0..de90628 100644
--- a/modules/schema/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
+++ b/modules/api/src/main/java/org/apache/ignite/schema/SchemaBuilders.java
@@ -17,12 +17,8 @@
 
 package org.apache.ignite.schema;
 
-import org.apache.ignite.internal.schema.builder.HashIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.PartialIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.PrimaryKeyBuilderImpl;
-import org.apache.ignite.internal.schema.builder.SchemaTableBuilderImpl;
-import org.apache.ignite.internal.schema.builder.SortedIndexBuilderImpl;
-import org.apache.ignite.internal.schema.builder.TableColumnBuilderImpl;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
 import org.apache.ignite.schema.builder.HashIndexBuilder;
 import org.apache.ignite.schema.builder.PartialIndexBuilder;
 import org.apache.ignite.schema.builder.PrimaryIndexBuilder;
@@ -34,6 +30,11 @@ import org.apache.ignite.schema.builder.TableColumnBuilder;
  * Schema builder helper.
  */
 public final class SchemaBuilders {
+    /** Default factory. */
+    private static SchemaBuilderFactory FACTORY = ServiceLoader.load(SchemaBuilderFactory.class)
+                                       .findFirst()
+                                       .orElseThrow(() -> new ServiceConfigurationError("Failed to locate SchemaBuilderFactory."));
+
     /**
      * Create table descriptor from classes.
      *
@@ -44,9 +45,7 @@ public final class SchemaBuilders {
      * @return Table descriptor for given key-value pair.
      */
     public static SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass) {
-        // TODO IGNITE-13749: implement schema generation from classes.
-
-        return null;
+        return FACTORY.buildSchema(schemaName, tableName, keyClass, valueClass);
     }
 
     /**
@@ -57,7 +56,7 @@ public final class SchemaBuilders {
      * @return Table descriptor builder.
      */
     public static SchemaTableBuilder tableBuilder(String schemaName, String tableName) {
-        return new SchemaTableBuilderImpl(schemaName, tableName);
+        return FACTORY.tableBuilder(schemaName, tableName);
     }
 
     /**
@@ -68,7 +67,7 @@ public final class SchemaBuilders {
      * @return Column builder.
      */
     public static TableColumnBuilder column(String name, ColumnType type) {
-        return new TableColumnBuilderImpl(name, type);
+        return FACTORY.column(name, type);
     }
 
     /**
@@ -77,7 +76,7 @@ public final class SchemaBuilders {
      * @return Primary index builder.
      */
     public static PrimaryIndexBuilder pkIndex() {
-        return new PrimaryKeyBuilderImpl();
+        return FACTORY.pkIndex();
     }
 
     /**
@@ -87,7 +86,7 @@ public final class SchemaBuilders {
      * @return Sorted index builder.
      */
     public static SortedIndexBuilder sortedIndex(String name) {
-        return new SortedIndexBuilderImpl(name);
+        return FACTORY.sortedIndex(name);
     }
 
     /**
@@ -97,7 +96,7 @@ public final class SchemaBuilders {
      * @return Partial index builder.
      */
     public static PartialIndexBuilder partialIndex(String name) {
-        return new PartialIndexBuilderImpl(name);
+        return FACTORY.partialIndex(name);
     }
 
     /**
@@ -107,10 +106,75 @@ public final class SchemaBuilders {
      * @return Hash index builder.
      */
     public static HashIndexBuilder hashIndex(String name) {
-        return new HashIndexBuilderImpl(name);
+        return FACTORY.hashIndex(name);
     }
 
     // Stub.
     private SchemaBuilders() {
     }
+
+    /**
+     * Schema builders factory service interface.
+     */
+    public static interface SchemaBuilderFactory {
+         /**
+         * Create table descriptor from classes.
+         *
+         * @param schemaName Schema name.
+         * @param tableName Table name.
+         * @param keyClass Key class.
+         * @param valueClass Value class.
+         * @return Table descriptor for given key-value pair.
+         */
+        SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass);
+
+        /**
+         * Creates table descriptor builder.
+         *
+         * @param schemaName Schema name.
+         * @param tableName Table name.
+         * @return Table descriptor builder.
+         */
+        SchemaTableBuilder tableBuilder(String schemaName, String tableName);
+
+        /**
+         * Creates table column builder.
+         *
+         * @param name Column name.
+         * @param type Column type.
+         * @return Column builder.
+         */
+        TableColumnBuilder column(String name, ColumnType type);
+
+        /**
+         * Creates primary index builder.
+         *
+         * @return Primary index builder.
+         */
+        PrimaryIndexBuilder pkIndex();
+
+        /**
+         * Creates sorted index builder.
+         *
+         * @param name Index name.
+         * @return Sorted index builder.
+         */
+        SortedIndexBuilder sortedIndex(String name);
+
+        /**
+         * Creates partial index builder.
+         *
+         * @param name Index name.
+         * @return Partial index builder.
+         */
+        PartialIndexBuilder partialIndex(String name);
+
+        /**
+         * Creates hash index builder.
+         *
+         * @param name Index name.
+         * @return Hash index builder.
+         */
+        HashIndexBuilder hashIndex(String name);
+    }
 }
diff --git a/modules/schema/pom.xml b/modules/schema/pom.xml
index 783b5f0..e2ece51 100644
--- a/modules/schema/pom.xml
+++ b/modules/schema/pom.xml
@@ -105,4 +105,13 @@
             <scope>test</scope>
         </dependency>
     </dependencies>
+
+    <build>
+        <resources>
+            <resource>
+                <directory>src/main/resources</directory>
+                <filtering>true</filtering>
+            </resource>
+        </resources>
+    </build>
 </project>
diff --git a/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java b/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java
new file mode 100644
index 0000000..e1a5ed1
--- /dev/null
+++ b/modules/schema/src/main/java/org/apache/ignite/internal/schema/builder/SchemaBuilderFactoryImpl.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.schema.builder;
+
+import org.apache.ignite.schema.ColumnType;
+import org.apache.ignite.schema.SchemaBuilders;
+import org.apache.ignite.schema.SchemaTable;
+import org.apache.ignite.schema.builder.HashIndexBuilder;
+import org.apache.ignite.schema.builder.PartialIndexBuilder;
+import org.apache.ignite.schema.builder.PrimaryIndexBuilder;
+import org.apache.ignite.schema.builder.SchemaTableBuilder;
+import org.apache.ignite.schema.builder.SortedIndexBuilder;
+import org.apache.ignite.schema.builder.TableColumnBuilder;
+
+/**
+ * Schema builders factory service implementation.
+ */
+public class SchemaBuilderFactoryImpl implements SchemaBuilders.SchemaBuilderFactory {
+
+    /** {@inheritDoc} */
+    @Override public SchemaTable buildSchema(String schemaName, String tableName, Class<?> keyClass, Class<?> valueClass) {
+        // TODO IGNITE-13749: implement schema generation from classes.
+
+        throw new UnsupportedOperationException("Not implemented yet: IGNITE-13749");
+    }
+
+    /** {@inheritDoc} */
+    @Override public SchemaTableBuilder tableBuilder(String schemaName, String tableName) {
+        return new SchemaTableBuilderImpl(schemaName, tableName);
+    }
+
+    /** {@inheritDoc} */
+    @Override public TableColumnBuilder column(String name, ColumnType type) {
+        return new TableColumnBuilderImpl(name, type);
+    }
+
+    /** {@inheritDoc} */
+    @Override public PrimaryIndexBuilder pkIndex() {
+        return new PrimaryKeyBuilderImpl();
+    }
+
+    /** {@inheritDoc} */
+    @Override public SortedIndexBuilder sortedIndex(String name) {
+        return new SortedIndexBuilderImpl(name);
+    }
+
+    /** {@inheritDoc} */
+    @Override public PartialIndexBuilder partialIndex(String name) {
+        return new PartialIndexBuilderImpl(name);
+    }
+
+    /** {@inheritDoc} */
+    @Override public HashIndexBuilder hashIndex(String name) {
+        return new HashIndexBuilderImpl(name);
+    }
+}
diff --git a/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory
new file mode 100644
index 0000000..f04201a
--- /dev/null
+++ b/modules/schema/src/main/resources/META-INF/services/org.apache.ignite.schema.SchemaBuilders$SchemaBuilderFactory
@@ -0,0 +1 @@
+org.apache.ignite.internal.schema.builder.SchemaBuilderFactoryImpl
\ No newline at end of file