blob: 93dbf3be7f0eafb28f356d06c4e8eb5fd578fc1b [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "peridot/bin/sessionmgr/puppet_master/make_production_impl.h"
#include <memory>
#include "peridot/bin/sessionmgr/puppet_master/command_runners/add_mod_command_runner.h"
#include "peridot/bin/sessionmgr/puppet_master/command_runners/focus_mod_command_runner.h"
#include "peridot/bin/sessionmgr/puppet_master/command_runners/remove_mod_command_runner.h"
#include "peridot/bin/sessionmgr/puppet_master/command_runners/set_focus_state_command_runner.h"
#include "peridot/bin/sessionmgr/puppet_master/command_runners/set_kind_of_proto_story_option_command_runner.h"
#include "peridot/bin/sessionmgr/puppet_master/command_runners/set_link_value_command_runner.h"
#include "peridot/bin/sessionmgr/puppet_master/dispatch_story_command_executor.h"
namespace modular {
class PuppetMasterImpl;
using StoryControllerFactory =
fit::function<fuchsia::modular::StoryControllerPtr(
fidl::StringPtr story_id)>;
std::unique_ptr<StoryCommandExecutor> MakeProductionStoryCommandExecutor(
SessionStorage* const session_storage,
fuchsia::modular::FocusProviderPtr focus_provider,
fuchsia::modular::ModuleResolver* const module_resolver,
fuchsia::modular::EntityResolver* const entity_resolver,
// TODO(miguelfrde): we shouldn't create this dependency here. Instead
// an interface similar to StoryStorage should be created for Runtime
// use cases.
fit::function<void(std::string, std::vector<std::string>)> module_focuser) {
std::map<fuchsia::modular::StoryCommand::Tag, std::unique_ptr<CommandRunner>>
command_runners;
command_runners.emplace(
fuchsia::modular::StoryCommand::Tag::kSetFocusState,
new SetFocusStateCommandRunner(std::move(focus_provider)));
command_runners.emplace(
fuchsia::modular::StoryCommand::Tag::kAddMod,
new AddModCommandRunner(module_resolver, entity_resolver));
command_runners.emplace(fuchsia::modular::StoryCommand::Tag::kFocusMod,
new FocusModCommandRunner(std::move(module_focuser)));
command_runners.emplace(fuchsia::modular::StoryCommand::Tag::kRemoveMod,
new RemoveModCommandRunner());
command_runners.emplace(fuchsia::modular::StoryCommand::Tag::kSetLinkValue,
new SetLinkValueCommandRunner());
command_runners.emplace(
fuchsia::modular::StoryCommand::Tag::kSetKindOfProtoStoryOption,
new SetKindOfProtoStoryOptionCommandRunner(session_storage));
auto executor = std::make_unique<DispatchStoryCommandExecutor>(
session_storage, std::move(command_runners));
return executor;
}
} // namespace modular