| // 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 |