From 1d745cca1753ee62a75633029adeb3abfb9b224a Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Wed, 4 Jun 2008 18:50:58 +0000
Subject: * Start writing out assets metadata file for archiver * Ignoring it
on reload as of yet
---
.../Modules/World/Archiver/ArchiveWriteRequest.cs | 20 +---
.../Modules/World/Archiver/AssetsArchiver.cs | 129 +++++++++++++++++++++
2 files changed, 132 insertions(+), 17 deletions(-)
create mode 100644 OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs
(limited to 'OpenSim/Region/Environment/Modules')
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs
index 6c341c6..41f230c 100644
--- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequest.cs
@@ -123,23 +123,9 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver
TarArchiveWriter archive = new TarArchiveWriter();
archive.AddFile(ArchiveConstants.PRIMS_PATH, m_serializedEntities);
-
- // It appears that gtar, at least, doesn't need the intermediate directory entries in the tar
- //archive.AddDir("assets");
-
- foreach (LLUUID uuid in assets.Keys)
- {
- if (assets[uuid] != null)
- {
- archive.AddFile(
- ArchiveConstants.TEXTURES_PATH + uuid.ToString() + ArchiveConstants.TEXTURE_EXTENSION,
- assets[uuid].Data);
- }
- else
- {
- m_log.DebugFormat("[ARCHIVER]: Could not find asset {0} to archive", uuid);
- }
- }
+
+ AssetsArchiver assetsArchiver = new AssetsArchiver(assets);
+ assetsArchiver.Archive(archive);
archive.WriteTar(m_savePath);
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs
new file mode 100644
index 0000000..44757cc
--- /dev/null
+++ b/OpenSim/Region/Environment/Modules/World/Archiver/AssetsArchiver.cs
@@ -0,0 +1,129 @@
+/*
+ * 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.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using System.Xml;
+using libsecondlife;
+using log4net;
+using OpenSim.Framework;
+
+namespace OpenSim.Region.Environment.Modules.World.Archiver
+{
+ ///
+ /// Archives assets
+ ///
+ public class AssetsArchiver
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ ///
+ /// Archive assets
+ ///
+ protected IDictionary m_assets;
+
+ public AssetsArchiver(IDictionary assets)
+ {
+ m_assets = assets;
+ }
+
+ ///
+ /// Archive the assets given to this archiver to the given archive.
+ ///
+ ///
+ public void Archive(TarArchiveWriter archive)
+ {
+ // It appears that gtar, at least, doesn't need the intermediate directory entries in the tar
+ //archive.AddDir("assets");
+
+ WriteMetadata(archive);
+ WriteData(archive);
+ }
+
+ ///
+ /// Write an assets metadata file to the given archive
+ ///
+ ///
+ protected void WriteMetadata(TarArchiveWriter archive)
+ {
+ StringWriter sw = new StringWriter();
+ XmlTextWriter xtw = new XmlTextWriter(sw);
+
+ xtw.Formatting = Formatting.Indented;
+ xtw.WriteStartDocument();
+
+ xtw.WriteStartElement("assets");
+
+ foreach (LLUUID uuid in m_assets.Keys)
+ {
+ if (m_assets[uuid] != null)
+ {
+ xtw.WriteStartElement("asset");
+
+ AssetBase asset = m_assets[uuid];
+
+ xtw.WriteElementString("filename", uuid.ToString() + ArchiveConstants.TEXTURE_EXTENSION);
+ xtw.WriteElementString("name", asset.Name);
+ xtw.WriteElementString("description", asset.Description);
+ xtw.WriteElementString("asset-type", asset.Type.ToString());
+ xtw.WriteElementString("inventory-type", asset.InvType.ToString());
+
+ xtw.WriteEndElement();
+ }
+
+ }
+
+ xtw.WriteEndElement();
+
+ xtw.WriteEndDocument();
+
+ archive.AddFile("assets.xml", sw.ToString());
+ }
+
+ ///
+ /// Write asset data files to the given archive
+ ///
+ ///
+ protected void WriteData(TarArchiveWriter archive)
+ {
+ foreach (LLUUID uuid in m_assets.Keys)
+ {
+ if (m_assets[uuid] != null)
+ {
+ archive.AddFile(
+ ArchiveConstants.TEXTURES_PATH + uuid.ToString() + ArchiveConstants.TEXTURE_EXTENSION,
+ m_assets[uuid].Data);
+ }
+ else
+ {
+ m_log.DebugFormat("[ARCHIVER]: Could not find asset {0} to archive", uuid);
+ }
+ }
+ }
+ }
+}
--
cgit v1.1