diff options
author | Justin Clark-Casey (justincc) | 2013-06-27 23:14:28 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2013-06-27 23:14:28 +0100 |
commit | f7d09b898ad6df32b3f07cb64657623980178c2f (patch) | |
tree | f7f2b1117e9843267dab89993ad6d5492c1b3cc8 /OpenSim | |
parent | Update temporary "Unknown UserUMMTGUN2" name to "Unknown UserUMMTGUN3" to see... (diff) | |
download | opensim-SC_OLD-f7d09b898ad6df32b3f07cb64657623980178c2f.zip opensim-SC_OLD-f7d09b898ad6df32b3f07cb64657623980178c2f.tar.gz opensim-SC_OLD-f7d09b898ad6df32b3f07cb64657623980178c2f.tar.bz2 opensim-SC_OLD-f7d09b898ad6df32b3f07cb64657623980178c2f.tar.xz |
Make the concept of namespaces explicit in dynamic attributes
This is in order to reduce the likelihood of naming clashes, make it easier to filter in/out attributes, ensure uniformity, etc.
All dynattrs in the opensim distro itself or likely future ones should be in the "OpenSim" namespace.
This does alter the underlying dynattrs data structure. All data in previous structures may not be available, though old structures should not cause errors.
This is done without notice since this feature has been explicitly labelled as experimental, subject to change and has not been in a release.
However, existing materials data is being preserved by moving it to the "Materials" store in the "OpenSim" namespace.
Diffstat (limited to 'OpenSim')
11 files changed, 257 insertions, 172 deletions
diff --git a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs index 476f57a..5135050 100644 --- a/OpenSim/Data/MSSQL/MSSQLSimulationData.cs +++ b/OpenSim/Data/MSSQL/MSSQLSimulationData.cs | |||
@@ -2100,7 +2100,7 @@ VALUES | |||
2100 | parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum)); | 2100 | parameters.Add(_Database.CreateParameter("LinkNumber", prim.LinkNum)); |
2101 | parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl)); | 2101 | parameters.Add(_Database.CreateParameter("MediaURL", prim.MediaUrl)); |
2102 | 2102 | ||
2103 | if (prim.DynAttrs.Count > 0) | 2103 | if (prim.DynAttrs.CountNamespaces > 0) |
2104 | parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml())); | 2104 | parameters.Add(_Database.CreateParameter("DynAttrs", prim.DynAttrs.ToXml())); |
2105 | else | 2105 | else |
2106 | parameters.Add(_Database.CreateParameter("DynAttrs", null)); | 2106 | parameters.Add(_Database.CreateParameter("DynAttrs", null)); |
diff --git a/OpenSim/Data/MySQL/MySQLSimulationData.cs b/OpenSim/Data/MySQL/MySQLSimulationData.cs index de52623..cf367ef 100644 --- a/OpenSim/Data/MySQL/MySQLSimulationData.cs +++ b/OpenSim/Data/MySQL/MySQLSimulationData.cs | |||
@@ -1679,7 +1679,7 @@ namespace OpenSim.Data.MySQL | |||
1679 | else | 1679 | else |
1680 | cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]); | 1680 | cmd.Parameters.AddWithValue("KeyframeMotion", new Byte[0]); |
1681 | 1681 | ||
1682 | if (prim.DynAttrs.Count > 0) | 1682 | if (prim.DynAttrs.CountNamespaces > 0) |
1683 | cmd.Parameters.AddWithValue("DynAttrs", prim.DynAttrs.ToXml()); | 1683 | cmd.Parameters.AddWithValue("DynAttrs", prim.DynAttrs.ToXml()); |
1684 | else | 1684 | else |
1685 | cmd.Parameters.AddWithValue("DynAttrs", null); | 1685 | cmd.Parameters.AddWithValue("DynAttrs", null); |
diff --git a/OpenSim/Data/SQLite/SQLiteSimulationData.cs b/OpenSim/Data/SQLite/SQLiteSimulationData.cs index c35bba2..eba6612 100644 --- a/OpenSim/Data/SQLite/SQLiteSimulationData.cs +++ b/OpenSim/Data/SQLite/SQLiteSimulationData.cs | |||
@@ -2176,7 +2176,7 @@ namespace OpenSim.Data.SQLite | |||
2176 | 2176 | ||
2177 | row["MediaURL"] = prim.MediaUrl; | 2177 | row["MediaURL"] = prim.MediaUrl; |
2178 | 2178 | ||
2179 | if (prim.DynAttrs.Count > 0) | 2179 | if (prim.DynAttrs.CountNamespaces > 0) |
2180 | row["DynAttrs"] = prim.DynAttrs.ToXml(); | 2180 | row["DynAttrs"] = prim.DynAttrs.ToXml(); |
2181 | else | 2181 | else |
2182 | row["DynAttrs"] = null; | 2182 | row["DynAttrs"] = null; |
diff --git a/OpenSim/Framework/DAMap.cs b/OpenSim/Framework/DAMap.cs index df4a6bc..a57393b 100644 --- a/OpenSim/Framework/DAMap.cs +++ b/OpenSim/Framework/DAMap.cs | |||
@@ -29,10 +29,12 @@ using System; | |||
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.IO; | 31 | using System.IO; |
32 | using System.Reflection; | ||
32 | using System.Text; | 33 | using System.Text; |
33 | using System.Xml; | 34 | using System.Xml; |
34 | using System.Xml.Schema; | 35 | using System.Xml.Schema; |
35 | using System.Xml.Serialization; | 36 | using System.Xml.Serialization; |
37 | using log4net; | ||
36 | using OpenMetaverse; | 38 | using OpenMetaverse; |
37 | using OpenMetaverse.StructuredData; | 39 | using OpenMetaverse.StructuredData; |
38 | 40 | ||
@@ -48,13 +50,20 @@ namespace OpenSim.Framework | |||
48 | /// within their data store. However, avoid storing large amounts of data because that | 50 | /// within their data store. However, avoid storing large amounts of data because that |
49 | /// would slow down database access. | 51 | /// would slow down database access. |
50 | /// </remarks> | 52 | /// </remarks> |
51 | public class DAMap : IDictionary<string, OSDMap>, IXmlSerializable | 53 | public class DAMap : IXmlSerializable |
52 | { | 54 | { |
53 | private static readonly int MIN_STORE_NAME_LENGTH = 4; | 55 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
54 | 56 | ||
55 | protected OSDMap m_map; | 57 | private static readonly int MIN_NAMESPACE_LENGTH = 4; |
56 | 58 | ||
57 | public DAMap() { m_map = new OSDMap(); } | 59 | private OSDMap m_map = new OSDMap(); |
60 | |||
61 | // WARNING: this is temporary for experimentation only, it will be removed!!!! | ||
62 | public OSDMap TopLevelMap | ||
63 | { | ||
64 | get { return m_map; } | ||
65 | set { m_map = value; } | ||
66 | } | ||
58 | 67 | ||
59 | public XmlSchema GetSchema() { return null; } | 68 | public XmlSchema GetSchema() { return null; } |
60 | 69 | ||
@@ -64,39 +73,34 @@ namespace OpenSim.Framework | |||
64 | map.ReadXml(rawXml); | 73 | map.ReadXml(rawXml); |
65 | return map; | 74 | return map; |
66 | } | 75 | } |
67 | 76 | ||
77 | public void ReadXml(XmlReader reader) | ||
78 | { | ||
79 | ReadXml(reader.ReadInnerXml()); | ||
80 | } | ||
81 | |||
68 | public void ReadXml(string rawXml) | 82 | public void ReadXml(string rawXml) |
69 | { | 83 | { |
70 | // System.Console.WriteLine("Trying to deserialize [{0}]", rawXml); | 84 | // System.Console.WriteLine("Trying to deserialize [{0}]", rawXml); |
71 | 85 | ||
72 | lock (this) | 86 | lock (this) |
87 | { | ||
73 | m_map = (OSDMap)OSDParser.DeserializeLLSDXml(rawXml); | 88 | m_map = (OSDMap)OSDParser.DeserializeLLSDXml(rawXml); |
89 | SanitiseMap(this); | ||
90 | } | ||
74 | } | 91 | } |
75 | 92 | ||
76 | // WARNING: this is temporary for experimentation only, it will be removed!!!! | 93 | public void WriteXml(XmlWriter writer) |
77 | public OSDMap TopLevelMap | ||
78 | { | 94 | { |
79 | get { return m_map; } | 95 | writer.WriteRaw(ToXml()); |
80 | set { m_map = value; } | ||
81 | } | 96 | } |
82 | |||
83 | 97 | ||
84 | public void ReadXml(XmlReader reader) | ||
85 | { | ||
86 | ReadXml(reader.ReadInnerXml()); | ||
87 | } | ||
88 | |||
89 | public string ToXml() | 98 | public string ToXml() |
90 | { | 99 | { |
91 | lock (this) | 100 | lock (this) |
92 | return OSDParser.SerializeLLSDXmlString(m_map); | 101 | return OSDParser.SerializeLLSDXmlString(m_map); |
93 | } | 102 | } |
94 | 103 | ||
95 | public void WriteXml(XmlWriter writer) | ||
96 | { | ||
97 | writer.WriteRaw(ToXml()); | ||
98 | } | ||
99 | |||
100 | public void CopyFrom(DAMap other) | 104 | public void CopyFrom(DAMap other) |
101 | { | 105 | { |
102 | // Deep copy | 106 | // Deep copy |
@@ -104,7 +108,7 @@ namespace OpenSim.Framework | |||
104 | string data = null; | 108 | string data = null; |
105 | lock (other) | 109 | lock (other) |
106 | { | 110 | { |
107 | if (other.Count > 0) | 111 | if (other.CountNamespaces > 0) |
108 | { | 112 | { |
109 | data = OSDParser.SerializeLLSDXmlString(other.m_map); | 113 | data = OSDParser.SerializeLLSDXmlString(other.m_map); |
110 | } | 114 | } |
@@ -120,59 +124,133 @@ namespace OpenSim.Framework | |||
120 | } | 124 | } |
121 | 125 | ||
122 | /// <summary> | 126 | /// <summary> |
123 | /// Returns the number of data stores. | 127 | /// Sanitise the map to remove any namespaces or stores that are not OSDMap. |
124 | /// </summary> | 128 | /// </summary> |
125 | public int Count { get { lock (this) { return m_map.Count; } } } | 129 | /// <param name='map'> |
126 | 130 | /// </param> | |
127 | public bool IsReadOnly { get { return false; } } | 131 | public static void SanitiseMap(DAMap daMap) |
128 | 132 | { | |
133 | List<string> keysToRemove = null; | ||
134 | |||
135 | // Hard-coded special case that needs to be removed in the future. Normally, modules themselves should | ||
136 | // handle reading data from old locations | ||
137 | bool osMaterialsMigrationRequired = false; | ||
138 | |||
139 | OSDMap namespacesMap = daMap.m_map; | ||
140 | |||
141 | foreach (string key in namespacesMap.Keys) | ||
142 | { | ||
143 | // Console.WriteLine("Processing ns {0}", key); | ||
144 | if (!(namespacesMap[key] is OSDMap)) | ||
145 | { | ||
146 | if (keysToRemove == null) | ||
147 | keysToRemove = new List<string>(); | ||
148 | |||
149 | keysToRemove.Add(key); | ||
150 | } | ||
151 | else if (key == "OS:Materials") | ||
152 | { | ||
153 | osMaterialsMigrationRequired = true; | ||
154 | } | ||
155 | } | ||
156 | |||
157 | if (keysToRemove != null) | ||
158 | { | ||
159 | foreach (string key in keysToRemove) | ||
160 | { | ||
161 | // Console.WriteLine ("Removing bad ns {0}", key); | ||
162 | namespacesMap.Remove(key); | ||
163 | } | ||
164 | } | ||
165 | |||
166 | // Hard-coded special case that needs to be removed in the future. Normally, modules themselves should | ||
167 | // handle reading data from old locations | ||
168 | if (osMaterialsMigrationRequired) | ||
169 | daMap.SetStore("OpenSim", "Materials", (OSDMap)namespacesMap["OS:Materials"]); | ||
170 | |||
171 | foreach (OSD nsOsd in namespacesMap.Values) | ||
172 | { | ||
173 | OSDMap nsOsdMap = (OSDMap)nsOsd; | ||
174 | keysToRemove = null; | ||
175 | |||
176 | foreach (string key in nsOsdMap.Keys) | ||
177 | { | ||
178 | if (!(nsOsdMap[key] is OSDMap)) | ||
179 | { | ||
180 | if (keysToRemove == null) | ||
181 | keysToRemove = new List<string>(); | ||
182 | |||
183 | keysToRemove.Add(key); | ||
184 | } | ||
185 | } | ||
186 | |||
187 | if (keysToRemove != null) | ||
188 | foreach (string key in keysToRemove) | ||
189 | nsOsdMap.Remove(key); | ||
190 | } | ||
191 | } | ||
192 | |||
129 | /// <summary> | 193 | /// <summary> |
130 | /// Returns the names of the data stores. | 194 | /// Get the number of namespaces |
131 | /// </summary> | 195 | /// </summary> |
132 | public ICollection<string> Keys { get { lock (this) { return m_map.Keys; } } } | 196 | public int CountNamespaces { get { lock (this) { return m_map.Count; } } } |
133 | 197 | ||
134 | /// <summary> | 198 | /// <summary> |
135 | /// Returns all the data stores. | 199 | /// Get the number of stores. |
136 | /// </summary> | 200 | /// </summary> |
137 | public ICollection<OSDMap> Values | 201 | public int CountStores |
138 | { | 202 | { |
139 | get | 203 | get |
140 | { | 204 | { |
205 | int count = 0; | ||
206 | |||
141 | lock (this) | 207 | lock (this) |
142 | { | 208 | { |
143 | List<OSDMap> stores = new List<OSDMap>(m_map.Count); | 209 | foreach (OSD osdNamespace in m_map) |
144 | foreach (OSD llsd in m_map.Values) | 210 | { |
145 | stores.Add((OSDMap)llsd); | 211 | count += ((OSDMap)osdNamespace).Count; |
146 | return stores; | 212 | } |
147 | } | 213 | } |
214 | |||
215 | return count; | ||
148 | } | 216 | } |
149 | } | 217 | } |
150 | 218 | ||
151 | /// <summary> | 219 | public OSDMap GetStore(string ns, string storeName) |
152 | /// Gets or sets one data store. | 220 | { |
153 | /// </summary> | 221 | OSD namespaceOsd; |
154 | /// <param name="key">Store name</param> | 222 | |
155 | /// <returns></returns> | 223 | lock (this) |
156 | public OSDMap this[string key] | 224 | { |
157 | { | 225 | if (m_map.TryGetValue(ns, out namespaceOsd)) |
158 | get | ||
159 | { | ||
160 | OSD llsd; | ||
161 | |||
162 | lock (this) | ||
163 | { | 226 | { |
164 | if (m_map.TryGetValue(key, out llsd)) | 227 | OSD store; |
165 | return (OSDMap)llsd; | 228 | |
166 | else | 229 | if (((OSDMap)namespaceOsd).TryGetValue(storeName, out store)) |
167 | return null; | 230 | return (OSDMap)store; |
168 | } | 231 | } |
169 | } | 232 | } |
170 | 233 | ||
171 | set | 234 | return null; |
235 | } | ||
236 | |||
237 | public void SetStore(string ns, string storeName, OSDMap store) | ||
238 | { | ||
239 | ValidateNamespace(ns); | ||
240 | OSDMap nsMap; | ||
241 | |||
242 | lock (this) | ||
172 | { | 243 | { |
173 | ValidateKey(key); | 244 | if (!m_map.ContainsKey(ns)) |
174 | lock (this) | 245 | { |
175 | m_map[key] = value; | 246 | nsMap = new OSDMap(); |
247 | m_map[ns] = nsMap; | ||
248 | } | ||
249 | |||
250 | nsMap = (OSDMap)m_map[ns]; | ||
251 | |||
252 | // m_log.DebugFormat("[DA MAP]: Setting store to {0}:{1}", ns, storeName); | ||
253 | nsMap[storeName] = store; | ||
176 | } | 254 | } |
177 | } | 255 | } |
178 | 256 | ||
@@ -180,54 +258,46 @@ namespace OpenSim.Framework | |||
180 | /// Validate the key used for storing separate data stores. | 258 | /// Validate the key used for storing separate data stores. |
181 | /// </summary> | 259 | /// </summary> |
182 | /// <param name='key'></param> | 260 | /// <param name='key'></param> |
183 | public static void ValidateKey(string key) | 261 | public static void ValidateNamespace(string ns) |
184 | { | 262 | { |
185 | if (key.Length < MIN_STORE_NAME_LENGTH) | 263 | if (ns.Length < MIN_NAMESPACE_LENGTH) |
186 | throw new Exception("Minimum store name length is " + MIN_STORE_NAME_LENGTH); | 264 | throw new Exception("Minimum namespace length is " + MIN_NAMESPACE_LENGTH); |
187 | } | 265 | } |
188 | 266 | ||
189 | public bool ContainsKey(string key) | 267 | public bool ContainsStore(string ns, string storeName) |
190 | { | 268 | { |
191 | lock (this) | 269 | OSD namespaceOsd; |
192 | return m_map.ContainsKey(key); | ||
193 | } | ||
194 | |||
195 | public void Add(string key, OSDMap store) | ||
196 | { | ||
197 | ValidateKey(key); | ||
198 | lock (this) | ||
199 | m_map.Add(key, store); | ||
200 | } | ||
201 | 270 | ||
202 | public void Add(KeyValuePair<string, OSDMap> kvp) | ||
203 | { | ||
204 | ValidateKey(kvp.Key); | ||
205 | lock (this) | 271 | lock (this) |
206 | m_map.Add(kvp.Key, kvp.Value); | 272 | { |
207 | } | 273 | if (m_map.TryGetValue(ns, out namespaceOsd)) |
274 | { | ||
275 | return ((OSDMap)namespaceOsd).ContainsKey(storeName); | ||
276 | } | ||
277 | } | ||
208 | 278 | ||
209 | public bool Remove(string key) | 279 | return false; |
210 | { | 280 | } |
211 | lock (this) | ||
212 | return m_map.Remove(key); | ||
213 | } | ||
214 | 281 | ||
215 | public bool TryGetValue(string key, out OSDMap store) | 282 | public bool TryGetStore(string ns, string storeName, out OSDMap store) |
216 | { | 283 | { |
284 | OSD namespaceOsd; | ||
285 | |||
217 | lock (this) | 286 | lock (this) |
218 | { | 287 | { |
219 | OSD llsd; | 288 | if (m_map.TryGetValue(ns, out namespaceOsd)) |
220 | if (m_map.TryGetValue(key, out llsd)) | ||
221 | { | ||
222 | store = (OSDMap)llsd; | ||
223 | return true; | ||
224 | } | ||
225 | else | ||
226 | { | 289 | { |
227 | store = null; | 290 | OSD storeOsd; |
228 | return false; | 291 | |
292 | bool result = ((OSDMap)namespaceOsd).TryGetValue(storeName, out storeOsd); | ||
293 | store = (OSDMap)storeOsd; | ||
294 | |||
295 | return result; | ||
229 | } | 296 | } |
230 | } | 297 | } |
298 | |||
299 | store = null; | ||
300 | return false; | ||
231 | } | 301 | } |
232 | 302 | ||
233 | public void Clear() | 303 | public void Clear() |
@@ -235,39 +305,25 @@ namespace OpenSim.Framework | |||
235 | lock (this) | 305 | lock (this) |
236 | m_map.Clear(); | 306 | m_map.Clear(); |
237 | } | 307 | } |
238 | |||
239 | public bool Contains(KeyValuePair<string, OSDMap> kvp) | ||
240 | { | ||
241 | lock (this) | ||
242 | return m_map.ContainsKey(kvp.Key); | ||
243 | } | ||
244 | 308 | ||
245 | public void CopyTo(KeyValuePair<string, OSDMap>[] array, int index) | 309 | public bool RemoveStore(string ns, string storeName) |
246 | { | 310 | { |
247 | throw new NotImplementedException(); | 311 | OSD namespaceOsd; |
248 | } | ||
249 | 312 | ||
250 | public bool Remove(KeyValuePair<string, OSDMap> kvp) | ||
251 | { | ||
252 | lock (this) | ||
253 | return m_map.Remove(kvp.Key); | ||
254 | } | ||
255 | |||
256 | public System.Collections.IDictionaryEnumerator GetEnumerator() | ||
257 | { | ||
258 | lock (this) | 313 | lock (this) |
259 | return m_map.GetEnumerator(); | 314 | { |
260 | } | 315 | if (m_map.TryGetValue(ns, out namespaceOsd)) |
316 | { | ||
317 | OSDMap namespaceOsdMap = (OSDMap)namespaceOsd; | ||
318 | namespaceOsdMap.Remove(storeName); | ||
261 | 319 | ||
262 | IEnumerator<KeyValuePair<string, OSDMap>> IEnumerable<KeyValuePair<string, OSDMap>>.GetEnumerator() | 320 | // Don't keep empty namespaces around |
263 | { | 321 | if (namespaceOsdMap.Count <= 0) |
264 | return null; | 322 | m_map.Remove(ns); |
265 | } | 323 | } |
324 | } | ||
266 | 325 | ||
267 | IEnumerator IEnumerable.GetEnumerator() | 326 | return false; |
268 | { | 327 | } |
269 | lock (this) | ||
270 | return m_map.GetEnumerator(); | ||
271 | } | ||
272 | } | 328 | } |
273 | } \ No newline at end of file | 329 | } \ No newline at end of file |
diff --git a/OpenSim/Framework/DOMap.cs b/OpenSim/Framework/DOMap.cs index 755e129..f5b650b 100644 --- a/OpenSim/Framework/DOMap.cs +++ b/OpenSim/Framework/DOMap.cs | |||
@@ -42,22 +42,22 @@ namespace OpenSim.Framework | |||
42 | /// This class stores and retrieves dynamic objects. | 42 | /// This class stores and retrieves dynamic objects. |
43 | /// </summary> | 43 | /// </summary> |
44 | /// <remarks> | 44 | /// <remarks> |
45 | /// Experimental - DO NOT USE. | 45 | /// Experimental - DO NOT USE. Does not yet have namespace support. |
46 | /// </remarks> | 46 | /// </remarks> |
47 | public class DOMap | 47 | public class DOMap |
48 | { | 48 | { |
49 | private IDictionary<string, object> m_map; | 49 | private IDictionary<string, object> m_map; |
50 | 50 | ||
51 | public void Add(string key, object dynObj) | 51 | public void Add(string ns, string objName, object dynObj) |
52 | { | 52 | { |
53 | DAMap.ValidateKey(key); | 53 | DAMap.ValidateNamespace(ns); |
54 | 54 | ||
55 | lock (this) | 55 | lock (this) |
56 | { | 56 | { |
57 | if (m_map == null) | 57 | if (m_map == null) |
58 | m_map = new Dictionary<string, object>(); | 58 | m_map = new Dictionary<string, object>(); |
59 | 59 | ||
60 | m_map.Add(key, dynObj); | 60 | m_map.Add(objName, dynObj); |
61 | } | 61 | } |
62 | } | 62 | } |
63 | 63 | ||
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs index 1f1568f..0c632b1 100644 --- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs +++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DAExampleModule.cs | |||
@@ -44,11 +44,12 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")] | 44 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "DAExampleModule")] |
45 | public class DAExampleModule : INonSharedRegionModule | 45 | public class DAExampleModule : INonSharedRegionModule |
46 | { | 46 | { |
47 | // private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
48 | 48 | ||
49 | private static readonly bool ENABLED = false; // enable for testing | 49 | private readonly bool ENABLED = false; // enable for testing |
50 | 50 | ||
51 | public const string DANamespace = "DAExample Module"; | 51 | public const string Namespace = "Example"; |
52 | public const string StoreName = "DA"; | ||
52 | 53 | ||
53 | protected Scene m_scene; | 54 | protected Scene m_scene; |
54 | protected IDialogModule m_dialogMod; | 55 | protected IDialogModule m_dialogMod; |
@@ -65,6 +66,8 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
65 | m_scene = scene; | 66 | m_scene = scene; |
66 | m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove; | 67 | m_scene.EventManager.OnSceneGroupMove += OnSceneGroupMove; |
67 | m_dialogMod = m_scene.RequestModuleInterface<IDialogModule>(); | 68 | m_dialogMod = m_scene.RequestModuleInterface<IDialogModule>(); |
69 | |||
70 | m_log.DebugFormat("[DA EXAMPLE MODULE]: Added region {0}", m_scene.Name); | ||
68 | } | 71 | } |
69 | } | 72 | } |
70 | 73 | ||
@@ -91,7 +94,7 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
91 | if (sop == null) | 94 | if (sop == null) |
92 | return true; | 95 | return true; |
93 | 96 | ||
94 | if (!sop.DynAttrs.TryGetValue(DANamespace, out attrs)) | 97 | if (!sop.DynAttrs.TryGetStore(Namespace, StoreName, out attrs)) |
95 | attrs = new OSDMap(); | 98 | attrs = new OSDMap(); |
96 | 99 | ||
97 | OSDInteger newValue; | 100 | OSDInteger newValue; |
@@ -106,12 +109,14 @@ namespace OpenSim.Region.CoreModules.Framework.DynamicAttributes.DAExampleModule | |||
106 | 109 | ||
107 | attrs["moves"] = newValue; | 110 | attrs["moves"] = newValue; |
108 | 111 | ||
109 | sop.DynAttrs[DANamespace] = attrs; | 112 | sop.DynAttrs.SetStore(Namespace, StoreName, attrs); |
110 | } | 113 | } |
111 | 114 | ||
112 | sop.ParentGroup.HasGroupChanged = true; | 115 | sop.ParentGroup.HasGroupChanged = true; |
113 | 116 | ||
114 | m_dialogMod.SendGeneralAlert(string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue)); | 117 | string msg = string.Format("{0} {1} moved {2} times", sop.Name, sop.UUID, newValue); |
118 | m_log.DebugFormat("[DA EXAMPLE MODULE]: {0}", msg); | ||
119 | m_dialogMod.SendGeneralAlert(msg); | ||
115 | 120 | ||
116 | return true; | 121 | return true; |
117 | } | 122 | } |
diff --git a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs index 650aa35..166a994 100644 --- a/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs +++ b/OpenSim/Region/CoreModules/Framework/DynamicAttributes/DOExampleModule.cs | |||
@@ -64,8 +64,8 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule | |||
64 | 64 | ||
65 | private Scene m_scene; | 65 | private Scene m_scene; |
66 | private IDialogModule m_dialogMod; | 66 | private IDialogModule m_dialogMod; |
67 | 67 | ||
68 | public string Name { get { return "DOExample Module"; } } | 68 | public string Name { get { return "DO"; } } |
69 | public Type ReplaceableInterface { get { return null; } } | 69 | public Type ReplaceableInterface { get { return null; } } |
70 | 70 | ||
71 | public void Initialise(IConfigSource source) {} | 71 | public void Initialise(IConfigSource source) {} |
@@ -106,7 +106,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule | |||
106 | 106 | ||
107 | // Console.WriteLine("Here for {0}", so.Name); | 107 | // Console.WriteLine("Here for {0}", so.Name); |
108 | 108 | ||
109 | if (rootPart.DynAttrs.TryGetValue(DAExampleModule.DANamespace, out attrs)) | 109 | if (rootPart.DynAttrs.TryGetStore(DAExampleModule.Namespace, DAExampleModule.StoreName, out attrs)) |
110 | { | 110 | { |
111 | movesSoFar = attrs["moves"].AsInteger(); | 111 | movesSoFar = attrs["moves"].AsInteger(); |
112 | 112 | ||
@@ -114,7 +114,7 @@ namespace OpenSim.Region.Framework.DynamicAttributes.DOExampleModule | |||
114 | "[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name); | 114 | "[DO EXAMPLE MODULE]: Found saved moves {0} for {1} in {2}", movesSoFar, so.Name, m_scene.Name); |
115 | } | 115 | } |
116 | 116 | ||
117 | rootPart.DynObjs.Add(Name, new MyObject(movesSoFar)); | 117 | rootPart.DynObjs.Add(DAExampleModule.Namespace, Name, new MyObject(movesSoFar)); |
118 | } | 118 | } |
119 | 119 | ||
120 | private bool OnSceneGroupMove(UUID groupId, Vector3 delta) | 120 | private bool OnSceneGroupMove(UUID groupId, Vector3 delta) |
diff --git a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs index b4348c9..66059fb 100644 --- a/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs +++ b/OpenSim/Region/CoreModules/World/Serialiser/Tests/SerialiserTests.cs | |||
@@ -144,7 +144,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
144 | <Flags>None</Flags> | 144 | <Flags>None</Flags> |
145 | <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound> | 145 | <CollisionSound><Guid>00000000-0000-0000-0000-000000000000</Guid></CollisionSound> |
146 | <CollisionSoundVolume>0</CollisionSoundVolume> | 146 | <CollisionSoundVolume>0</CollisionSoundVolume> |
147 | <DynAttrs><llsd><map><key>MyStore</key><map><key>the answer</key><integer>42</integer></map></map></llsd></DynAttrs> | 147 | <DynAttrs> |
148 | <llsd> | ||
149 | <map> | ||
150 | <key>MyNamespace</key> | ||
151 | <map> | ||
152 | <key>MyStore</key> | ||
153 | <map> | ||
154 | <key>the answer</key> | ||
155 | <integer>42</integer> | ||
156 | </map> | ||
157 | </map> | ||
158 | </map> | ||
159 | </llsd> | ||
160 | </DynAttrs> | ||
148 | </SceneObjectPart> | 161 | </SceneObjectPart> |
149 | </RootPart> | 162 | </RootPart> |
150 | <OtherParts /> | 163 | <OtherParts /> |
@@ -333,7 +346,20 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
333 | <EveryoneMask>0</EveryoneMask> | 346 | <EveryoneMask>0</EveryoneMask> |
334 | <NextOwnerMask>2147483647</NextOwnerMask> | 347 | <NextOwnerMask>2147483647</NextOwnerMask> |
335 | <Flags>None</Flags> | 348 | <Flags>None</Flags> |
336 | <DynAttrs><llsd><map><key>MyStore</key><map><key>last words</key><string>Rosebud</string></map></map></llsd></DynAttrs> | 349 | <DynAttrs> |
350 | <llsd> | ||
351 | <map> | ||
352 | <key>MyNamespace</key> | ||
353 | <map> | ||
354 | <key>MyStore</key> | ||
355 | <map> | ||
356 | <key>last words</key> | ||
357 | <string>Rosebud</string> | ||
358 | </map> | ||
359 | </map> | ||
360 | </map> | ||
361 | </llsd> | ||
362 | </DynAttrs> | ||
337 | <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar> | 363 | <SitTargetAvatar><UUID>00000000-0000-0000-0000-000000000000</UUID></SitTargetAvatar> |
338 | </SceneObjectPart> | 364 | </SceneObjectPart> |
339 | <OtherParts /> | 365 | <OtherParts /> |
@@ -362,7 +388,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
362 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790"))); | 388 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("e6a5a05e-e8cc-4816-8701-04165e335790"))); |
363 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d"))); | 389 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("a6dacf01-4636-4bb9-8a97-30609438af9d"))); |
364 | Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide")); | 390 | Assert.That(rootPart.Name, Is.EqualTo("PrimMyRide")); |
365 | OSDMap store = rootPart.DynAttrs["MyStore"]; | 391 | OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore"); |
366 | Assert.AreEqual(42, store["the answer"].AsInteger()); | 392 | Assert.AreEqual(42, store["the answer"].AsInteger()); |
367 | 393 | ||
368 | // TODO: Check other properties | 394 | // TODO: Check other properties |
@@ -414,13 +440,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
414 | rp.CreatorID = rpCreatorId; | 440 | rp.CreatorID = rpCreatorId; |
415 | rp.Shape = shape; | 441 | rp.Shape = shape; |
416 | 442 | ||
443 | string daNamespace = "MyNamespace"; | ||
417 | string daStoreName = "MyStore"; | 444 | string daStoreName = "MyStore"; |
418 | string daKey = "foo"; | 445 | string daKey = "foo"; |
419 | string daValue = "bar"; | 446 | string daValue = "bar"; |
420 | OSDMap myStore = new OSDMap(); | 447 | OSDMap myStore = new OSDMap(); |
421 | myStore.Add(daKey, daValue); | 448 | myStore.Add(daKey, daValue); |
422 | rp.DynAttrs = new DAMap(); | 449 | rp.DynAttrs = new DAMap(); |
423 | rp.DynAttrs[daStoreName] = myStore; | 450 | rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore); |
424 | 451 | ||
425 | SceneObjectGroup so = new SceneObjectGroup(rp); | 452 | SceneObjectGroup so = new SceneObjectGroup(rp); |
426 | 453 | ||
@@ -481,7 +508,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
481 | Assert.That(name, Is.EqualTo(rpName)); | 508 | Assert.That(name, Is.EqualTo(rpName)); |
482 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); | 509 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); |
483 | Assert.NotNull(daMap); | 510 | Assert.NotNull(daMap); |
484 | Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString()); | 511 | Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString()); |
485 | } | 512 | } |
486 | 513 | ||
487 | [Test] | 514 | [Test] |
@@ -496,7 +523,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
496 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946"))); | 523 | Assert.That(rootPart.UUID, Is.EqualTo(new UUID("9be68fdd-f740-4a0f-9675-dfbbb536b946"))); |
497 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef"))); | 524 | Assert.That(rootPart.CreatorID, Is.EqualTo(new UUID("b46ef588-411e-4a8b-a284-d7dcfe8e74ef"))); |
498 | Assert.That(rootPart.Name, Is.EqualTo("PrimFun")); | 525 | Assert.That(rootPart.Name, Is.EqualTo("PrimFun")); |
499 | OSDMap store = rootPart.DynAttrs["MyStore"]; | 526 | OSDMap store = rootPart.DynAttrs.GetStore("MyNamespace", "MyStore"); |
500 | Assert.AreEqual("Rosebud", store["last words"].AsString()); | 527 | Assert.AreEqual("Rosebud", store["last words"].AsString()); |
501 | 528 | ||
502 | // TODO: Check other properties | 529 | // TODO: Check other properties |
@@ -522,13 +549,14 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
522 | rp.CreatorID = rpCreatorId; | 549 | rp.CreatorID = rpCreatorId; |
523 | rp.Shape = shape; | 550 | rp.Shape = shape; |
524 | 551 | ||
552 | string daNamespace = "MyNamespace"; | ||
525 | string daStoreName = "MyStore"; | 553 | string daStoreName = "MyStore"; |
526 | string daKey = "foo"; | 554 | string daKey = "foo"; |
527 | string daValue = "bar"; | 555 | string daValue = "bar"; |
528 | OSDMap myStore = new OSDMap(); | 556 | OSDMap myStore = new OSDMap(); |
529 | myStore.Add(daKey, daValue); | 557 | myStore.Add(daKey, daValue); |
530 | rp.DynAttrs = new DAMap(); | 558 | rp.DynAttrs = new DAMap(); |
531 | rp.DynAttrs[daStoreName] = myStore; | 559 | rp.DynAttrs.SetStore(daNamespace, daStoreName, myStore); |
532 | 560 | ||
533 | SceneObjectGroup so = new SceneObjectGroup(rp); | 561 | SceneObjectGroup so = new SceneObjectGroup(rp); |
534 | 562 | ||
@@ -585,7 +613,7 @@ namespace OpenSim.Region.CoreModules.World.Serialiser.Tests | |||
585 | Assert.That(name, Is.EqualTo(rpName)); | 613 | Assert.That(name, Is.EqualTo(rpName)); |
586 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); | 614 | Assert.That(creatorId, Is.EqualTo(rpCreatorId)); |
587 | Assert.NotNull(daMap); | 615 | Assert.NotNull(daMap); |
588 | Assert.AreEqual(daValue, daMap[daStoreName][daKey].AsString()); | 616 | Assert.AreEqual(daValue, daMap.GetStore(daNamespace, daStoreName)[daKey].AsString()); |
589 | } | 617 | } |
590 | } | 618 | } |
591 | } \ No newline at end of file | 619 | } \ No newline at end of file |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index 3882b45..945745e 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -1290,7 +1290,7 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
1290 | if (sop.MediaUrl != null) | 1290 | if (sop.MediaUrl != null) |
1291 | writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); | 1291 | writer.WriteElementString("MediaUrl", sop.MediaUrl.ToString()); |
1292 | 1292 | ||
1293 | if (sop.DynAttrs.Count > 0) | 1293 | if (sop.DynAttrs.CountNamespaces > 0) |
1294 | { | 1294 | { |
1295 | writer.WriteStartElement("DynAttrs"); | 1295 | writer.WriteStartElement("DynAttrs"); |
1296 | sop.DynAttrs.WriteXml(writer); | 1296 | sop.DynAttrs.WriteXml(writer); |
diff --git a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs index 0e83781..586b59d 100644 --- a/OpenSim/Region/Framework/Scenes/UuidGatherer.cs +++ b/OpenSim/Region/Framework/Scenes/UuidGatherer.cs | |||
@@ -212,7 +212,6 @@ namespace OpenSim.Region.Framework.Scenes | |||
212 | // } | 212 | // } |
213 | // } | 213 | // } |
214 | 214 | ||
215 | |||
216 | /// <summary> | 215 | /// <summary> |
217 | /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps | 216 | /// Gather all of the texture asset UUIDs used to reference "Materials" such as normal and specular maps |
218 | /// </summary> | 217 | /// </summary> |
@@ -221,20 +220,23 @@ namespace OpenSim.Region.Framework.Scenes | |||
221 | public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) | 220 | public void GatherMaterialsUuids(SceneObjectPart part, IDictionary<UUID, AssetType> assetUuids) |
222 | { | 221 | { |
223 | // scan thru the dynAttrs map of this part for any textures used as materials | 222 | // scan thru the dynAttrs map of this part for any textures used as materials |
224 | OSDMap OSMaterials = null; | 223 | OSD osdMaterials = null; |
225 | 224 | ||
226 | lock (part.DynAttrs) | 225 | lock (part.DynAttrs) |
227 | { | 226 | { |
228 | if (part.DynAttrs.ContainsKey("OS:Materials")) | 227 | if (part.DynAttrs.ContainsStore("OpenSim", "Materials")) |
229 | OSMaterials = part.DynAttrs["OS:Materials"]; | 228 | { |
230 | if (OSMaterials != null && OSMaterials.ContainsKey("Materials")) | 229 | OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials"); |
230 | materialsStore.TryGetValue("Materials", out osdMaterials); | ||
231 | } | ||
232 | |||
233 | if (osdMaterials != null) | ||
231 | { | 234 | { |
232 | OSD osd = OSMaterials["Materials"]; | ||
233 | //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); | 235 | //m_log.Info("[UUID Gatherer]: found Materials: " + OSDParser.SerializeJsonString(osd)); |
234 | 236 | ||
235 | if (osd is OSDArray) | 237 | if (osdMaterials is OSDArray) |
236 | { | 238 | { |
237 | OSDArray matsArr = osd as OSDArray; | 239 | OSDArray matsArr = osdMaterials as OSDArray; |
238 | foreach (OSDMap matMap in matsArr) | 240 | foreach (OSDMap matMap in matsArr) |
239 | { | 241 | { |
240 | try | 242 | try |
diff --git a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs index 4ab6609..5b15a73 100644 --- a/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs +++ b/OpenSim/Region/OptionalModules/Materials/MaterialsDemoModule.cs | |||
@@ -178,7 +178,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
178 | 178 | ||
179 | void GetStoredMaterialsForPart(SceneObjectPart part) | 179 | void GetStoredMaterialsForPart(SceneObjectPart part) |
180 | { | 180 | { |
181 | OSDMap OSMaterials = null; | 181 | OSD OSMaterials = null; |
182 | OSDArray matsArr = null; | 182 | OSDArray matsArr = null; |
183 | 183 | ||
184 | if (part.DynAttrs == null) | 184 | if (part.DynAttrs == null) |
@@ -188,23 +188,20 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
188 | 188 | ||
189 | lock (part.DynAttrs) | 189 | lock (part.DynAttrs) |
190 | { | 190 | { |
191 | if (part.DynAttrs.ContainsKey("OS:Materials")) | 191 | if (part.DynAttrs.ContainsStore("OpenSim", "Materials")) |
192 | OSMaterials = part.DynAttrs["OS:Materials"]; | ||
193 | if (OSMaterials != null && OSMaterials.ContainsKey("Materials")) | ||
194 | { | 192 | { |
195 | 193 | OSDMap materialsStore = part.DynAttrs.GetStore("OpenSim", "Materials"); | |
196 | OSD osd = OSMaterials["Materials"]; | 194 | materialsStore.TryGetValue("Materials", out OSMaterials); |
197 | if (osd is OSDArray) | ||
198 | matsArr = osd as OSDArray; | ||
199 | } | 195 | } |
200 | } | ||
201 | 196 | ||
202 | if (OSMaterials == null) | 197 | if (OSMaterials != null && OSMaterials is OSDArray) |
203 | return; | 198 | matsArr = OSMaterials as OSDArray; |
199 | else | ||
200 | return; | ||
201 | } | ||
204 | 202 | ||
205 | m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials)); | 203 | m_log.Info("[MaterialsDemoModule]: OSMaterials: " + OSDParser.SerializeJsonString(OSMaterials)); |
206 | 204 | ||
207 | |||
208 | if (matsArr == null) | 205 | if (matsArr == null) |
209 | { | 206 | { |
210 | m_log.Info("[MaterialsDemoModule]: matsArr is null :( "); | 207 | m_log.Info("[MaterialsDemoModule]: matsArr is null :( "); |
@@ -215,7 +212,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
215 | { | 212 | { |
216 | if (elemOsd != null && elemOsd is OSDMap) | 213 | if (elemOsd != null && elemOsd is OSDMap) |
217 | { | 214 | { |
218 | |||
219 | OSDMap matMap = elemOsd as OSDMap; | 215 | OSDMap matMap = elemOsd as OSDMap; |
220 | if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material")) | 216 | if (matMap.ContainsKey("ID") && matMap.ContainsKey("Material")) |
221 | { | 217 | { |
@@ -232,7 +228,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
232 | } | 228 | } |
233 | } | 229 | } |
234 | 230 | ||
235 | |||
236 | void StoreMaterialsForPart(SceneObjectPart part) | 231 | void StoreMaterialsForPart(SceneObjectPart part) |
237 | { | 232 | { |
238 | try | 233 | try |
@@ -277,7 +272,7 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
277 | OSMaterials["Materials"] = matsArr; | 272 | OSMaterials["Materials"] = matsArr; |
278 | 273 | ||
279 | lock (part.DynAttrs) | 274 | lock (part.DynAttrs) |
280 | part.DynAttrs["OS:Materials"] = OSMaterials; | 275 | part.DynAttrs.SetStore("OpenSim", "Materials", OSMaterials); |
281 | } | 276 | } |
282 | catch (Exception e) | 277 | catch (Exception e) |
283 | { | 278 | { |
@@ -285,7 +280,6 @@ namespace OpenSim.Region.OptionalModules.MaterialsDemoModule | |||
285 | } | 280 | } |
286 | } | 281 | } |
287 | 282 | ||
288 | |||
289 | public string RenderMaterialsPostCap(string request, string path, | 283 | public string RenderMaterialsPostCap(string request, string path, |
290 | string param, IOSHttpRequest httpRequest, | 284 | string param, IOSHttpRequest httpRequest, |
291 | IOSHttpResponse httpResponse) | 285 | IOSHttpResponse httpResponse) |