All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.stratio.cassandra.lucene.column.Columns Maven / Gradle / Ivy

There is a newer version: 3.9.1
Show newest version
/*
 * Copyright (C) 2014 Stratio (http://stratio.com)
 *
 * Licensed 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 com.stratio.cassandra.lucene.column;

import com.google.common.base.MoreObjects;

import java.util.*;

/**
 * A sorted list of CQL3 logic {@link Column}s.
 *
 * @author Andres de la Pena {@literal }
 */
public class Columns implements Iterable> {

    /** The wrapped columns. */
    private final List> columns;

    /** Returns an empty {@link Column} list. */
    public Columns() {
        this.columns = new LinkedList<>();
    }

    /**
     * Returns an empty {@link Column} list.
     *
     * @param initialCapacity the initial capacity of the list
     */
    public Columns(int initialCapacity) {
        this.columns = new ArrayList<>(initialCapacity);
    }

    /**
     * Returns a new {@link Columns} composed by the specified {@link Column}s.
     *
     * @param columns A list of {@link Column}s.
     */
    public Columns(Column... columns) {
        this.columns = Arrays.asList(columns);
    }

    /**
     * Adds the specified {@link Column} to the existing ones.
     *
     * @param column the {@link Column} to be added.
     * @return this
     */
    public Columns add(Column column) {
        columns.add(column);
        return this;
    }

    /**
     * Adds the specified {@link Column}s to the existing ones.
     *
     * @param columns The {@link Column}s to be added.
     * @return this {@link Columns} with the specified {@link Column}s.
     */
    public Columns add(Columns columns) {
        for (Column column : columns) {
            add(column);
        }
        return this;
    }

    /**
     * Returns an iterator over the {@link Column}s in insert order.
     *
     * @return An iterator over the {@link Column}s in insert order.
     */
    public Iterator> iterator() {
        return columns.iterator();
    }

    /**
     * Returns the number of {@link Column}s in this list. If this list contains more than Integer.MAX_VALUE
     * elements, returns Integer.MAX_VALUE.
     *
     * @return The number of {@link Column}s in this list
     */
    public int size() {
        return columns.size();
    }

    public boolean isEmpty() {
        return columns.isEmpty();
    }

    /**
     * Returns the {@link Column} identified by the specified full name, or {@code null} if not found.
     *
     * @param name The full name of the {@link Column} to be returned.
     * @return The {@link Column} identified by the specified full name, or {@code null} if not found.
     */
    public Columns getColumnsByFullName(String name) {
        Column.check(name);
        Columns result = new Columns();
        columns.forEach(column -> {
            if (column.getFullName().equals(name)) {
                result.add(column);
            }
        });
        return result;
    }

    /**
     * Returns the {@link Column} identified by the specified CQL cell name, or {@code null} if not found.
     *
     * @param name The CQL cell name of the{@link Column} to be returned.
     * @return The {@link Column} identified by the specified CQL cell name, or {@code null} if not found.
     */
    public Columns getColumnsByCellName(String name) {
        Column.check(name);
        String cellName = Column.getCellName(name);
        Columns result = new Columns();
        columns.forEach(column -> {
            if (column.getCellName().equals(cellName)) {
                result.add(column);
            }
        });
        return result;
    }

    /**
     * Returns the {@link Column} identified by the specified mapper name, or {@code null} if not found.
     *
     * @param name The mapper name of the {@link Column} to be returned.
     * @return The {@link Column} identified by the specified mapper name, or {@code null} if not found.
     */
    public Columns getColumnsByMapperName(String name) {
        Column.check(name);
        String mapperName = Column.getMapperName(name);
        Columns result = new Columns();
        columns.forEach(column -> {
            if (column.getMapperName().equals(mapperName)) {
                result.add(column);
            }
        });
        return result;
    }

    public Column getFirst() {
        return columns.isEmpty() ? null : columns.get(0);
    }

    /**
     * Returns the non expired columns from this list using now value.
     *
     * @param nowInSec the max allowed time in seconds
     * @return a copy of this without the columns expired before {@code now}
     */
    public Columns cleanDeleted(int nowInSec) {
        Columns clean = new Columns();
        columns.forEach(column -> {
            if (column.isLive(nowInSec)) {
                clean.add(column);
            }
        });
        return clean;
    }

    /** {@inheritDoc} */
    @Override
    public String toString() {
        MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(this);
        for (Column column : columns) {
            helper.add(column.getFullName(), column.getComposedValue());
        }
        return helper.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy