joshelser commented on a change in pull request #347: ACCUMULO-4746 Fluent API
for Mutation
URL: https://github.com/apache/accumulo/pull/347#discussion_r161012818
##########
File path: core/src/main/java/org/apache/accumulo/core/data/Mutation.java
##########
@@ -772,6 +772,474 @@ public void putDelete(byte[] columnFamily, byte[]
columnQualifier, ColumnVisibil
put(columnFamily, columnQualifier, columnVisibility.getExpression(), true,
timestamp, true, EMPTY_BYTES);
}
+ /**
+ * Fluent API for Mutation
+ *
+ * <p>
+ * Each step of the Mutation is represented by an interface. Inheritance
hierarchy ensures that chained methods follow prescribed order of: family,
qualifier,
+ * visibility, timestamp.
+ *
+ * <p>
+ * Methods are optional, meaning that one or may be omitted within a chain.
+ *
+ * <p>
+ * Set and delete methods end the chain and finalize the mutation by filling
Mutation's UnsynchronizedBuffer.
+ */
+
+ /**
+ * Provides methods for setting the column family of a Mutation. The user
can provide the family name as a byte array, CharSequence, ByteBuffer, or Text
+ * object instance and the backend will do the necessary transformation.
+ *
+ * All FamilyStep methods return an instance derived from the QualifierStep
interface, allowing the methods to be semantically chained.
+ *
+ * @since 2.0
+ */
+ public interface FamilyStep extends QualifierStep {
+ QualifierStep family(byte[] colFam);
+
+ QualifierStep family(ByteBuffer colFam);
+
+ QualifierStep family(CharSequence colFam);
+
+ QualifierStep family(Text colFam);
+ }
+
+ /**
+ * Provides methods for setting the column qualifier of a Mutation. The user
can provide the qualifier name as a byte array, CharSequence, ByteBuffer, or
Text
+ * object instance and the backend will do the necessary transformation.
+ *
+ * All QualifierStep methods return an instance derived from the
VisibilityStep interface, allowing the methods to be semantically chained.
+ *
+ * @since 2.0
+ */
+ public interface QualifierStep extends VisibilityStep {
+ VisibilityStep qualifier(byte[] colQual);
+
+ VisibilityStep qualifier(ByteBuffer colQual);
+
+ VisibilityStep qualifier(CharSequence colQual);
+
+ VisibilityStep qualifier(Text colQual);
+ }
+
+ /**
+ * Provides methods for setting the column visibility of a Mutation. The
user can provide the visibility as a byte array or
+ * {@link org.apache.accumulo.core.security.ColumnVisibility} object
instance and the backend will do the necessary transformation.
+ *
+ * All QualifierStep methods return an instance derived from the
VisibilityStep interface, allowing the methods to be semantically chained.
+ *
+ * @since 2.0
+ */
+ public interface VisibilityStep extends TimestampStep {
+ TimestampStep visibility(byte[] colVis);
+
+ TimestampStep visibility(ByteBuffer colVis);
+
+ TimestampStep visibility(CharSequence colVis);
+
+ TimestampStep visibility(ColumnVisibility colVis);
+
+ TimestampStep visibility(Text colVis);
+ }
+
+ /**
+ * Provides methods for setting the timestamp of a Mutation. The user must
provide the timestamp as a long.
+ *
+ * All TimestampStep methods return an instance derived from the
MutationStep interface, allowing the methods to be semantically chained.
+ *
+ * @since 2.0
+ */
+ public interface TimestampStep extends MutationStep {
+ MutationStep timestamp(long ts);
+ }
+
+ /**
+ * Provides methods for setting the value of a Mutation. The user can
provide the value as a byte array, Value, or ByteBuffer object instance and the
backend
+ * will do the necessary transformation.
+ *
+ * All MutationStep methods complete a fluent Mutation API method chain.
+ *
+ * @since 2.0
+ */
+ public interface MutationStep {
+ Mutation set(byte[] val);
+
+ Mutation set(ByteBuffer val);
+
+ Mutation set(CharSequence val);
+
+ Mutation set(Text val);
+
+ Mutation set(Value val);
+
+ Mutation delete();
+ }
+
+ /**
+ * Returns a new FamilyStep object allowing the user to define changes to
the Mutation.
+ *
+ * @return a new FamilyStep object, advancing the method chain
+ * @since 2.0
+ */
+ public FamilyStep at() {
Review comment:
I'm also curious about this choice of name (after seeing some of the other
suggestions from the JIRA comments).
`add()` was the first thing I thought of. But, Mutation is essentially a map
of "column updates" for a row. `put()` may make more sense (aligning with the
underlying implementation -- for multiple updates to the same column in a
Mutation, I think the last update would "win").
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services