/**
  * After deleting the Manual Shares, we are also deleting the sharing entity data of the deleted
  * Manual Shares
  */
 @Override
 public void onAfterDelete(List<ManualShare> manualShares, List<ManualShare> old)
     throws TriggerException {
   // Delete SharingEntries for all ManualShares
   InvocationContext iContext = InvocationContext.get();
   for (ManualShare share : manualShares) {
     // Delete SharingEntry of share
     Instance record = share.getRecord();
     SharingEntityData.delete(
         iContext.getDatabase(), SharingEntityData.TYPE_MANUAL, share, record);
   }
 }
  /**
   * Preparing SHARING_ENTITY_DATA for given manual share, and inserting thos object in Db
   *
   * @param manualShares
   */
  private void insertSharingEntry(ManualShare manualShare) {
    Instance entity = manualShare.getRecord();
    SharedTo sharedTo = manualShare.getSharedTo();
    Instance reason = manualShare.getRowCause();

    SharingEntityData sEntry = new SharingEntityData(entity);
    if (reason != null) {
      // Reason will be provided when a manual share created by apex code
      sEntry.setSharingType(SharingEntityData.TYPE_APEX);
    } else {
      // User's manual share in UI
      sEntry.setSharingType(SharingEntityData.TYPE_MANUAL);
    }
    sEntry.setManualShare(manualShare.getId());
    sEntry.setIncludingSub(sharedTo.getIncludingSub());
    sEntry.setUserOrGroup(manualShare.getUserOrGroupId().getId());
    sEntry.setAccessLevel(manualShare.getAccessLevel());

    // inserting the prepared Sharing Entity Data into DB
    InvocationContext iContext = InvocationContext.get();
    sEntry.insert(iContext.getDatabase());
  }