class HbaseFeatures implements BackendFeatures {

    private boolean enablePartition;

    public HbaseFeatures(boolean enablePartition) {
        this.enablePartition = enablePartition;
    }

    @Override
    public boolean supportsScanToken() {
        return false;
    }

    @Override
    public boolean supportsScanKeyPrefix() {
        return !this.enablePartition;
    }

    @Override
    public boolean supportsScanKeyRange() {
        return !this.enablePartition;
    }

    @Override
    public boolean supportsQuerySchemaByName() {
        // TODO: Supports this feature through HBase secondary index
        return false;
    }

    @Override
    public boolean supportsQueryByLabel() {
        // TODO: Supports this feature through HBase secondary index
        return false;
    }

    @Override
    public boolean supportsQueryWithInCondition() {
        return false;
    }

    @Override
    public boolean supportsQueryWithRangeCondition() {
        return true;
    }

    @Override
    public boolean supportsQuerySortByInputIds() {
        return true;
    }

    @Override
    public boolean supportsQueryWithOrderBy() {
        return true;
    }

    @Override
    public boolean supportsQueryWithContains() {
        // TODO: Need to traversal all items
        return false;
    }

    @Override
    public boolean supportsQueryWithContainsKey() {
        // TODO: Need to traversal all items
        return false;
    }

    @Override
    public boolean supportsQueryByPage() {
        return true;
    }

    @Override
    public boolean supportsDeleteEdgeByLabel() {
        // TODO: Supports this feature through HBase secondary index
        return false;
    }

    @Override
    public boolean supportsUpdateVertexProperty() {
        // Vertex properties are stored in a cell(column value)
        return false;
    }

    @Override
    public boolean supportsMergeVertexProperty() {
        return false;
    }

    @Override
    public boolean supportsUpdateEdgeProperty() {
        // Edge properties are stored in a cell(column value)
        return false;
    }

    @Override
    public boolean supportsTransaction() {<FILL_FUNCTION_BODY>}

    @Override
    public boolean supportsNumberType() {
        return false;
    }

    @Override
    public boolean supportsAggregateProperty() {
        return false;
    }

    @Override
    public boolean supportsTtl() {
        return true;
    }

    @Override
    public boolean supportsOlapProperties() {
        return false;
    }
}

        // TODO: Supports tx through BufferedMutator and range-lock
        return false;
    
<no_super_class>