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

com.epam.jdi.light.elements.complex.IList Maven / Gradle / Ivy

There is a newer version: 1.6.0
Show newest version
package com.epam.jdi.light.elements.complex;

import com.epam.jdi.light.elements.interfaces.base.HasValue;
import com.epam.jdi.light.elements.interfaces.base.IBaseElement;
import com.epam.jdi.tools.LinqUtils;
import com.epam.jdi.tools.func.JAction1;
import com.epam.jdi.tools.func.JFunc1;
import com.epam.jdi.tools.map.MapArray;
import com.epam.jdi.tools.map.MultiMap;
import com.epam.jdi.tools.pairs.Pair;
import sun.reflect.generics.reflectiveObjects.NotImplementedException;

import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

import static com.epam.jdi.light.common.Exceptions.exception;
import static com.epam.jdi.light.common.Exceptions.safeException;
import static com.epam.jdi.tools.EnumUtils.getEnumValue;
import static com.epam.jdi.tools.LinqUtils.any;

/**
 * Created by Roman Iovlev on 14.02.2018
 * Email: [email protected]; Skype: roman.iovlev
 */
public interface IList extends IBaseElement, List, HasValue, IHasSize {
    /**
     *  Get all application elements
     *  */
    MultiMap elements(int minAmount);
    T get(String value);

    default T get(Enum name) { return get(getEnumValue(name)); }
    default T last() {
        return elements(1).last().value;
    }
    default T first() { return elements(1).first().value; }
    default List where(JFunc1 condition) {
        return elements(0).values(condition);
    }
    default List filter(JFunc1 condition) {
        return where(condition);
    }
    default  List select(JFunc1 transform) {
        return elements(0).select((k,v) -> transform.execute(v));
    }
    default  List map(JFunc1 transform) {
        return select(transform);
    }
    default T first(JFunc1 condition) {
        return elements(1).first((k,v) -> condition.execute(v)).value;
    }
    default T last(JFunc1 condition) {
        return elements(1).last((k,v) -> condition.execute(v)).value;
    }
    default void ifDo(JFunc1 condition, JAction1 action) {
        elements(1).ifDo(p -> condition.execute(p.value), action::execute);
    }
    default  List ifSelect(JFunc1 condition, JFunc1 transform) {
        return elements(0).ifSelect((k,v) -> condition.execute(v), transform);
    }
    default void foreach(JAction1 action) {
        elements(0).foreach((k,v) -> action.execute(v));
    }
    default boolean hasAny(JFunc1 condition) {
        return elements(0).any(condition);
    }
    default boolean hasAnyKey(JFunc1 condition) {
        return LinqUtils.any(elements(0).keys(), condition);
    }
    default boolean all(JFunc1 condition) {
        return elements(0).all(condition);
    }
    default List slice(int from, int to) {
        return elements(to).slice(from, to).values();
    }
    default List slice(int from) {
        return elements(from).slice(from).values();
    }
    default List sliceTo(int to) {
        return elements(to).sliceTo(to).values();
    }
    default void refresh() { clear(); }
    default  List selectMany(JFunc1> func) {
        return elements(0).selectMany((k,v) -> func.execute(v));
    }
    @Override
    default int size() {
        try {
            return base().noWait(() -> base().getList(0).size());
        } catch (Exception ex) {
            throw exception("Get size failed: "+ safeException(ex));
        }
    }
    @Override
    default boolean isEmpty() { return size() == 0; }
    // List methods
    @Override
    default boolean contains(Object o) {
        return elements(0).contains(o);
    }
    @Override
    default Iterator iterator() {
        return elements(0).values().iterator();
    }
    @Override
    default Object[] toArray() {
        return elements(0).toArray();
    }
    @Override
    default  T1[] toArray(T1[] a) {
        return elements(0).toArray(a);
    }
    @Override
    default boolean add(T t) {
        throw new NotImplementedException();
    }
    @Override
    default boolean remove(Object o) {
        throw new NotImplementedException();
    }
    @Override
    default boolean containsAll(Collection c) {
        return elements(c.size()).containsAll(c);
    }
    @Override
    default boolean addAll(Collection c) {
        throw new NotImplementedException();
    }
    @Override
    default boolean addAll(int index, Collection c) {
        throw new NotImplementedException();
    }
    @Override
    default boolean removeAll(Collection c) {
        throw new NotImplementedException();
    }
    @Override
    default boolean retainAll(Collection c) {
        throw new NotImplementedException();
    }
    @Override
    default T get(int index) {
        Pair result = elements(index).get(index);
        return result != null ? result.value : null;
    }
    @Override
    default T set(int index, T element) {
        throw new NotImplementedException();
    }
    @Override
    default void add(int index, T element) {
        throw new NotImplementedException();
    }
    @Override
    default T remove(int index) {
        return elements(index).removeByIndex(index).value;
    }
    @Override
    default int indexOf(Object o) {
        return elements(0).values().indexOf(o);
    }
    @Override
    default int lastIndexOf(Object o) {
        return elements(0).values().lastIndexOf(o);
    }
    @Override
    default ListIterator listIterator() {
        return elements(0).values().listIterator();
    }
    @Override
    default ListIterator listIterator(int index) {
        return elements(0).values().listIterator(index);
    }
    @Override
    default List subList(int fromIndex, int toIndex) {
        return slice(fromIndex, toIndex);
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy