package fr.openwide.maven.artifact.notifier.web.application.navigation.util;
import org.apache.wicket.Application;
import org.apache.wicket.Page;
import org.apache.wicket.RestartResponseException;
import org.apache.wicket.model.IModel;
import org.apache.wicket.request.mapper.parameter.PageParameters;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import fr.openwide.core.spring.util.StringUtils;
import fr.openwide.maven.artifact.notifier.core.business.user.model.EmailAddress;
import fr.openwide.maven.artifact.notifier.core.business.user.model.User;
import fr.openwide.maven.artifact.notifier.core.business.user.service.IEmailAddressService;
import fr.openwide.maven.artifact.notifier.core.business.user.service.IUserService;
import fr.openwide.maven.artifact.notifier.web.application.MavenArtifactNotifierSession;
/**
* Utilitaire de gestion des liens au sein de l'application.
*
* De manière générale, on centralise ici :
* - tous les noms de paramètres qui vont être utilisés
* - toutes les méthodes permettant de construire des liens qui ont un sens métier et sont réutilisables dans l'application
*/
public final class LinkUtils {
private static final Logger LOGGER = LoggerFactory.getLogger(LinkUtils.class);
public static final String SEARCH_TERM_PARAMETER = "term";
public static final String PAGE_NUMBER_PARAMETER = "page";
public static final String HASH_PARAMETER = "hash";
public static PageParameters getSearchPageParameters(IModel<String> searchTermModel) {
PageParameters parameters = new PageParameters();
String term = searchTermModel.getObject();
if (StringUtils.hasText(term)) {
parameters.add(SEARCH_TERM_PARAMETER, term);
}
return parameters;
}
public static PageParameters getUserHashPageParameters(User user) {
PageParameters parameters = new PageParameters();
parameters.add(HASH_PARAMETER, user.getNotificationHash());
return parameters;
}
public static User extractUserFromHashPageParameter(IUserService userService, PageParameters parameters,
Class<? extends Page> redirectPageClass) {
String hash = parameters.get(LinkUtils.HASH_PARAMETER).toString();
User user = userService.getByNotificationHash(hash);
if (user == null) {
LOGGER.error("Unable to get user from hash");
MavenArtifactNotifierSession.get().error(
Application.get().getResourceSettings().getLocalizer().getString("common.error.noItem", null));
throw new RestartResponseException(redirectPageClass);
}
return user;
}
public static PageParameters getEmailHashPageParameters(EmailAddress emailAddress) {
PageParameters parameters = new PageParameters();
parameters.add(HASH_PARAMETER, emailAddress.getEmailHash());
return parameters;
}
public static EmailAddress extractEmailFromHashPageParameter(IEmailAddressService emailAddressService, PageParameters parameters,
Class<? extends Page> redirectPageClass) {
String hash = parameters.get(LinkUtils.HASH_PARAMETER).toString();
EmailAddress emailAddress = emailAddressService.getByHash(hash);
if (emailAddress == null) {
LOGGER.error("Unable to get email address from hash");
MavenArtifactNotifierSession.get().error(
Application.get().getResourceSettings().getLocalizer().getString("common.error.noItem", null));
throw new RestartResponseException(redirectPageClass);
}
return emailAddress;
}
public static long extractPageNumberParameter(PageParameters parameters) {
long pageNumber;
try {
pageNumber = parameters.get(PAGE_NUMBER_PARAMETER).toLong();
} catch (Exception e) {
pageNumber = 0;
}
return pageNumber;
}
private LinkUtils() {
}
}