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

com.softicar.platform.common.container.data.table.in.memory.InMemoryDataTableFilterList Maven / Gradle / Ivy

Go to download

The SoftiCAR Platform is a lightweight, Java-based library to create interactive business web applications.

There is a newer version: 50.0.0
Show newest version
package com.softicar.platform.common.container.data.table.in.memory;

import com.softicar.platform.common.container.data.table.DataTableCollectionFilterOperator;
import com.softicar.platform.common.container.data.table.DataTableFilterListOperator;
import com.softicar.platform.common.container.data.table.DataTableStringFilterOperator;
import com.softicar.platform.common.container.data.table.DataTableValueFilterOperator;
import com.softicar.platform.common.container.data.table.IDataTableColumn;
import com.softicar.platform.common.container.data.table.IDataTableFilter;
import com.softicar.platform.common.container.data.table.IDataTableFilterList;
import com.softicar.platform.common.core.exceptions.SofticarUnknownEnumConstantException;
import com.softicar.platform.common.core.interfaces.INullaryVoidFunction;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * Default implementation of {@link IInMemoryDataTableFilterList}.
 *
 * @author Alexander Schmidt
 */
class InMemoryDataTableFilterList implements IInMemoryDataTableFilterList {

	private final List> filters;
	private final DataTableFilterListOperator operator;
	private final INullaryVoidFunction callback;

	public InMemoryDataTableFilterList(DataTableFilterListOperator operator, INullaryVoidFunction callback) {

		this.filters = new ArrayList<>();
		this.operator = operator;
		this.callback = callback;
	}

	@Override
	public Collection getFilters() {

		return Collections.unmodifiableCollection(filters);
	}

	@Override
	public DataTableFilterListOperator getFilterOperator() {

		return operator;
	}

	@Override
	public void clear() {

		filters.clear();
		callback.apply();
	}

	@Override
	public boolean isEmpty() {

		return filters.isEmpty();
	}

	@Override
	public IDataTableFilterList addFilterList(DataTableFilterListOperator operator) {

		InMemoryDataTableFilterList filterList = new InMemoryDataTableFilterList<>(operator, callback);
		filters.add(filterList);
		callback.apply();
		return filterList;
	}

	@Override
	public  void addValueFilter(IDataTableColumn column, DataTableValueFilterOperator operator, V value) {

		filters.add(new InMemoryDataTableValueFilter<>(column, operator, value));
		callback.apply();
	}

	@Override
	public  void addCollectionFilter(IDataTableColumn column, DataTableCollectionFilterOperator operator, Collection values) {

		filters.add(new InMemoryDataTableCollectionFilter<>(column, operator, values));
		callback.apply();
	}

	@Override
	public void addStringFilter(IDataTableColumn column, DataTableStringFilterOperator operator, String value) {

		filters.add(new InMemoryDataTableStringFilter<>(column, operator, value));
		callback.apply();
	}

	@Override
	public boolean applyFilter(R row) {

		switch (operator) {
		case AND:
			return evaluateConjunctiveFilters(filters, row);
		case OR:
			return evaluateDisjunctiveFilters(filters, row);
		default:
			throw new SofticarUnknownEnumConstantException(operator);
		}
	}

	private Boolean evaluateConjunctiveFilters(Collection> filters, R row) {

		for (IInMemoryDataTableFilter filter: filters) {
			if (!filter.applyFilter(row)) {
				return false;
			}
		}
		return true;
	}

	private Boolean evaluateDisjunctiveFilters(Collection> filters, R row) {

		for (IInMemoryDataTableFilter filter: filters) {
			if (filter.applyFilter(row)) {
				return true;
			}
		}
		return false;
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy