package com.gpc.client.pointofsale.invoice; import java.awt.Component; import java.awt.Frame; import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.util.StringTokenizer; import javax.swing.JComponent; import javax.swing.JDialog; import com.gpc.client.common.FwoMessage; import com.gpc.client.common.FwoMessageMgr; import com.gpc.valueobjects.common.MessageVO; import org.apache.log4j.Logger; import com.gpc.businessservice.factory.loyalty.LoyaltyProgramServiceFactory; import com.gpc.businessservice.interfaces.loyalty.LoyaltyProgramService; import com.gpc.client.common.ClientApplicationContext; import com.gpc.client.common.input.verifier.FwoBaseInputVerifier; import com.gpc.client.common.mvc.IView; import com.gpc.client.pointofsale.util.BaseController; import com.gpc.common.ResourceBundleReader; import com.gpc.common.constants.loyalty.LoyaltyConstants; import com.gpc.server.webservice.domain.loyalty.Fault; import com.gpc.server.webservice.domain.loyalty.Tracking; import com.gpc.valueobjects.PointOfSaleVO; import com.gpc.valueobjects.loyalty.LoyaltyRequest; import com.gpc.valueobjects.loyalty.LoyaltyResponse; public class InvitationController extends BaseController implements WindowListener { private static final Logger logger = Logger .getLogger(InvitationController.class); public static final int ENROLL = 1; public static final int DECLINE = -1; public static final int TRY_AGAIN = 0; public static final int UPDATE = 2; public static final int CONTINUE = 3; private static final String EMPTY =""; private int action = DECLINE; public InvitationDialog invitationDialog; private boolean RewardVersion2Active; private LoyaltyRequest dialogLoyaltyRequest; private boolean isNapaRewardsProgramVersion2Active = false; LoyaltyProgramService loyaltyProgramService = null; LoyaltyResponse registrationResponse; public InvitationController(Frame parentView) { invitationDialog = new InvitationDialog(parentView); install(); localizeView(); } public InvitationController(JDialog parentView) { invitationDialog = new InvitationDialog(parentView); install(); localizeView(); } public IView getView() { return invitationDialog; } public PointOfSaleVO getModel() { return null; } public void installViewListeners() { invitationDialog.btnEnroll.addActionListener(this); invitationDialog.btnDecline.addActionListener(this); invitationDialog.btnTryAgain.addActionListener(this); invitationDialog.btnUpdate.addActionListener(this); invitationDialog.btnContinue.addActionListener(this); invitationDialog.addWindowListener(this); invitationDialog.addKeyListener(this); invitationDialog.fldEmailAddress.addKeyListener(this); invitationDialog.fldFirstName.addKeyListener(this); invitationDialog.fldLastName.addKeyListener(this); invitationDialog.fldPhoneNumber.addKeyListener(this); invitationDialog.btnEnroll.addKeyListener(this); invitationDialog.btnDecline.addKeyListener(this); invitationDialog.btnTryAgain.addKeyListener(this); invitationDialog.btnUpdate.addKeyListener(this); invitationDialog.btnContinue.addKeyListener(this); } public int show() { localizeView(); invitationDialog.setVisible(true); return action; } public void installBusinessListeners() { } public void installVerifiers() { FwoBaseInputVerifier baseVerifier = null; baseVerifier = new FwoBaseInputVerifier(this); baseVerifier.setAdditionalValidationOnClient(true); } public void installFocusDeciders() { } public boolean validateComponent(JComponent component) { return true; } public void localizeView() { localizationMgr.localize(invitationDialog, InvitationDialog.DLG_INVITATION); localizationMgr.localize(invitationDialog.pnlInviataion, InvitationDialog.DLG_INVITATION); } public void windowOpened(WindowEvent arg0) { } public void windowClosing(WindowEvent arg0) { invitationDialog.btnDecline.doClick(); } public void windowClosed(WindowEvent arg0) { } public void windowIconified(WindowEvent arg0) { } public void windowDeiconified(WindowEvent arg0) { } public void windowDeactivated(WindowEvent arg0) { } public void windowActivated(WindowEvent arg0) { if (RewardVersion2Active) { if (isNullOrEmpty(invitationDialog.fldLastName.getText())) { invitationDialog.fldLastName.requestFocus(); } else if (isNullOrEmpty(invitationDialog.fldFirstName.getText())) { invitationDialog.fldFirstName.requestFocus(); } else if (isNullOrEmpty(invitationDialog.fldEmailAddress.getText())) { invitationDialog.fldEmailAddress.requestFocus(); } } else { invitationDialog.btnEnroll.requestFocus(); } } public void actionPerformed(ActionEvent arg0) { fireStartTimer(); Component source = (Component) arg0.getSource(); logger.error("....NEW LOYALTY CUSTOMER...." + source.getName()); invitationDialog.lblRequiredFieldWarnMsg.setVisible(false); if (source.getName().equals(InvitationDialog.BTN_ENROLL)) { action = ENROLL; if(RewardVersion2Active && !validateFields()) { return; } if (isNapaRewardsProgramVersion2Active) { dialogLoyaltyRequest.setLastName(invitationDialog.fldLastName.getText()); dialogLoyaltyRequest.setFirstName(invitationDialog.fldFirstName.getText()); dialogLoyaltyRequest.setEmailAddress(invitationDialog.fldEmailAddress.getText()); } //Call service loyaltyProgramService = LoyaltyProgramServiceFactory.getLoyaltyProgramService(); registrationResponse = loyaltyProgramService.registerMember(dialogLoyaltyRequest); //Email Validation if (registrationResponse != null && !registrationResponse.isSuccess()) { FwoMessageMgr mgr = clientApplicationContext.getMessageMgr(); Tracking tracking = registrationResponse.getTracking(); if (isInvalidEmailAddress(tracking)) { displayAlertMessage(invitationDialog.LBL_EMAIL_ADDRESS_REQUIRED_MESSAGE); invitationDialog.fldEmailAddress.requestFocus(); } else if (isDuplicatedEmailAddress(tracking)) { mgr.showMessage(invitationDialog, "10955"); //Duplicate Email Message invitationDialog.fldEmailAddress.requestFocus(); } else { MessageVO message = new MessageVO(); message.setSeverity(FwoMessage.WARNING); Fault[] fault = tracking.getFault(); if (fault != null && fault.length != 0) { message.setText(fault[0].getMessage()); } else { message.setText("Error code from reward service is " + fault[0].getCode()); } mgr.showMessage(invitationDialog, message); } return; } invitationDialog.dispose(); // enrollRetailCustomer(); } else if (source.getName().equals(InvitationDialog.BTN_INVITATION_DECLINE)) { action = DECLINE; clearFields(); invitationDialog.dispose(); } else if (source.getName().equals(InvitationDialog.BTN_TRY_AGAIN)) { action = TRY_AGAIN; clearFields(); invitationDialog.dispose(); } else if (source.getName().equals(InvitationDialog.BTN_UPDATE)) { action = UPDATE; if (RewardVersion2Active && !validateFields()) { return; } invitationDialog.dispose(); } else if (source.getName().equals(InvitationDialog.BTN_CONTINUE)) { action = CONTINUE; clearFields(); invitationDialog.dispose(); } } private boolean validateFields() { if (isNullOrEmpty(invitationDialog.fldLastName.getText())) { displayAlertMessage(invitationDialog.LBL_LAST_NAME_REQUIRED_MESSAGE); invitationDialog.fldLastName.requestFocus(); return false; } if (isNullOrEmpty(invitationDialog.fldFirstName.getText())) { displayAlertMessage(invitationDialog.LBL_FIRST_NAME_REQUIRED_MESSAGE); invitationDialog.fldFirstName.requestFocus(); return false; } String emailAddress = invitationDialog.fldEmailAddress.getText(); if (isNullOrEmpty(invitationDialog.fldEmailAddress.getText()) || !validateEmailAddress(emailAddress)) { displayAlertMessage(invitationDialog.LBL_EMAIL_ADDRESS_REQUIRED_MESSAGE); invitationDialog.fldEmailAddress.requestFocus(); return false; } return true; } public void focusGained(FocusEvent arg0) { } public void focusLost(FocusEvent arg0) { } public void keyTyped(KeyEvent arg0) { } public void keyPressed(KeyEvent arg0) { } public void keyReleased(KeyEvent arg0) { if (!arg0.isConsumed()) { if (arg0.getKeyCode() == KeyEvent.VK_ESCAPE) { invitationDialog.btnDecline.doClick(); } } } public void mouseClicked(MouseEvent arg0) { } public void mousePressed(MouseEvent arg0) { } public void mouseReleased(MouseEvent arg0) { } public void mouseEntered(MouseEvent arg0) { } public void mouseExited(MouseEvent arg0) { } public JComponent getDefaultFocusableComponent(JComponent currentComponent, boolean transferFocusForward) { String componentName = currentComponent.getName(); JComponent returnComponent = null; if (componentName == null) { return null; } if (transferFocusForward) { if (componentName.equals(invitationDialog.DLG_INVITATION)) { if(RewardVersion2Active) { returnComponent = invitationDialog.fldLastName; }else { returnComponent = invitationDialog.btnEnroll; } } } return returnComponent; } public JComponent getFocusableComponentAfterVerification( JComponent currentComponent, boolean transferFocusForward) { String componentName = currentComponent.getName(); JComponent returnComponent = null; if (componentName == null) { return null; } if (transferFocusForward) { if (componentName.equals(invitationDialog.DLG_INVITATION)) { if(RewardVersion2Active) { returnComponent = invitationDialog.fldLastName; }else { returnComponent = invitationDialog.btnEnroll; } } } return returnComponent; } /** * This method validates the email address format. * * @param emailAddress * @return boolean */ private boolean validateEmailAddress(final String emailAddress){ if (emailAddress != null) { if (emailAddress.indexOf("@") < 0) return false; if ( emailAddress.indexOf(".") < 0 ) return false; StringTokenizer st = new StringTokenizer(emailAddress, "."); String lastToken = null; while (st.hasMoreTokens()) { lastToken = st.nextToken(); } if (lastToken.length() >= 2) { return true; } } return false; } /** * This method display the inline required message. * * @param labelName */ private void displayAlertMessage(final String labelName) { ResourceBundleReader resourceBundleReader = ClientApplicationContext .getClientApplicationContext().getResourceBundleReader(); invitationDialog.lblRequiredFieldWarnMsg.setText(resourceBundleReader.getLocalizedText( ResourceBundleReader.UI, invitationDialog.DLG_INVITATION + "." + labelName, clientApplicationContext.getCurrentLocale())); invitationDialog.lblRequiredFieldWarnMsg.setVisible(true); } /** * This method clear the fields data. */ private void clearFields() { invitationDialog.fldEmailAddress.setText(EMPTY); invitationDialog.fldLastName.setText(EMPTY); invitationDialog.fldFirstName.setText(EMPTY); invitationDialog.fldPhoneNumber.setText(EMPTY); } /** * This method returns true if the string value is null or empty * @param value * @return True/False */ private boolean isNullOrEmpty(String value){ return (value == null || value.trim().equals("")); } public boolean isDoseRewardVersion2Active() { return RewardVersion2Active; } public void setDoseRewardVersion2Active(boolean RewardVersion2Active) { this.RewardVersion2Active = RewardVersion2Active; } public LoyaltyResponse getRegistrationResponse() { return registrationResponse; } public void setNapaRewardsProgramVersion2Active(boolean isNapaRewardsProgramVersion2Active) { this.isNapaRewardsProgramVersion2Active = isNapaRewardsProgramVersion2Active; } public void setLoyaltyRequest(LoyaltyRequest loyaltyRequest) { this.dialogLoyaltyRequest = loyaltyRequest; } private boolean isDuplicatedEmailAddress(Tracking tracking) { if(tracking != null) { for(Fault fault: tracking.getFault()) { if(LoyaltyConstants.DUPLICATE_EMAIL_ADDRESS.equals(fault.getCode())) { return true; } } } return false; } private boolean isInvalidEmailAddress(Tracking tracking) { if(tracking != null) { for(Fault fault: tracking.getFault()) { logger.warn("Fault code-message returned from reward service:" + fault.getCode() + "-" + fault.getMessage()); if(LoyaltyConstants.INVALID_EMAIL_ADDRESS.equals(fault.getCode())) { return true; } } } return false; } }