package com.zipcodewilmington.generic.group; import com.sun.javafx.tools.packager.Param; import com.zipcodewilmington.generic.identifiables.IdentifiableInterface; import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.*; import java.util.function.Predicate; import java.util.stream.Collectors; /** * @author leon on 06/12/2018. */ public class Group> extends AbstractGroup { public Group(){ list = new ArrayList<>(); } @Override public Integer count() { return list.size(); } @Override public void insert(IdentifiableInterface object) { list.add((TypeOfEntity) object); } @Override public void delete(IdentifiableInterface object) { list.remove(object); } @Override public void delete(Serializable serializable) { list.removeIf(e -> e.getIdentity().equals(serializable)); } @Override public Boolean has(IdentifiableInterface object) { return list.contains(object); } @Override public Boolean has(Serializable serializable) { for (IdentifiableInterface i : list) if (i.getIdentity().equals(serializable)) return true; return false; } @Override public List filter(Predicate predicate) { return (List) list.stream().filter(predicate).collect(Collectors.toList()); } @Override public Class getIdentityType() { Class clazz = getClass(); //class com.zipcodewilmington.generic.group.Group Type type = clazz.getGenericSuperclass(); //com.zipcodewilmington.generic.group.AbstractGroup ParameterizedType pt = (ParameterizedType) type; //com.zipcodewilmington.generic.group.AbstractGroup Type[] types = pt.getActualTypeArguments(); //[Ljava.lang.reflect.Type;@6073f712 Type type1 = types[0]; //TypeOfId return (Class) type1.getClass(); } @Override public Class getIdentifiableType() { Class clazz = getClass(); //class com.zipcodewilmington.generic.group.Group Type type = clazz.getGenericSuperclass(); //com.zipcodewilmington.generic.group.AbstractGroup ParameterizedType pt = (ParameterizedType) type; //com.zipcodewilmington.generic.group.AbstractGroup Type[] types = pt.getActualTypeArguments(); //[Ljava.lang.reflect.Type;@6073f712 Type type1 = types[1]; //TypeOfEntity return (Class) type1.getClass(); } }