private FileInfo UnloadImage(string projectFolder, string relativePath, ImageRowElement o, ProjectType projectType) { string folder = Path.GetDirectoryName(Path.Combine(projectFolder, relativePath)); //if (!Directory.Exists(folder)) // Directory.CreateDirectory(folder); //string filePath = Path.Combine(projectFolder, relativePath); //using (BinaryWriter binWriter = // new BinaryWriter(System.IO.File.Open(filePath, FileMode.Create))) //{ // binWriter.Write(o.ImageRow.BinaryData); //} //System.IO.File.SetCreationTime(filePath, o.ImageRow.Creation); //System.IO.File.SetLastWriteTime(filePath, o.ImageRow.Modified); var fileInfo = new FileInfo() { Path = Path.Combine(Path.GetDirectoryName(relativePath), Path.GetFileNameWithoutExtension(relativePath)), Id = o.ImageRow.FileName, //Attributes = o.ImageRow.Attributes, BodyType = o.ImageRow.BodyType, Class = o.GetType().FullName }; string imageFolder = Path.Combine(folder, Path.GetFileNameWithoutExtension(relativePath)); if (!Directory.Exists(imageFolder)) { Directory.CreateDirectory(imageFolder); } Image image = (Image)o.ImageRow.Body; fileInfo.Items = new FileInfoList(); foreach (var row in image.Rows) { UnresolvedPart rowPart = new UnresolvedPart(row); string imageRowPath = GetRelativePath(rowPart, projectType); string imageRelativePath = Path.Combine(imageFolder, Path.GetFileName(imageRowPath)); FileInfo rowFileInfo = UnloadElement(projectFolder, imageRelativePath, rowPart, projectType); fileInfo.Items.Add(rowFileInfo); } return(fileInfo); }
private Uri GetTargetFolder(ImageRowElement o) { if ((o is RootPointer) || (o is Configuration) || (o is Version) || (o is Versions)) { return(new Uri("/", UriKind.Relative)); } else if (o is MetadataPart) { string path = "/" + o.GetType().Name; //if (((MetadataPart)o).GeneralProperties != null) // path = path + "/" + ((MetadataPart)o).GeneralProperties.Name; path = path + "/"; return(new Uri(path, UriKind.Relative)); } else if (o is UnresolvedPart) { return(new Uri("/Unresolved/", UriKind.Relative)); } else { return(new Uri("", UriKind.Relative)); } }
private string GetRelativePath(ImageRowElement o, ProjectType projectType) { string path = ""; if ((o is RootPointer) || (o is Configuration) || (o is Version) || (o is Versions) || (o is UpdateInfo) || (o is ExternalDataProcessor) || (o is ExternalReport)) { path = ""; } else if (o is MetadataPart) { path = o.GetType().Name; } else if (o is UnresolvedPart) { path = "Unresolved"; } else { path = ""; } string fileName = o.ImageRow.FileName; if ((o is MetadataPart) && !String.IsNullOrEmpty(((MetadataPart)o).Name)) { fileName = ((MetadataPart)o).Name; } string extension = ""; if (o.ImageRow.BodyType == ImageRowTypes.CompressedMoxcel) { extension = ".mxl"; } else if (o.ImageRow.BodyType == ImageRowTypes.CompressedUtf8MarkedString) { extension = ".txt"; } else if (o.ImageRow.BodyType == ImageRowTypes.Utf8MarkedString) { extension = ".txt"; } else if (o.ImageRow.BodyType == ImageRowTypes.CompressedImage) { extension = ".img"; } if (o is MetadataPart) { if (projectType == ProjectType.Debug) { extension = ".txt"; } else { extension = ".xml"; } } return(Path.Combine(path, fileName + extension)); }
private FileInfo UnloadElement(string projectFolder, string relativePath, ImageRowElement o, ProjectType projectType) { string folder = Path.GetDirectoryName(Path.Combine(projectFolder, relativePath)); if (!Directory.Exists(folder)) { Directory.CreateDirectory(folder); } string filePath = Path.Combine(projectFolder, relativePath); if ((o is UnresolvedPart) && (o.ImageRow.BodyType == ImageRowTypes.CompressedUtf8MarkedString)) { using (StreamWriter outfile = new StreamWriter(filePath)) { try { DataSerializer dw = new DataSerializer(); outfile.Write( dw.Serialize( dw.Deserialize(o.ImageRow.Body as string) ) ); } catch (Exception) { outfile.Write(o.ImageRow.Body as string); } } } else if (o is UnresolvedPart) { using (BinaryWriter binWriter = new BinaryWriter(System.IO.File.Open(filePath, FileMode.Create))) { binWriter.Write(o.ImageRow.BinaryData); } } else if (o is MetadataPart) { if (projectType == ProjectType.Debug) { using (StreamWriter outfile = new StreamWriter(filePath)) { DataSerializer dw = new DataSerializer(); outfile.Write( dw.Serialize( dw.Deserialize(((MetadataPart)o).ImageRow.Body as string) ) ); } } else { var settings = new XmlWriterSettings() { Indent = true }; using (XmlWriter xmlWriter = XmlWriter.Create(filePath, settings)) { System.Windows.Markup.XamlWriter.Save(o, xmlWriter); } } } else { using (StreamWriter outfile = new StreamWriter(filePath)) { try { DataSerializer reader = new DataSerializer(); var content = reader.Deserialize(o.ImageRow.Body as string); DataSerializer dw = new DataSerializer(); outfile.Write(dw.Serialize(content)); } catch (Exception) { outfile.Write(o.ImageRow.Body); } } } System.IO.File.SetCreationTime(filePath, o.ImageRow.Creation); System.IO.File.SetLastWriteTime(filePath, o.ImageRow.Modified); var fileInfo = new FileInfo() { Path = relativePath, Id = o.ImageRow.FileName, //Attributes = o.ImageRow.Attributes, BodyType = o.ImageRow.BodyType, Class = o.GetType().FullName }; return(fileInfo); }
private void UnloadObject(string folder, ImageRowElement o, ProjectType projectType) { string subFolder = folder + GetTargetFolder(o).ToString() + "\\"; if (!Directory.Exists(subFolder)) { Directory.CreateDirectory(subFolder); } string extension = ""; if (o.ImageRow.BodyType == ImageRowTypes.CompressedMoxcel) { extension = ".mxl"; } else if (o.ImageRow.BodyType == ImageRowTypes.CompressedUtf8MarkedString) { extension = ".txt"; } else if (o.ImageRow.BodyType == ImageRowTypes.Utf8MarkedString) { extension = ".txt"; } else if (o.ImageRow.BodyType == ImageRowTypes.CompressedImage) { extension = ".img"; } if (o is MetadataPart) { if (projectType == ProjectType.String) { extension = ".txt"; } else { extension = ".xml"; } } var fileName = o.ImageRow.FileName; if ((o is MetadataPart) && ((MetadataPart)o).GeneralProperties != null) { fileName = ((MetadataPart)o).GeneralProperties.Name; } Uri relativeUri = new Uri(GetTargetFolder(o).ToString() + fileName + extension, UriKind.Relative); string filePath = subFolder + "\\" + fileName + extension; if (o.ImageRow.BodyType == ImageRowTypes.CompressedImage) { using (BinaryWriter binWriter = new BinaryWriter(System.IO.File.Open(filePath, FileMode.Create))) { binWriter.Write(o.ImageRow.BinaryData); } } else if (o.ImageRow.BodyType == ImageRowTypes.CompressedMoxcel) { using (BinaryWriter binWriter = new BinaryWriter(System.IO.File.Open(filePath, FileMode.Create))) { binWriter.Write(o.ImageRow.Body as byte[]); } } else if (o is MetadataPart) { if (projectType == ProjectType.String) { using (StreamWriter outfile = new StreamWriter(filePath)) { ////DataContractJsonSerializer js = new DataContractJsonSerializer(((MetadataPart)o).Body.GetType()); ////js.WriteObject(outfile.BaseStream, ((MetadataPart)o).Body); //DataSerializer reader = new DataSerializer(); //var content = reader.Deserialize(o.ImageRow.Body as string); DataSerializer dw = new DataSerializer(); outfile.Write(dw.Serialize(((MetadataPart)o).Body)); } } else { var settings = new XmlWriterSettings() { Indent = true }; using (XmlWriter xmlWriter = XmlWriter.Create(filePath, settings)) { System.Windows.Markup.XamlWriter.Save(o, xmlWriter); } } } else { using (StreamWriter outfile = new StreamWriter(filePath)) { try { DataSerializer reader = new DataSerializer(); var content = reader.Deserialize(o.ImageRow.Body as string); DataSerializer dw = new DataSerializer(); outfile.Write(dw.Serialize(content)); } catch (Exception) { outfile.Write(o.ImageRow.Body); } } } System.IO.File.SetCreationTime(filePath, o.ImageRow.Creation); System.IO.File.SetLastWriteTime(filePath, o.ImageRow.Modified); lock (this._settings) { var fileInfo = new FileInfo() { Path = relativeUri.ToString(), Id = o.ImageRow.FileName, Attributes = o.ImageRow.Attributes, BodyType = o.ImageRow.BodyType, Class = o.GetType().Name }; this._settings.Files.Add(fileInfo); } }