From c8cd381c5606b7361832e967394ee9fdf529bad6 Mon Sep 17 00:00:00 2001 From: Sean Dague Date: Fri, 27 Jun 2008 14:22:18 +0000 Subject: [PATCH] added in new type for mapping texture objects to the db --- .../Resources/UserAppearance.hbm.xml | 4 +- OpenSim/Data/NHibernate/TextureUserType.cs | 106 ++++++++++++++++++ 2 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 OpenSim/Data/NHibernate/TextureUserType.cs diff --git a/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml b/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml index 30f39efe56..06e9c1a9b6 100644 --- a/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml +++ b/OpenSim/Data/NHibernate/Resources/UserAppearance.hbm.xml @@ -30,8 +30,8 @@ - - + + \ No newline at end of file diff --git a/OpenSim/Data/NHibernate/TextureUserType.cs b/OpenSim/Data/NHibernate/TextureUserType.cs new file mode 100644 index 0000000000..18a8166750 --- /dev/null +++ b/OpenSim/Data/NHibernate/TextureUserType.cs @@ -0,0 +1,106 @@ +/* + * Copyright (c) Contributors, http://opensimulator.org/ + * See CONTRIBUTORS.TXT for a full list of copyright holders. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of the OpenSim Project nor the + * names of its contributors may be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY + * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +using System; +using System.Data; +using libsecondlife; +using NHibernate; +using NHibernate.SqlTypes; +using NHibernate.UserTypes; + +namespace OpenSim.Data.NHibernate +{ + [Serializable] + public class TextureUserType: IUserType + { + public object Assemble(object cached, object owner) + { + return cached; + } + + bool IUserType.Equals(object texture1, object texture2) + { + return texture1.Equals(texture2); + } + + public object DeepCopy(object texture) + { + byte[] bytes = ((LLObject.TextureEntry)texture).ToBytes(); + return new LLObject.TextureEntry(bytes, 0, bytes.Length); + } + + public object Disassemble(object texture) + { + return texture; + } + + public int GetHashCode(object texture) + { + return (texture == null) ? 0 : texture.GetHashCode(); + } + + public bool IsMutable + { + get { return false; } + } + + public object NullSafeGet(IDataReader rs, string[] names, object owner) + { + object texture = null; + + int ord = rs.GetOrdinal(names[0]); + if (!rs.IsDBNull(ord)) + { + byte[] bytes = (byte[])rs[ord]; + texture = new LLObject.TextureEntry(bytes, 0, bytes.Length); + } + + return texture; + } + + public void NullSafeSet(IDbCommand cmd, object obj, int index) + { + LLObject.TextureEntry texture = (LLObject.TextureEntry)obj; + ((IDataParameter)cmd.Parameters[index]).Value = texture.ToBytes(); + } + + public object Replace(object original, object target, object owner) + { + return original; + } + + public Type ReturnedType + { + get { return typeof(LLUUID); } + } + + public SqlType[] SqlTypes + { + get { return new SqlType [] { NHibernateUtil.Binary.SqlType }; } + } + } +}