package org.mxchange.addressbook.validator.user;
import java.text.MessageFormat;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
import javax.ejb.EJB;
+import javax.enterprise.event.Observes;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;
import org.mxchange.jcoreee.validator.number.BaseLongValidator;
+import org.mxchange.jusercore.events.registration.UserRegisteredEvent;
+import org.mxchange.jusercore.model.user.User;
import org.mxchange.jusercore.model.user.UserSessionBeanRemote;
/**
@EJB (mappedName = "ejb/stateless-user")
private UserSessionBeanRemote userBean;
+ /**
+ * Cached user status
+ */
+ private final ConcurrentMap<Long, Boolean> cachedStatus;
+
+ /**
+ * Default constructor
+ */
+ public UserIdValidator () {
+ // Init map
+ this.cachedStatus = new ConcurrentHashMap<>(0);
+ }
+
@Override
public void validate (final FacesContext context, final UIComponent component, final Object value) throws ValidatorException {
// Trace message
// Cast value
Long number = (Long) value;
- // Get status
- Boolean ifUserExists = this.userBean.ifUserIdExists(number);
+ // Define variable
+ Boolean ifUserExists = false;
+
+ // Is a map entry there?
+ if (this.cachedStatus.containsKey(number)) {
+ // Get from cache
+ ifUserExists = this.cachedStatus.get(number);
+ } else {
+ // Get status
+ ifUserExists = this.userBean.ifUserIdExists(number);
+
+ // Add to cache
+ this.cachedStatus.put(number, ifUserExists);
+ }
// Is the address book id valid?
if (!ifUserExists) {
// Trace message
//this.getLogger().logTrace("validate: EXIT!"); //NOI18N
}
+
+ /**
+ * Event fired when the user registration is complete
+ * <p>
+ * @param event User registration event
+ */
+ public void afterRegistration (final @Observes UserRegisteredEvent event) {
+ // event should not be null
+ if (null == event) {
+ // Throw NPE
+ throw new NullPointerException("event is null"); //NOI18N
+ } else if (event.getUser() == null) {
+ // Throw NPE again
+ throw new NullPointerException("event.user is null"); //NOI18N
+ } else if (event.getUser().getUserId() == null) {
+ // userId is null
+ throw new NullPointerException("event.user.userId is null"); //NOI18N
+ } else if (event.getUser().getUserId() < 1) {
+ // Not avalid id
+ throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getUser(), event.getUser().getUserId())); //NOI18N
+ }
+
+ // Get user instance
+ User registeredUser = event.getUser();
+
+ // Update cache
+ this.cachedStatus.put(registeredUser.getUserId(), Boolean.TRUE);
+ }
}