2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.Collections.Generic;
19 using System.Reflection;
21 using Tizen.NUI.BaseComponents;
22 using Tizen.NUI.Binding;
23 using Tizen.NUI.Binding.Internals;
26 namespace Tizen.NUI.EXaml
28 internal class SetProperty : Operation
30 public SetProperty(GlobalDataList globalDataList, int instanceIndex, int propertyIndex, object value)
32 this.instanceIndex = instanceIndex;
33 this.propertyIndex = propertyIndex;
35 this.globalDataList = globalDataList;
38 private GlobalDataList globalDataList;
42 object instance = globalDataList.GatheredInstances[instanceIndex];
45 throw new Exception(String.Format("Can't get instance by index {0}", instanceIndex));
48 var property = globalDataList.GatheredProperties[propertyIndex];
52 throw new Exception(String.Format("Can't find property {0} in type {1}", property.Name, instance.GetType().FullName));
55 if (null == property.SetMethod)
57 throw new Exception(String.Format("Property {0} hasn't set method", property.Name));
60 if (value is Instance valueInstance)
62 int valueIndex = valueInstance.Index;
63 value = globalDataList.GatheredInstances[valueIndex];
67 throw new Exception(String.Format("Can't get instance of value by index {0}", valueIndex));
71 if (value is ResourcePathExtension resourcePath)
73 value = resourcePath.ProvideValue(null);
76 property.SetMethod.Invoke(instance, new object[] { value });
79 private int instanceIndex;
80 private int propertyIndex;