/*
* Copyright (c) 2017
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
package jsettlers.main.android.mainmenu.factories;
import static java8.util.stream.StreamSupport.stream;
import java.util.List;
import jsettlers.common.menu.IJoinPhaseMultiplayerGameConnector;
import jsettlers.common.utils.collections.ChangingList;
import jsettlers.logic.map.loading.MapLoader;
import jsettlers.main.android.core.AndroidPreferences;
import jsettlers.main.android.core.GameManager;
import jsettlers.main.android.core.GameStarter;
import jsettlers.main.android.core.resources.scanner.ResourcesLocationManager;
import jsettlers.main.android.mainmenu.navigation.MainMenuNavigator;
import jsettlers.main.android.mainmenu.presenters.MainMenuPresenter;
import jsettlers.main.android.mainmenu.presenters.SettingsPresenter;
import jsettlers.main.android.mainmenu.presenters.picker.JoinMultiPlayerPickerPresenter;
import jsettlers.main.android.mainmenu.presenters.picker.LoadSinglePlayerPickerPresenter;
import jsettlers.main.android.mainmenu.presenters.picker.NewMultiPlayerPickerPresenter;
import jsettlers.main.android.mainmenu.presenters.picker.NewSinglePlayerPickerPresenter;
import jsettlers.main.android.mainmenu.presenters.setup.JoinMultiPlayerSetupPresenter;
import jsettlers.main.android.mainmenu.presenters.setup.JoinMultiPlayerSetupPresenterImpl;
import jsettlers.main.android.mainmenu.presenters.setup.JoinMultiPlayerSetupPresenterPop;
import jsettlers.main.android.mainmenu.presenters.setup.NewMultiPlayerSetupPresenter;
import jsettlers.main.android.mainmenu.presenters.setup.NewMultiPlayerSetupPresenterImpl;
import jsettlers.main.android.mainmenu.presenters.setup.NewMultiPlayerSetupPresenterPop;
import jsettlers.main.android.mainmenu.presenters.setup.NewSinglePlayerSetupPresenter;
import jsettlers.main.android.mainmenu.views.JoinMultiPlayerPickerView;
import jsettlers.main.android.mainmenu.views.JoinMultiPlayerSetupView;
import jsettlers.main.android.mainmenu.views.LoadSinglePlayerPickerView;
import jsettlers.main.android.mainmenu.views.MainMenuView;
import jsettlers.main.android.mainmenu.views.MapPickerView;
import jsettlers.main.android.mainmenu.views.NewMultiPlayerPickerView;
import jsettlers.main.android.mainmenu.views.NewMultiPlayerSetupView;
import jsettlers.main.android.mainmenu.views.NewSinglePlayerSetupView;
import jsettlers.main.android.mainmenu.views.SettingsView;
import android.app.Activity;
import android.content.Context;
/**
* Created by tompr on 03/02/2017.
*/
public class PresenterFactory {
public static MainMenuPresenter createMainMenuPresenter(Activity activity, MainMenuView view) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameManager gameManager = (GameManager) activity.getApplication();
return new MainMenuPresenter(view, navigator, gameManager, new ResourcesLocationManager(activity));
}
public static SettingsPresenter createSettingsPresenter(Context context, SettingsView view) {
return new SettingsPresenter(view, new AndroidPreferences(context));
}
/**
* Picker screen presenters
*/
public static NewSinglePlayerPickerPresenter createNewSinglePlayerPickerPresenter(Activity activity, MapPickerView view) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
ChangingList<MapLoader> changingMaps = gameStarter.getMapList().getFreshMaps();
return new NewSinglePlayerPickerPresenter(view, navigator, gameStarter, changingMaps);
}
public static LoadSinglePlayerPickerPresenter createLoadSinglePlayerPickerPresenter(Activity activity, LoadSinglePlayerPickerView view) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
ChangingList<? extends MapLoader> changingMaps = gameStarter.getMapList().getSavedMaps();
return new LoadSinglePlayerPickerPresenter(view, navigator, gameStarter, changingMaps);
}
public static NewMultiPlayerPickerPresenter createNewMultiPlayerPickerPresenter(Activity activity, NewMultiPlayerPickerView view) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
ChangingList<MapLoader> changingMaps = gameStarter.getMapList().getFreshMaps();
return new NewMultiPlayerPickerPresenter(view, navigator, gameStarter, new AndroidPreferences(activity), changingMaps);
}
public static JoinMultiPlayerPickerPresenter createJoinMultiPlayerPickerPresenter(Activity activity, JoinMultiPlayerPickerView view) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
return new JoinMultiPlayerPickerPresenter(view, navigator, gameStarter);
}
/**
* Setup screen presenters
*/
public static NewSinglePlayerSetupPresenter createNewSinglePlayerSetupPresenter(Activity activity, NewSinglePlayerSetupView view, String mapId) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
List<MapLoader> maps = gameStarter.getMapList().getFreshMaps().getItems();
MapLoader mapDefinition = stream(maps)
.filter(x -> mapId.equals(x.getMapId()))
.findFirst()
.get();
return new NewSinglePlayerSetupPresenter(view, navigator, gameStarter, new AndroidPreferences(activity), mapDefinition);
}
public static NewMultiPlayerSetupPresenter createNewMultiPlayerSetupPresenter(Activity activity, NewMultiPlayerSetupView view, String mapId) {
MainMenuNavigator mainMenuNavigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
IJoinPhaseMultiplayerGameConnector joinPhaseMultiplayerGameConnector = gameStarter.getJoinPhaseMultiplayerConnector();
List<MapLoader> maps = gameStarter.getMapList().getFreshMaps().getItems();
MapLoader mapDefinition = stream(maps)
.filter(x -> mapId.equals(x.getMapId()))
.findFirst()
.get();
if (joinPhaseMultiplayerGameConnector == null || mapDefinition == null) {
return new NewMultiPlayerSetupPresenterPop(mainMenuNavigator);
} else {
return new NewMultiPlayerSetupPresenterImpl(view, mainMenuNavigator, gameStarter, joinPhaseMultiplayerGameConnector,
new AndroidPreferences(activity), mapDefinition);
}
}
public static JoinMultiPlayerSetupPresenter createJoinMultiPlayerSetupPresenter(Activity activity, JoinMultiPlayerSetupView view, String mapId) {
MainMenuNavigator navigator = (MainMenuNavigator) activity;
GameStarter gameStarter = (GameStarter) activity.getApplication();
IJoinPhaseMultiplayerGameConnector connector = gameStarter.getJoinPhaseMultiplayerConnector();
List<MapLoader> maps = gameStarter.getMapList().getFreshMaps().getItems();
MapLoader mapDefinition = stream(maps)
.filter(x -> mapId.equals(x.getMapId()))
.findFirst()
.get();
if (connector == null/* || mapDefinition == null */) {
return new JoinMultiPlayerSetupPresenterPop(navigator);
} else {
return new JoinMultiPlayerSetupPresenterImpl(view, navigator, gameStarter, connector, new AndroidPreferences(activity), mapDefinition);
}
}
}