/* * Copyright (C) 2015 Language In Interaction * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ package nl.ru.languageininteraction.language.client.presenter; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.MultiWordSuggestOracle; import com.google.gwt.user.client.ui.RootLayoutPanel; import com.google.gwt.user.client.ui.SuggestBox; import com.google.gwt.user.client.ui.TextBox; import nl.ru.languageininteraction.language.client.Messages; import nl.ru.languageininteraction.language.client.exception.AudioException; import nl.ru.languageininteraction.language.client.listener.AppEventListner; import nl.ru.languageininteraction.language.client.listener.PresenterEventListner; import nl.ru.languageininteraction.language.client.model.UserResults; import nl.ru.languageininteraction.language.client.service.AudioPlayer; import nl.ru.languageininteraction.language.client.service.LocalStorage; import nl.ru.languageininteraction.language.client.service.MetadataFieldProvider; import nl.ru.languageininteraction.language.client.view.PlayerDetailsView; /** * @since Feb 4, 2015 11:26:01 AM (creation date) * @author Peter Withers <p.withers@psych.ru.nl> */ public class PlayerDetailsPresenter extends AbstractSvgPresenter implements Presenter { protected final Messages messages = GWT.create(Messages.class); final MetadataFieldProvider metadataFieldProvider = new MetadataFieldProvider(); private final PlayerDetailsView playerDetailsView; final AppEventListner appEventListner; public PlayerDetailsPresenter(RootLayoutPanel widgetTag, UserResults userResults, AudioPlayer audioPlayer, final AppEventListner appEventListner) throws AudioException { super(widgetTag, userResults, audioPlayer, new PlayerDetailsView(audioPlayer)); playerDetailsView = ((PlayerDetailsView) abstractSvgView); this.appEventListner = appEventListner; } @Override void configureSvg() { String currentAge = userResults.getUserData().getMetadataValue(metadataFieldProvider.ageMetadataField); boolean shareAgreed = metadataFieldProvider.shareMetadataField.getControlledVocabulary()[0].equals(userResults.getUserData().getMetadataValue(metadataFieldProvider.shareMetadataField)); playerDetailsView.setShareData(shareAgreed); final String[] ageVocabulary = metadataFieldProvider.ageMetadataField.getControlledVocabulary(); if (ageVocabulary[0].equals(currentAge)) { playerDetailsView.setAge1(); } else if (ageVocabulary[1].equals(currentAge)) { playerDetailsView.setAge2(); } else if (ageVocabulary[2].equals(currentAge)) { playerDetailsView.setAge3(); } else { playerDetailsView.clearAge(); } playerDetailsView.setAge1ButtonListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { userResults.getUserData().setMetadataValue(metadataFieldProvider.ageMetadataField, metadataFieldProvider.ageMetadataField.getControlledVocabulary()[0]); playerDetailsView.setAge1(); } }); playerDetailsView.setAge2ButtonListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { userResults.getUserData().setMetadataValue(metadataFieldProvider.ageMetadataField, metadataFieldProvider.ageMetadataField.getControlledVocabulary()[1]); playerDetailsView.setAge2(); } }); playerDetailsView.setAge3ButtonListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { userResults.getUserData().setMetadataValue(metadataFieldProvider.ageMetadataField, metadataFieldProvider.ageMetadataField.getControlledVocabulary()[2]); playerDetailsView.setAge3(); } }); playerDetailsView.setShareCheckBoxListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { // boolean shareAgreed = metadataFieldProvider.shareMetadataField.getControlledVocabulary()[0].equals(userResults.getUserData().getMetadataValue(metadataFieldProvider.shareMetadataField)); // if (shareAgreed) { //// userResults.getUserData().setMetadataValue(metadataFieldProvider.shareMetadataField, metadataFieldProvider.shareMetadataField.getControlledVocabulary()[1]); // playerDetailsView.setShareData(Boolean.FALSE); // } else { //// userResults.getUserData().setMetadataValue(metadataFieldProvider.shareMetadataField, metadataFieldProvider.shareMetadataField.getControlledVocabulary()[0]); // playerDetailsView.setShareData(Boolean.TRUE); // } appEventListner.requestApplicationState(AppEventListner.ApplicationState.stopSharing); } }); playerDetailsView.setEditNameListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { final TextBox userNameBox = new TextBox(); userNameBox.setStylePrimaryName("popupTextBox"); userNameBox.setValue(userResults.getUserData().getMetadataValue(metadataFieldProvider.firstNameMetadataField)); playerDetailsView.showWidgetPopup(new PresenterEventListner() { @Override public String getLabel() { return messages.popupOkButtonLabel(); } @Override public void eventFired(Button button) { userResults.getUserData().setMetadataValue(metadataFieldProvider.firstNameMetadataField, userNameBox.getValue()); playerDetailsView.setUserNameField(userResults.getUserData().getMetadataValue(metadataFieldProvider.firstNameMetadataField)); } }, userNameBox); } }); playerDetailsView.setAddLanguageListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { MultiWordSuggestOracle oracle = new MultiWordSuggestOracle(); for (String suggestion : messages.languageSuggestionList().split("\\|")) { oracle.add(suggestion); } final SuggestBox addLanguageBox = new SuggestBox(oracle); addLanguageBox.setStylePrimaryName("popupTextBox"); playerDetailsView.showWidgetPopup(new PresenterEventListner() { @Override public String getLabel() { return messages.popupOkButtonLabel(); } @Override public void eventFired(Button button) { final String storedValue = userResults.getUserData().getMetadataValue(metadataFieldProvider.languagesMetadataField); final String spokenLanguages = (storedValue == null || storedValue.isEmpty()) ? addLanguageBox.getValue() : storedValue + "|" + addLanguageBox.getValue(); userResults.getUserData().setMetadataValue(metadataFieldProvider.languagesMetadataField, spokenLanguages); setLanguageLabels(); } }, addLanguageBox); } }); playerDetailsView.setDeleteLanguageListner(new PresenterEventListner() { @Override public String getLabel() { return ""; } @Override public void eventFired(Button button) { final ListBox deleteLanguageBox = new ListBox(); deleteLanguageBox.setStylePrimaryName("popupTextBox"); for (final String spokenLanguage : userResults.getUserData().getMetadataValue(metadataFieldProvider.languagesMetadataField).split("\\|")) { deleteLanguageBox.addItem(spokenLanguage); } deleteLanguageBox.setVisibleItemCount(5); playerDetailsView.showWidgetPopup(new PresenterEventListner() { @Override public String getLabel() { return messages.popupDeleteButtonLabel(); } @Override public void eventFired(Button button) { if (deleteLanguageBox.getItemCount() > 0) { String resultingLanguages = ""; for (int itemCounter = 0; itemCounter < deleteLanguageBox.getItemCount(); itemCounter++) { if (itemCounter != deleteLanguageBox.getSelectedIndex()) { resultingLanguages = (resultingLanguages.isEmpty()) ? deleteLanguageBox.getItemText(itemCounter) : resultingLanguages + "|" + deleteLanguageBox.getItemText(itemCounter); } } userResults.getUserData().setMetadataValue(metadataFieldProvider.languagesMetadataField, resultingLanguages); setLanguageLabels(); } } }, deleteLanguageBox); } }); final String userNameValue = userResults.getUserData().getMetadataValue(metadataFieldProvider.firstNameMetadataField); playerDetailsView.setUserNameField((userNameValue.isEmpty()) ? messages.defaultUserName() : userNameValue); playerDetailsView.setUserScoreField(userResults.getUserData().getBestScore()); setLanguageLabels(); } private void setLanguageLabels() { final String[] spokenLanguages = userResults.getUserData().getMetadataValue(metadataFieldProvider.languagesMetadataField).split("\\|"); String spokenLanguage1 = (spokenLanguages.length > 0) ? spokenLanguages[0] : ""; String spokenLanguage2 = (spokenLanguages.length > 1) ? spokenLanguages[1] : ""; String spokenLanguage3 = (spokenLanguages.length > 2) ? spokenLanguages[2] : ""; String spokenLanguage4 = (spokenLanguages.length > 3) ? spokenLanguages[3] : ""; playerDetailsView.setSpokenLanguages(spokenLanguage1, spokenLanguage2, spokenLanguage3, spokenLanguage4); } @Override boolean nextEventFired() { new LocalStorage().storeData(userResults); return true; } }