com.epam.jdi.light.elements.complex.IList Maven / Gradle / Ivy
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);
}
}