1/*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15#include "base_object.h"
16
17#include <base/util/uid_util.h>
18#include <core/plugin/intf_class_factory.h>
19
20#include <meta/interface/builtin_objects.h>
21#include <meta/interface/intf_object_registry.h>
22#include <meta/interface/intf_proxy_object.h>
23#include <meta/interface/property/intf_property_internal.h>
24
25#include "ref_uri_util.h"
26
27META_BEGIN_NAMESPACE()
28namespace Internal {
29
30// IObject
31InstanceId BaseObject::GetInstanceId() const
32{
33    return instanceId_;
34}
35
36BASE_NS::string BaseObject::GetName() const
37{
38    return GetInstanceId().ToString();
39}
40
41IObject::Ptr BaseObject::Resolve(const RefUri& uri) const
42{
43    return DefaultResolveObject(me_.lock(), uri);
44}
45
46IObject::Ptr BaseObject::GetSelf() const
47{
48    return me_.lock();
49}
50
51BASE_NS::vector<BASE_NS::Uid> BaseObject::GetInterfaces() const
52{
53    return IntroduceInterfaces::GetInterfacesVector();
54}
55
56ObjectFlagBitsValue BaseObject::GetObjectFlags() const
57{
58    return flags_;
59}
60
61void BaseObject::SetObjectFlags(const ObjectFlagBitsValue& value)
62{
63    flags_ = value;
64}
65
66ObjectFlagBitsValue BaseObject::GetObjectDefaultFlags() const
67{
68    return ObjectFlagBits::DEFAULT_FLAGS;
69}
70
71// IDerived
72void BaseObject::SetSuperInstance(const IObject::Ptr& aggr, const IObject::Ptr& super)
73{
74    me_ = interface_pointer_cast<IObjectInstance>(aggr);
75}
76BASE_NS::Uid BaseObject::GetSuperClassUid() const
77{
78    // empty uid is "invalid", which means do not create a sub object ...
79    return {};
80}
81
82// ILifecycle
83bool BaseObject::Build(const IMetadata::Ptr&)
84{
85    // Set object flags to class default.
86    SetObjectFlags(GetObjectDefaultFlags());
87    return true;
88}
89void BaseObject::SetInstanceId(InstanceId uid)
90{
91    instanceId_ = uid;
92}
93void BaseObject::Destroy()
94{
95    GetObjectRegistry().DisposeObject(instanceId_);
96}
97
98IObjectRegistry& BaseObject::GetObjectRegistry() const
99{
100    return META_NS::GetObjectRegistry();
101}
102
103} // namespace Internal
104
105META_END_NAMESPACE()
106