10e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu//
20e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// Copyright (C) 2015 The Android Open Source Project
30e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu//
40e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// Licensed under the Apache License, Version 2.0 (the "License");
50e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// you may not use this file except in compliance with the License.
60e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// You may obtain a copy of the License at
70e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu//
80e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu//      http://www.apache.org/licenses/LICENSE-2.0
90e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu//
100e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// Unless required by applicable law or agreed to in writing, software
110e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// distributed under the License is distributed on an "AS IS" BASIS,
120e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// See the License for the specific language governing permissions and
140e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu// limitations under the License.
150e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu//
160e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
170e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#ifndef APMANAGER_DBUS_SERVICE_DBUS_ADAPTOR_H_
180e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#define APMANAGER_DBUS_SERVICE_DBUS_ADAPTOR_H_
190e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
200e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#include <base/macros.h>
210e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
220e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#include <dbus_bindings/org.chromium.apmanager.Service.h>
230e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
242ea547f45d2a143e1b25b275c46d1f317186b07aPeter Qiu#include "apmanager/error.h"
250e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#include "apmanager/service_adaptor_interface.h"
260e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
270e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiunamespace apmanager {
280e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
290e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiuclass Service;
300e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
310e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiuclass ServiceDBusAdaptor : public org::chromium::apmanager::ServiceInterface,
320e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu                           public ServiceAdaptorInterface {
330e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu public:
340e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  ServiceDBusAdaptor(const scoped_refptr<dbus::Bus>& bus,
350e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu                     brillo::dbus_utils::ExportedObjectManager* object_manager,
360e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu                     Service* service);
370e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  ~ServiceDBusAdaptor() override;
380e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
390e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  // Implementation of org::chromium::apmanager::ServiceInterface
400e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  void Start(
410e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu      std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<>>
420e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu          response) override;
432ea547f45d2a143e1b25b275c46d1f317186b07aPeter Qiu  bool Stop(brillo::ErrorPtr* dbus_error) override;
440e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
450e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  // Implementation of ServiceAdaptorInterface.
460e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  RPCObjectIdentifier GetRpcObjectIdentifier() override;
470e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  void SetConfig(Config* config) override;
480e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  void SetState(const std::string& state) override;
490e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
500e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu private:
512ea547f45d2a143e1b25b275c46d1f317186b07aPeter Qiu  void OnStartCompleted(
522ea547f45d2a143e1b25b275c46d1f317186b07aPeter Qiu      std::unique_ptr<brillo::dbus_utils::DBusMethodResponse<>> response,
532ea547f45d2a143e1b25b275c46d1f317186b07aPeter Qiu      const Error& error);
542ea547f45d2a143e1b25b275c46d1f317186b07aPeter Qiu
550e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  org::chromium::apmanager::ServiceAdaptor adaptor_;
560e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  dbus::ObjectPath object_path_;
570e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  brillo::dbus_utils::DBusObject dbus_object_;
580e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  Service* service_;
590e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
600e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu  DISALLOW_COPY_AND_ASSIGN(ServiceDBusAdaptor);
610e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu};
620e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
630e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu}  // namespace apmanager
640e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu
650e92d1ea02ff4aec2a3c333dd2258d81c1211acePeter Qiu#endif  // APMANAGER_DBUS_SERVICE_DBUS_ADAPTOR_H_
66