/**
  * Saves user.
  *
  * @param user {@link IUser}
  * @return result of operation
  */
 public boolean save(IUser user) {
   boolean saved = false;
   if (user != null && user.getContact() != null) {
     // TODO refine it
     user.getContact().setConnection(connectionService.createConnection());
     saved = super.save(user);
   }
   return saved;
 }
 /** {@inheritDoc} */
 @Override
 public boolean delete(String id) {
   boolean deleted = false;
   IUser user = userRepository.findById(id);
   if (user != null) {
     IContact contact = user.getContact();
     if (contact != null && contact.getId() != null) {
       contactService.delete(contact.getId());
     }
     userRepository.delete(user);
     deleted = true;
   }
   return deleted;
 }
 /** {@inheritDoc} */
 @Override
 public boolean addContactByEmail(IUser user, String email) {
   boolean added = false;
   IContact contact = contactService.getByEmail(email);
   if (user != null && contact != null) {
     user.getContacts().add(contact);
     update(user);
     added = true;
   }
   return added;
 }
 /** {@inheritDoc} */
 @Override
 public boolean addContactByName(IUser user, String name) {
   boolean added = false;
   IContact contact = contactService.getByName(name);
   if (user != null) {
     user.getContacts().add(contact);
     update(user);
     added = true;
   }
   return added;
 }
 /** {@inheritDoc} */
 @Override
 public boolean removeContactById(IUser user, String contactId) {
   boolean result = false;
   if (user != null && contactId != null) {
     IContact contact = contactService.getById(contactId);
     if (contact.getId() != null) {
       user.getContacts().remove(contact);
       update(user);
       result = true;
     }
   }
   return result;
 }
 /** {@inheritDoc} */
 @Override
 public boolean logout(String name, String password) {
   boolean disconnected = false;
   IUser user = getByNameAndPassword(name, password);
   if (user != null) {
     if (user.getContact() != null && user.getContact().isOnline()) {
       user.getContact().setOnline(false);
       connectionService.delete(user.getContact().getConnection().getId());
       user.getContact().setConnection(null);
       contactService.update(user.getContact());
       disconnected = true;
     }
   }
   return disconnected;
 }
 @Override
 public IUser login(String name, String password) {
   IUser user = userRepository.findByNameAndPassword(name, password);
   if (user != null) {
     if (user.getContact() != null && user.getContact().getId() != null) {
       user.getContact().setOnline(true);
       IConnection connection = connectionService.createConnection();
       user.getContact().setConnection(connection);
       contactService.update(user.getContact());
     }
   } else {
     user = createInstance();
     user.getContact().setOnline(false);
   }
   return user;
 }
 /** {@inheritDoc} */
 @Override
 public IUser createInstance() {
   IUser user = new User();
   user.setContact(new Contact());
   return user;
 }