/*
* 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.accumulo.core.data;
import java.util.Arrays;
/**
* A single column and value pair within a {@link Mutation}.
*
*/
public class ColumnUpdate {
private byte[] columnFamily;
private byte[] columnQualifier;
private byte[] columnVisibility;
private long timestamp;
private boolean hasTimestamp;
private byte[] val;
private boolean deleted;
/**
* Creates a new column update.
*
* @param cf
* column family
* @param cq
* column qualifier
* @param cv
* column visibility
* @param hasts
* true if the update specifies a timestamp
* @param ts
* timestamp
* @param deleted
* delete marker
* @param val
* cell value
*/
public ColumnUpdate(byte[] cf, byte[] cq, byte[] cv, boolean hasts, long ts, boolean deleted, byte[] val) {
this.columnFamily = cf;
this.columnQualifier = cq;
this.columnVisibility = cv;
this.hasTimestamp = hasts;
this.timestamp = ts;
this.deleted = deleted;
this.val = val;
}
/**
* Gets whether this update specifies a timestamp.
*
* @return true if this update specifies a timestamp
*/
public boolean hasTimestamp() {
return hasTimestamp;
}
/**
* Gets the column family for this update. Not a defensive copy.
*
* @return column family
*/
public byte[] getColumnFamily() {
return columnFamily;
}
/**
* Gets the column qualifier for this update. Not a defensive copy.
*
* @return column qualifier
*/
public byte[] getColumnQualifier() {
return columnQualifier;
}
/**
* Gets the column visibility for this update.
*
* @return column visibility
*/
public byte[] getColumnVisibility() {
return columnVisibility;
}
/**
* Gets the timestamp for this update.
*
* @return timestamp
*/
public long getTimestamp() {
return this.timestamp;
}
/**
* Gets the delete marker for this update.
*
* @return delete marker
*/
public boolean isDeleted() {
return this.deleted;
}
/**
* Gets the cell value for this update.
*
* @return cell value
*/
public byte[] getValue() {
return this.val;
}
@Override
public String toString() {
return Arrays.toString(columnFamily) + ":" + Arrays.toString(columnQualifier) + " [" + Arrays.toString(columnVisibility) + "] "
+ (hasTimestamp ? timestamp : "NO_TIME_STAMP") + " " + Arrays.toString(val) + " " + deleted;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof ColumnUpdate))
return false;
ColumnUpdate upd = (ColumnUpdate) obj;
return Arrays.equals(getColumnFamily(), upd.getColumnFamily()) && Arrays.equals(getColumnQualifier(), upd.getColumnQualifier())
&& Arrays.equals(getColumnVisibility(), upd.getColumnVisibility()) && isDeleted() == upd.isDeleted() && Arrays.equals(getValue(), upd.getValue())
&& hasTimestamp() == upd.hasTimestamp() && getTimestamp() == upd.getTimestamp();
}
@Override
public int hashCode() {
return Arrays.hashCode(columnFamily) + Arrays.hashCode(columnQualifier) + Arrays.hashCode(columnVisibility)
+ (hasTimestamp ? (Boolean.TRUE.hashCode() + Long.valueOf(timestamp).hashCode()) : Boolean.FALSE.hashCode())
+ (deleted ? Boolean.TRUE.hashCode() : (Boolean.FALSE.hashCode() + Arrays.hashCode(val)));
}
}