1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package com.zipcodewilmington.generic.group;
  2. import com.sun.javafx.tools.packager.Param;
  3. import com.zipcodewilmington.generic.identifiables.IdentifiableInterface;
  4. import java.io.Serializable;
  5. import java.lang.reflect.Field;
  6. import java.lang.reflect.ParameterizedType;
  7. import java.lang.reflect.Type;
  8. import java.util.*;
  9. import java.util.function.Predicate;
  10. import java.util.stream.Collectors;
  11. /**
  12. * @author leon on 06/12/2018.
  13. */
  14. public class Group<TypeOfId extends Serializable,
  15. TypeOfEntity extends IdentifiableInterface<TypeOfId>> extends AbstractGroup<TypeOfId, TypeOfEntity> {
  16. public Group(){
  17. list = new ArrayList<>();
  18. }
  19. @Override
  20. public Integer count() {
  21. return list.size();
  22. }
  23. @Override
  24. public void insert(IdentifiableInterface object) {
  25. list.add((TypeOfEntity) object);
  26. }
  27. @Override
  28. public void delete(IdentifiableInterface object) {
  29. list.remove(object);
  30. }
  31. @Override
  32. public void delete(Serializable serializable) {
  33. list.removeIf(e -> e.getIdentity().equals(serializable));
  34. }
  35. @Override
  36. public Boolean has(IdentifiableInterface object) {
  37. return list.contains(object);
  38. }
  39. @Override
  40. public Boolean has(Serializable serializable) {
  41. for (IdentifiableInterface i : list)
  42. if (i.getIdentity().equals(serializable))
  43. return true;
  44. return false;
  45. }
  46. @Override
  47. public List filter(Predicate predicate) {
  48. return (List) list.stream().filter(predicate).collect(Collectors.toList());
  49. }
  50. @Override
  51. public Class<? extends TypeOfId> getIdentityType() {
  52. Class clazz = getClass(); //class com.zipcodewilmington.generic.group.Group
  53. Type type = clazz.getGenericSuperclass(); //com.zipcodewilmington.generic.group.AbstractGroup<TypeOfId, TypeOfEntity>
  54. ParameterizedType pt = (ParameterizedType) type; //com.zipcodewilmington.generic.group.AbstractGroup<TypeOfId, TypeOfEntity>
  55. Type[] types = pt.getActualTypeArguments(); //[Ljava.lang.reflect.Type;@6073f712
  56. Type type1 = types[0]; //TypeOfId
  57. return (Class) type1.getClass();
  58. }
  59. @Override
  60. public Class<? extends TypeOfEntity> getIdentifiableType() {
  61. Class clazz = getClass(); //class com.zipcodewilmington.generic.group.Group
  62. Type type = clazz.getGenericSuperclass(); //com.zipcodewilmington.generic.group.AbstractGroup<TypeOfId, TypeOfEntity>
  63. ParameterizedType pt = (ParameterizedType) type; //com.zipcodewilmington.generic.group.AbstractGroup<TypeOfId, TypeOfEntity>
  64. Type[] types = pt.getActualTypeArguments(); //[Ljava.lang.reflect.Type;@6073f712
  65. Type type1 = types[1]; //TypeOfEntity
  66. return (Class) type1.getClass();
  67. }
  68. }