/*******************************************************************************
* Copyright (c) 2014 antoniomariasanchez at gmail.com.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Public License v3.0
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/gpl.html
*
* Contributors:
* antoniomaria - initial API and implementation
******************************************************************************/
package net.sf.gazpachoquest.questionnaires.views.login;
import java.util.Collections;
import java.util.Locale;
import net.sf.gazpachoquest.api.QuestionnaireResource;
import net.sf.gazpachoquest.questionnaires.views.QuestionnaireView;
import org.apache.cxf.jaxrs.client.JAXRSClientFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider;
import com.vaadin.navigator.View;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.server.VaadinService;
import com.vaadin.server.WrappedSession;
import com.vaadin.shared.ui.MarginInfo;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.themes.Reindeer;
//@CDIView(OldLoginView.NAME)
public class OldLoginView extends CustomComponent implements View, Button.ClickListener {
private static final long serialVersionUID = 2314128852757221652L;
private static Logger logger = LoggerFactory.getLogger(OldLoginView.class);
public static final String NAME = "";
private final TextField invitationTextField;
private final Button enterButton;
private ComboBox createLanguageSelector() {
ComboBox languageSelector = new ComboBox("com.vaadin.demo.dashboard.DashboardUI.Language");
languageSelector.setImmediate(true);
languageSelector.setNullSelectionAllowed(false);
addLocale(Locale.ENGLISH, languageSelector);
addLocale(Locale.FRENCH, languageSelector);
addLocale(new Locale("es"), languageSelector);
// languageSelector.setValue(I18NStaticService.getI18NServive().getLocale());
/*-languageSelector.addValueChangeListener(new ValueChangeListener() {
private static final long serialVersionUID = 1L;
@Override
public void valueChange(ValueChangeEvent event) {
Locale locale = (Locale) (event.getProperty().getValue());
I18NStaticService.getI18NServive().setLocale(locale);
getUI().requestRepaintAll();
}
});*/
return languageSelector;
}
private void addLocale(Locale locale, ComboBox languageSelector) {
languageSelector.addItem(locale);
languageSelector.setItemCaption(locale, "XX");
}
public OldLoginView() {
setSizeFull();
// Language bar in the top-right corner for selecting
// invitation interface language
final HorizontalLayout languageBar = new HorizontalLayout();
languageBar.setHeight("50px");
// addComponent(languageBar);
// setComponentAlignment(languageBar, Alignment.TOP_RIGHT);
// Allow selecting a language. We are in a constructor of a
// CustomComponent, so preselecting the current
// language of the application can not be done before
// this (and the selection) component are attached to
// the application.
final ComboBox languageSelector = new ComboBox("Select a language") {
@Override
public void attach() {
super.attach();
// setValue(getLocale());
}
};
// for (int i=0; i<locales.length; i++) {
String locale = "es";
languageSelector.addItem(locale);
languageSelector.setItemCaption(locale, "espaƱol");
// Automatically select the current locale
// if (locales[i].equals(getLocale()))
languageSelector.setValue(locale);
// }
// Create the invitation input field
invitationTextField = new TextField("Invitation key:");
invitationTextField.setWidth("300px");
invitationTextField.setRequired(true);
invitationTextField.setInputPrompt("Your questionnair invitation key (eg. 12345678)");
invitationTextField.setInvalidAllowed(false);
// Create login button
enterButton = new Button("Enter", this);
// Add both to a panel
VerticalLayout fields = new VerticalLayout(languageSelector, invitationTextField, enterButton);
fields.setCaption("Please enter your invitation key to access the questionnair");
fields.setSpacing(true);
fields.setMargin(new MarginInfo(true, true, true, false));
fields.setSizeUndefined();
// The view root layout
VerticalLayout viewLayout = new VerticalLayout(fields);
viewLayout.setSizeFull();
viewLayout.setComponentAlignment(fields, Alignment.MIDDLE_CENTER);
viewLayout.setStyleName(Reindeer.LAYOUT_BLUE);
setCompositionRoot(viewLayout);
}
@Override
public void enter(ViewChangeEvent event) {
// focus the username field when invitation arrives to the login view
invitationTextField.focus();
}
@Override
public void buttonClick(ClickEvent event) {
logger.info("Submitting login");
// List<QuestionnaireDTO> questionnaires = questionnairResource.list();
// System.out.println(questionnaires);
//
// Validate the fields using the navigator. By using validors for the
// fields we reduce the amount of queries we have to use to the database
// for wrongly entered passwords
//
if (!invitationTextField.isValid()) {
return;
}
String invitation = invitationTextField.getValue();
WrappedSession session = VaadinService.getCurrentRequest().getWrappedSession();
QuestionnaireResource proxy = JAXRSClientFactory.create("", QuestionnaireResource.class,
Collections.singletonList(new JacksonJsonProvider()), "respondent", invitation, null);
//
// Validate username and password with database here. For examples sake
// I use a dummy username and password.
//
boolean isValid = true;
if (isValid) {
// Store the current invitation in the service session
getSession().setAttribute("invitation", invitation);
session.setAttribute("username", "respondent");
session.setAttribute("password", invitation);
// Navigate to main view
getUI().getNavigator().navigateTo(QuestionnaireView.NAME);
} else {
// Wrong password clear the password field and refocuses it
invitationTextField.setValue(null);
invitationTextField.focus();
}
}
}