package doc.walkthru;

import java.net.MalformedURLException;

import javax.mail.MessagingException;

import org.benow.java.resource.Publish;
import org.benow.repository.NoSuchObjectException;
import org.benow.repository.security.UserImpl;
import org.benow.security.user.User;
import org.benow.service.LocalServices;
import org.benow.service.Services;
import org.benow.web.RedirectException;
import org.benow.web.security.SecurityWebService;

@Publish
public class CustomSecurityServiceImpl implements CustomSecurityService {

  @Override
  public void update(User user, AddressUserModule aum) throws MalformedURLException, MessagingException, RedirectException {
    UserImpl uImpl = (UserImpl) user;
    SecurityWebService svc = (SecurityWebService) Services.takeAService(SecurityWebService.class);
    try {
      if (uImpl.isTransient())
        try {
          user = svc.updateUser(uImpl.getKey(), user.getName(), user.getPassword(), user.getPassword(), user.getEmail(), user
              .getDescription(), user.passwordChangeRequired());
        } catch (NoSuchObjectException e) {
          throw new RuntimeException(e);
        }
      else
        user = svc.createUser(user.getName(), user.getPassword(), user.getEmail(), user.getDescription(),
            user.passwordChangeRequired());
      AddressUserModule naum = (AddressUserModule) user.getModuleByClass(AddressUserModule.class);
      naum.address = aum.address;
      naum.city = aum.city;
      naum.postal = aum.postal;
      naum.update();
      ((UserImpl) user).update();
    } finally {
      LocalServices.returnAService(svc);
    }
  }

}

