@Override
 public ActionResponseDTO<Classpage> createClasspage(
     Classpage classpage, boolean addToUserClasspage, String assignmentId) throws Exception {
   Errors errors = validateClasspage(classpage);
   if (!errors.hasErrors()) {
     this.getCollectionRepository().save(classpage);
     if (assignmentId != null && !assignmentId.isEmpty()) {
       CollectionItem collectionItem = new CollectionItem();
       collectionItem.setItemType(ShelfType.AddedType.ADDED.getAddedType());
       collectionItem =
           this.createClasspageItem(
                   assignmentId,
                   classpage.getGooruOid(),
                   collectionItem,
                   classpage.getUser(),
                   CollectionType.CLASSPAGE.getCollectionType())
               .getModel();
       Set<CollectionItem> collectionItems = new TreeSet<CollectionItem>();
       collectionItems.add(collectionItem);
       classpage.setCollectionItems(collectionItems);
     }
     if (addToUserClasspage) {
       CollectionItem collectionItem = new CollectionItem();
       collectionItem.setItemType(ShelfType.AddedType.ADDED.getAddedType());
       this.createClasspageItem(
           classpage.getGooruOid(),
           null,
           collectionItem,
           classpage.getUser(),
           CollectionType.USER_CLASSPAGE.getCollectionType());
     }
     this.getCollectionRepository().save(classpage);
   }
   return new ActionResponseDTO<Classpage>(classpage, errors);
 }
 @Override
 public void classpageUserRemove(String code, List<String> mailIds, User apiCaller)
     throws Exception {
   UserGroup userGroup = this.getUserGroupService().findUserGroupByGroupCode(code);
   Classpage classpage = this.getCollectionRepository().getClasspageByCode(code);
   if (userGroup != null && classpage != null) {
     for (String mailId : mailIds) {
       Identity identity = this.getUserRepository().findByEmailIdOrUserName(mailId, true, false);
       if (identity != null) {
         UserGroupAssociation userGroupAssociation =
             this.getUserRepository()
                 .getUserGroupMemebrByGroupUid(
                     userGroup.getPartyUid(), identity.getUser().getPartyUid());
         if (userGroupAssociation != null) {
           this.getUserGroupRepository().remove(userGroupAssociation);
         }
         InviteUser inviteUser =
             this.getInviteRepository().findInviteUserById(mailId, classpage.getGooruOid());
         if (inviteUser != null) {
           this.getInviteRepository().remove(inviteUser);
         }
       }
     }
   }
 }
 @Override
 public List<Map<String, Object>> classpageUserJoin(
     String code, List<String> mailIds, User apiCaller) throws Exception {
   List<Map<String, Object>> classpageMember = new ArrayList<Map<String, Object>>();
   UserGroup userGroup = this.getUserGroupService().findUserGroupByGroupCode(code);
   Classpage classpage = this.getCollectionRepository().getClasspageByCode(code);
   if (userGroup != null && classpage != null) {
     for (String mailId : mailIds) {
       Identity identity = this.getUserRepository().findByEmailIdOrUserName(mailId, true, false);
       if (identity != null) {
         InviteUser inviteUser =
             this.getInviteRepository().findInviteUserById(mailId, classpage.getGooruOid());
         if (inviteUser != null) {
           inviteUser.setStatus(
               this.getCustomTableRepository().getCustomTableValue(INVITE_USER_STATUS, ACTIVE));
           inviteUser.setJoinedDate(new Date(System.currentTimeMillis()));
           this.getInviteRepository().save(inviteUser);
         }
         if (this.getUserRepository()
                 .getUserGroupMemebrByGroupUid(
                     userGroup.getPartyUid(), identity.getUser().getPartyUid())
             == null) {
           UserGroupAssociation groupAssociation = new UserGroupAssociation();
           groupAssociation.setIsGroupOwner(0);
           groupAssociation.setUser(identity.getUser());
           groupAssociation.setUserGroup(userGroup);
           this.getUserRepository().save(groupAssociation);
           classpageMember.add(setMemberResponse(groupAssociation, ACTIVE));
         }
       }
     }
   }
   return classpageMember;
 }
 @Override
 public ActionResponseDTO<Classpage> createClasspage(
     Classpage newClasspage, CollectionItem newCollectionItem, String gooruOid, User user)
     throws Exception {
   Errors errors = validateClasspage(newClasspage);
   if (!errors.hasErrors()) {
     this.getCollectionRepository().save(newClasspage);
     this.getUserGroupService()
         .createGroup(
             newClasspage.getTitle(), newClasspage.getClasspageCode(), "System", user, null);
     if (gooruOid != null && !gooruOid.isEmpty() && newCollectionItem != null) {
       CollectionItem collectionItem = new CollectionItem();
       collectionItem.setItemType(ShelfType.AddedType.ADDED.getAddedType());
       collectionItem.setPlannedEndDate(newCollectionItem.getPlannedEndDate());
       collectionItem.setNarration(newCollectionItem.getNarration());
       collectionItem =
           this.createCollectionItem(
                   gooruOid,
                   newClasspage.getGooruOid(),
                   collectionItem,
                   newClasspage.getUser(),
                   CollectionType.COLLECTION.getCollectionType(),
                   false)
               .getModel();
       Set<CollectionItem> collectionItems = new TreeSet<CollectionItem>();
       collectionItems.add(collectionItem);
       newClasspage.setCollectionItems(collectionItems);
       this.getCollectionRepository().save(newClasspage);
     }
   }
   return new ActionResponseDTO<Classpage>(newClasspage, errors);
 }
 @Override
 public Classpage getClasspage(String classpageCode, User user) throws Exception {
   Classpage classpage = this.getCollectionRepository().getClasspageByCode(classpageCode);
   if (classpage == null) {
     throw new NotFoundException("Class not found");
   }
   return getClasspage(classpage.getGooruOid(), user, PERMISSIONS);
 }
 @Override
 public List<Map<String, String>> inviteUserForClass(
     List<String> emails, String classCode, User apiCaller) {
   Classpage classPage = this.getCollectionRepository().getClasspageByCode(classCode);
   if (classPage == null) {
     throw new NotFoundException(generateErrorMessage(GL0006, CLASS));
   }
   List<Map<String, String>> invites = new ArrayList<Map<String, String>>();
   List<InviteUser> inviteUsers = null;
   for (String email : emails) {
     InviteUser inviteUser =
         this.getInviteRepository().findInviteUserById(email, classPage.getGooruOid(), null);
     inviteUsers = new ArrayList<InviteUser>();
     if (inviteUser == null) {
       inviteUsers.add(createInviteUserObj(email, classPage.getGooruOid(), CLASS, apiCaller));
     }
     Map<String, String> inviteMap = new HashMap<String, String>();
     inviteMap.put(EMAIL_ID, email);
     inviteMap.put(GOORU_OID, classPage.getGooruOid());
     inviteMap.put(STATUS, PENDING);
     invites.add(inviteMap);
     Profile profile = this.getUserRepository().getProfile(classPage.getUser(), false);
     String gender = "";
     String noun = "";
     if (profile.getGender() != null) {
       if (profile.getGender().getName().equalsIgnoreCase(FEMALE)) {
         gender = MS;
         noun = HER;
       } else if (profile.getGender().getName().equalsIgnoreCase(MALE)) {
         gender = MR;
         noun = HIS;
       }
     }
     this.getMailHandler()
         .sendMailToInviteUser(inviteMap, classPage.getUser(), classPage.getTitle(), gender, noun);
   }
   if (inviteUsers != null) {
     this.getInviteRepository().saveAll(inviteUsers);
   }
   return invites;
 }
 private List<Map<String, Object>> getPendingMemberList(String code) {
   Classpage classpage = this.getCollectionRepository().getClasspageByCode(code);
   if (classpage == null) {
     throw new NotFoundException("Class not found!!!");
   }
   List<InviteUser> inviteUsers =
       this.getInviteRepository().getInviteUsersById(classpage.getGooruOid());
   List<Map<String, Object>> pendingList = new ArrayList<Map<String, Object>>();
   if (inviteUsers != null) {
     for (InviteUser inviteUser : inviteUsers) {
       pendingList.add(this.setInviteMember(inviteUser, PENDING));
     }
   }
   return pendingList;
 }