public static void updateContact(
     Contact contact,
     Map<String, List<ContactPhone>> phoneGroups,
     Map<String, List<ContactAttachment>> attachmentGroups)
     throws ServiceException {
   log.debug("updateContact: " + contact.getSurname() + " " + contact.getEmail());
   try {
     DaoFactory daoFactory = DaoFactory.getDaoFactory();
     ContactModificationDao modificationDao = daoFactory.getContactModificationDao();
     PersistenceManager.startTransaction();
     contact.setPhoneList(phoneGroups.get("update"));
     contact.setAttachmentList(attachmentGroups.get("update"));
     modificationDao.updateContact(contact);
     modificationDao.deleteContactPhones(phoneGroups.get("delete"));
     modificationDao.deleteContactAttachments(attachmentGroups.get("delete"));
     modificationDao.saveContactPhones(phoneGroups.get("new"));
     modificationDao.saveContactAttachments(attachmentGroups.get("new"));
     PersistenceManager.finishTransaction();
   } catch (SQLException | NamingException e) {
     log.error(e);
     throw new ServiceException("Can't update contact.", e);
   } catch (DaoException e) {
     try {
       PersistenceManager.rollbackTransaction();
     } catch (SQLException e1) {
       log.error(e1);
     }
     log.error(e);
     throw new ServiceException("Can't update contact.", e);
   }
 }
 public static void deleteContacts(Long contactsId[]) throws ServiceException {
   log.debug("deleteContacts: ");
   try {
     DaoFactory daoFactory = DaoFactory.getDaoFactory();
     ContactModificationDao modificationDao = daoFactory.getContactModificationDao();
     PersistenceManager.startTransaction();
     modificationDao.deleteContacts(contactsId);
     PersistenceManager.finishTransaction();
   } catch (SQLException | NamingException e) {
     log.error(e);
     throw new ServiceException("Can not delete contacts.", e);
   } catch (DaoException e) {
     try {
       PersistenceManager.rollbackTransaction();
     } catch (SQLException e1) {
       log.error(e1);
     }
     log.error(e);
     throw new ServiceException("Can not delete contacts.", e);
   }
 }
 public static void updateContactAttachments(Contact contact) throws ServiceException {
   log.debug("updateContactAttachments: " + contact.getIdContact());
   try {
     DaoFactory daoFactory = DaoFactory.getDaoFactory();
     ContactModificationDao modificationDao = daoFactory.getContactModificationDao();
     PersistenceManager.startTransaction();
     modificationDao.updateContactAttachments(contact);
     PersistenceManager.finishTransaction();
   } catch (SQLException | NamingException e) {
     log.error(e);
     throw new ServiceException("Can't update contact attachments.", e);
   } catch (DaoException e) {
     try {
       PersistenceManager.rollbackTransaction();
     } catch (SQLException e1) {
       log.error(e1);
     }
     log.error(e);
     throw new ServiceException("Can't update contact attachments.", e);
   }
 }
 public static void saveContactPhones(List<ContactPhone> phones) throws ServiceException {
   log.debug("saveContactPhones: " + phones);
   try {
     DaoFactory daoFactory = DaoFactory.getDaoFactory();
     ContactModificationDao modificationDao = daoFactory.getContactModificationDao();
     PersistenceManager.startTransaction();
     modificationDao.saveContactPhones(phones);
     PersistenceManager.finishTransaction();
   } catch (SQLException | NamingException e) {
     log.error(e);
     throw new ServiceException("Can't save contact phones.", e);
   } catch (DaoException e) {
     try {
       PersistenceManager.rollbackTransaction();
     } catch (SQLException e1) {
       log.error(e1);
     }
     log.error(e);
     throw new ServiceException("Can't save contact phones.", e);
   }
 }
 public static Contact addNewContact(Contact contact) throws ServiceException {
   log.debug("addNewContact: " + contact.getSurname() + " " + contact.getEmail());
   Contact savedContact = null;
   try {
     DaoFactory daoFactory = DaoFactory.getDaoFactory();
     ContactModificationDao modificationDao = daoFactory.getContactModificationDao();
     PersistenceManager.startTransaction();
     savedContact = modificationDao.addNewContact(contact);
     PersistenceManager.finishTransaction();
   } catch (SQLException | NamingException e) {
     log.error(e);
     throw new ServiceException("Can not add new contact.", e);
   } catch (DaoException e) {
     try {
       PersistenceManager.rollbackTransaction();
     } catch (SQLException e1) {
       log.error(e1);
     }
     log.error(e);
     throw new ServiceException("Can not add new contact.", e);
   }
   return savedContact;
 }
 public static List<ContactAttachment> saveContactAttachments(List<ContactAttachment> attachments)
     throws ServiceException {
   log.debug("saveContactAttachments: " + attachments);
   List<ContactAttachment> savedAttachments = new ArrayList<>();
   try {
     DaoFactory daoFactory = DaoFactory.getDaoFactory();
     ContactModificationDao modificationDao = daoFactory.getContactModificationDao();
     PersistenceManager.startTransaction();
     savedAttachments = modificationDao.saveContactAttachments(attachments);
     PersistenceManager.finishTransaction();
   } catch (SQLException | NamingException e) {
     log.error(e);
     throw new ServiceException("Can't save contact attachments.", e);
   } catch (DaoException e) {
     try {
       PersistenceManager.rollbackTransaction();
     } catch (SQLException e1) {
       log.error(e1);
     }
     log.error(e);
     throw new ServiceException("Can't save contact attachments.", e);
   }
   return savedAttachments;
 }