private CollectionItem createCollection(
     User user, Collection collection, Collection parentCollection) {
   CollectionItem collectionItem = createCollection(collection, parentCollection, user);
   if (collection.getSharing() != null
       && !collection
           .getCollectionType()
           .equalsIgnoreCase(ResourceType.Type.ASSESSMENT_URL.getType())
       && collection.getSharing().equalsIgnoreCase(PUBLIC)) {
     collection.setSharing(Sharing.ANYONEWITHLINK.getSharing());
   }
   if (collection.getSharing() != null
       && !collection
           .getCollectionType()
           .equalsIgnoreCase(ResourceType.Type.ASSESSMENT_URL.getType())
       && collection.getSharing().equalsIgnoreCase(PUBLIC)) {
     collection.setPublishStatusId(Constants.PUBLISH_PENDING_STATUS_ID);
     collection.setSharing(Sharing.ANYONEWITHLINK.getSharing());
   }
   createCollectionSettings(collection);
   if (!collection
       .getCollectionType()
       .equalsIgnoreCase(ResourceType.Type.ASSESSMENT_URL.getType())) {
     getIndexHandler()
         .setReIndexRequest(
             collection.getGooruOid(), IndexProcessor.INDEX, SCOLLECTION, null, false, false);
   }
   return collectionItem;
 }
 @Override
 @Transactional(
     readOnly = false,
     propagation = Propagation.REQUIRED,
     rollbackFor = Exception.class)
 public void updateCollection(
     String parentId, String collectionId, Collection newCollection, User user) {
   boolean hasUnrestrictedContentAccess =
       this.getOperationAuthorizer().hasUnrestrictedContentAccess(collectionId, user);
   // TO-Do add validation for collection type and collaborator validation
   Collection collection = getCollectionDao().getCollection(collectionId);
   if (newCollection.getSharing() != null
       && (newCollection.getSharing().equalsIgnoreCase(Sharing.PRIVATE.getSharing())
           || newCollection.getSharing().equalsIgnoreCase(Sharing.PUBLIC.getSharing())
           || newCollection.getSharing().equalsIgnoreCase(Sharing.ANYONEWITHLINK.getSharing()))) {
     if (!newCollection.getSharing().equalsIgnoreCase(PUBLIC)) {
       collection.setPublishStatusId(null);
     }
     if (!collection
             .getCollectionType()
             .equalsIgnoreCase(ResourceType.Type.ASSESSMENT_URL.getType())
         && newCollection.getSharing().equalsIgnoreCase(PUBLIC)
         && !userService.isContentAdmin(user)) {
       collection.setPublishStatusId(Constants.PUBLISH_PENDING_STATUS_ID);
       newCollection.setSharing(collection.getSharing());
     }
     if (collection
             .getCollectionType()
             .equalsIgnoreCase(ResourceType.Type.ASSESSMENT_URL.getType())
         || newCollection.getSharing().equalsIgnoreCase(PUBLIC)
             && userService.isContentAdmin(user)) {
       collection.setPublishStatusId(Constants.PUBLISH_REVIEWED_STATUS_ID);
     }
     collection.setSharing(newCollection.getSharing());
   }
   if (newCollection.getSettings() != null) {
     updateCollectionSettings(collection, newCollection);
   }
   if (newCollection.getLanguageObjective() != null) {
     collection.setLanguageObjective(newCollection.getLanguageObjective());
   }
   if (hasUnrestrictedContentAccess) {
     if (newCollection.getCreator() != null && newCollection.getCreator().getPartyUid() != null) {
       User creatorUser = getUserService().findByGooruId(newCollection.getCreator().getPartyUid());
       collection.setCreator(creatorUser);
     }
     if (newCollection.getUser() != null && newCollection.getUser().getPartyUid() != null) {
       User ownerUser = getUserService().findByGooruId(newCollection.getUser().getPartyUid());
       collection.setUser(ownerUser);
     }
     if (newCollection.getNetwork() != null) {
       collection.setNetwork(newCollection.getNetwork());
     }
   }
   if (newCollection.getPosition() != null) {
     CollectionItem parentCollectionItem =
         this.getCollectionDao().getCollectionItemById(collectionId, user);
     if (parentId == null) {
       parentId = parentCollectionItem.getCollection().getGooruOid();
     }
     Collection parentCollection =
         getCollectionDao().getCollectionByUser(parentId, user.getPartyUid());
     this.resetSequence(
         parentCollection,
         parentCollectionItem.getCollectionItemId(),
         newCollection.getPosition(),
         user.getPartyUid(),
         COLLECTION);
   }
   if (newCollection.getMediaFilename() != null) {
     String folderPath = Collection.buildResourceFolder(collection.getContentId());
     this.getGooruImageUtil()
         .imageUpload(newCollection.getMediaFilename(), folderPath, COLLECTION_IMAGE_DIMENSION);
     StringBuilder basePath = new StringBuilder(folderPath);
     basePath.append(File.separator).append(newCollection.getMediaFilename());
     collection.setImagePath(basePath.toString());
   }
   updateCollection(collection, newCollection, user);
   Map<String, Object> data = generateCollectionMetaData(collection, newCollection, user);
   if (data != null && data.size() > 0) {
     ContentMeta contentMeta =
         this.getContentRepository().getContentMeta(collection.getContentId());
     updateContentMeta(contentMeta, data);
   }
 }