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 
27 META_BEGIN_NAMESPACE()
28 namespace Internal {
29 
30 // IObject
GetInstanceId() const31 InstanceId BaseObject::GetInstanceId() const
32 {
33     return instanceId_;
34 }
35 
GetName() const36 BASE_NS::string BaseObject::GetName() const
37 {
38     return GetInstanceId().ToString();
39 }
40 
Resolve(const RefUri & uri) const41 IObject::Ptr BaseObject::Resolve(const RefUri& uri) const
42 {
43     return DefaultResolveObject(me_.lock(), uri);
44 }
45 
GetSelf() const46 IObject::Ptr BaseObject::GetSelf() const
47 {
48     return me_.lock();
49 }
50 
GetInterfaces() const51 BASE_NS::vector<BASE_NS::Uid> BaseObject::GetInterfaces() const
52 {
53     return IntroduceInterfaces::GetInterfacesVector();
54 }
55 
GetObjectFlags() const56 ObjectFlagBitsValue BaseObject::GetObjectFlags() const
57 {
58     return flags_;
59 }
60 
SetObjectFlags(const ObjectFlagBitsValue & value)61 void BaseObject::SetObjectFlags(const ObjectFlagBitsValue& value)
62 {
63     flags_ = value;
64 }
65 
GetObjectDefaultFlags() const66 ObjectFlagBitsValue BaseObject::GetObjectDefaultFlags() const
67 {
68     return ObjectFlagBits::DEFAULT_FLAGS;
69 }
70 
71 // IDerived
SetSuperInstance(const IObject::Ptr & aggr,const IObject::Ptr & super)72 void BaseObject::SetSuperInstance(const IObject::Ptr& aggr, const IObject::Ptr& super)
73 {
74     me_ = interface_pointer_cast<IObjectInstance>(aggr);
75 }
GetSuperClassUid() const76 BASE_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
Build(const IMetadata::Ptr &)83 bool BaseObject::Build(const IMetadata::Ptr&)
84 {
85     // Set object flags to class default.
86     SetObjectFlags(GetObjectDefaultFlags());
87     return true;
88 }
SetInstanceId(InstanceId uid)89 void BaseObject::SetInstanceId(InstanceId uid)
90 {
91     instanceId_ = uid;
92 }
Destroy()93 void BaseObject::Destroy()
94 {
95     GetObjectRegistry().DisposeObject(instanceId_);
96 }
97 
GetObjectRegistry() const98 IObjectRegistry& BaseObject::GetObjectRegistry() const
99 {
100     return META_NS::GetObjectRegistry();
101 }
102 
103 } // namespace Internal
104 
105 META_END_NAMESPACE()
106