private void saveExternal(
      EventVo event,
      EventExternalEventMappingVoCollection externalToBeAdded,
      EventExternalEventMappingVoCollection externalToBeDeleted,
      DomainFactory factory,
      Event domainRecord)
      throws StaleObjectException, ForeignKeyViolationException {
    // Save External
    if (externalToBeAdded != null) {
      for (int i = 0; i < externalToBeAdded.size(); i++) {
        EventExternalEventMapping domainExternal =
            EventExternalEventMappingVoAssembler.extractEventExternalEventMapping(
                factory, externalToBeAdded.get(i));
        domainExternal.setEvent(domainRecord);
        if (domainExternal.getStatus().equals(getDomLookup(PreActiveActiveInactiveStatus.ACTIVE))
            && domainExternal.getActivatedDateTime() == null) {
          domainExternal.setStatus(getDomLookup(PreActiveActiveInactiveStatus.ACTIVE));
          domainExternal.setActivatedBy(getUser());
          domainExternal.setActivatedDateTime(new Date());
        } else if (domainExternal
            .getStatus()
            .equals(getDomLookup(PreActiveActiveInactiveStatus.INACTIVE))) {
          if (domainExternal.getInactivatedBy() == null) {
            domainExternal.setInactivatedBy(getUser());
            domainExternal.setInactivatedDateTime(new Date());
          }
        }

        factory.save(domainExternal);
      }
    }

    if (externalToBeDeleted != null) {
      for (int i = 0; i < externalToBeDeleted.size(); i++) {
        EventExternalEventMapping domainExternal =
            EventExternalEventMappingVoAssembler.extractEventExternalEventMapping(
                factory, externalToBeDeleted.get(i));
        factory.delete(domainExternal);
      }
    }
  }