Skip to content

Commit

Permalink
Serialization cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
Allockse committed Mar 31, 2014
1 parent bb639cd commit 5251830
Show file tree
Hide file tree
Showing 7 changed files with 184 additions and 188 deletions.
81 changes: 14 additions & 67 deletions PiaFile.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,25 @@
using System;
using PiaNO.Serialization;
using System;
using System.IO;
using PiaNO.Zip.Compression;
using PiaNO.Zip.Streams;

namespace PiaNO
{
public abstract class PiaFile : PiaNode
{
#region Properties

public PiaHeader Header { get; private set; }
public PiaHeader Header { get; internal set; }
public string FileName { get; set; }

#endregion

#region Constructors

protected internal PiaFile() : base() { }
protected internal PiaFile(string innerData) : base(innerData) { }
protected PiaFile(string filePath) : base()
{
Read(filePath);
}

#endregion

Expand All @@ -33,9 +35,11 @@ public void Read(string fileName)

try
{
using (var piaStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
FileName = Path.GetFileName(fileName);
using (var inStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
Read(piaStream);
PiaSerializer.Deserialize(inStream, this);
inStream.Close();
}
}
catch (Exception)
Expand All @@ -44,79 +48,22 @@ public void Read(string fileName)
}

}
public void Read(Stream stream)
{
try
{
var headerBytes = new Byte[60];
stream.Read(headerBytes, 0, headerBytes.Length);
var headerString = System.Text.Encoding.Default.GetString(headerBytes);
Header = new PiaHeader(headerString);

using (var zStream = new InflaterInputStream(stream))
{
var sr = new StreamReader(zStream, System.Text.Encoding.Default);
InnerData = sr.ReadToEnd();
}

Deserialize();
FileName = stream is FileStream
? ((FileStream)stream).Name
: string.Empty;

_setOwnership(this);
}
catch (Exception)
{
throw;
}
}

public void Write(string fileName)
{
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
Write(fileStream);
}
}
public void Write(Stream stream)
{
try
{
var headerBytes = System.Text.Encoding.Default.GetBytes(Header.ToString());
stream.Write(headerBytes, 0, headerBytes.Length);

var piaBytes = System.Text.Encoding.Default.GetBytes(InnerData.ToString());
byte[] compressedBytes;
using (var ms = new MemoryStream())
using (var outStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
var deflateStream = new DeflaterOutputStream(ms, new Deflater(Deflater.DEFAULT_COMPRESSION));
deflateStream.Write(piaBytes, 0, piaBytes.Length);
deflateStream.Flush();
deflateStream.Finish();

compressedBytes = ms.ToArray();
PiaSerializer.Serialize(outStream, this);
outStream.Close();
}

stream.Write(compressedBytes, 0, compressedBytes.Length);
}
catch (Exception)
{
throw;
}
}

private void _setOwnership(PiaNode node)
{
foreach (var child in node.ChildNodes)
{
if (child.HasChildNodes)
_setOwnership(child);
else
child.Owner = this;
}
}

public override string ToString()
{
return Path.GetFileName(FileName);
Expand Down
10 changes: 0 additions & 10 deletions PiaHeader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ namespace PiaNO
{
public class PiaHeader
{
private const string PIA_HEADER_FORMAT = @"PIAFILEVERSION_{0},{1}VER{2},compress\r\npmzlibcodec\255\255\255\255\255\255\255\000\255\255\255\000";
private string _headerData;

public double PiaFileVersion { get; private set; }
Expand Down Expand Up @@ -35,14 +34,5 @@ public override string ToString()
//var fileversionString = string.Format("{0:0.0}", Math.Truncate(PiaFileVersion * 10) / 10);
//return string.Format(PIA_HEADER_FORMAT, fileversionString, PiaType, TypeVersion);
}

public byte[] ToByteArray()
{
var headerString = this.ToString();
var bytes = new byte[headerString.Length * sizeof(char)];
System.Buffer.BlockCopy(headerString.ToCharArray(), 0, bytes, 0, bytes.Length);

return bytes;
}
}
}
33 changes: 7 additions & 26 deletions PiaNode.cs
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
using System;
using PiaNO.Serialization;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;

using PiaNO.Serialization;

namespace PiaNO
{
public class PiaNode : ICloneable, IEquatable<PiaNode>, IList<PiaNode>
Expand Down Expand Up @@ -34,7 +32,10 @@ public bool HasChildNodes
{
get { return ChildNodes != null && ChildNodes.Count > 0; }
}
public string InnerData { get; protected set; }
public string InnerData
{
get { return PiaSerializer._serializeNode(this); }
}

#endregion

Expand All @@ -50,8 +51,7 @@ protected internal PiaNode(string innerData)
ChildNodes = new List<PiaNode>();
Values = new Dictionary<string, string>();

InnerData = innerData;
Deserialize();
PiaSerializer._deserializeNode(this, innerData);
}

#endregion
Expand Down Expand Up @@ -81,30 +81,11 @@ protected internal PiaNode(string innerData)
}
}

protected virtual void Deserialize()
{
PiaSerializer.Deserialize(this);
}

protected virtual void Serialize(Stream stream)
{
PiaSerializer.Serialize(stream, this);
}

public override string ToString()
{
return this.NodeName;
}

public byte[] ToByteArray()
{
var headerString = this.ToString();
var bytes = new byte[headerString.Length * sizeof(char)];
System.Buffer.BlockCopy(headerString.ToCharArray(), 0, bytes, 0, bytes.Length);

return bytes;
}

#endregion

#region ICloneable
Expand Down
19 changes: 8 additions & 11 deletions Plot/PlotStyle.cs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
using PiaNO.Serialization;
using System;
using System;
using System.Drawing;
using System.IO;

namespace PiaNO.Plot
{
Expand All @@ -11,18 +9,18 @@ public class PlotStyle: PiaNode

public string Name
{
get { return Values["name"]; }
set { Values["name"] = value; }
get { return Values["name_str"]; }
set { Values["name_str"] = value; }
}
public string LocalizedName
{
get { return Values["localized_name"]; }
set { Values["localized_name"] = value; }
get { return Values["localized_name_str"]; }
set { Values["localized_name_str"] = value; }
}
public string Description
{
get { return Values["description"]; }
set { Values["description"] = value; }
get { return Values["description_str"]; }
set { Values["description_str"] = value; }
}
public Color? Color
{
Expand Down Expand Up @@ -125,7 +123,7 @@ public JoinStyle JoinStyle

public PlotStyle() : base()
{
NodeName = "Style 1";
NodeName = "New style";
LocalizedName = string.Empty;
Description = string.Empty;
//Color = null;
Expand All @@ -149,7 +147,6 @@ internal PlotStyle(PiaNode baseNode)
Parent = baseNode.Parent;
Owner = baseNode.Owner;
Values = baseNode.Values;
InnerData = baseNode.InnerData;
}

#endregion
Expand Down
13 changes: 5 additions & 8 deletions Plot/PlotStyleTable.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;

namespace PiaNO.Plot
Expand All @@ -20,8 +19,8 @@ public IList<PlotStyle> PlotStyles

public string Description
{
get { return Values["description"]; }
set { Values["description"] = value; }
get { return Values["description_str"]; }
set { Values["description_str"] = value; }
}

public bool AciTableAvailable
Expand Down Expand Up @@ -69,9 +68,8 @@ public PlotStyleTable() : base()
ApplyFactor = false;
CustomLineweightDisplayUnits = 1;
}
protected PlotStyleTable(string innerData) : base(innerData)
{
}
public PlotStyleTable(string fileName)
: base(fileName) { }

#endregion

Expand Down Expand Up @@ -112,6 +110,5 @@ private void _setStyles(IList<PlotStyle> value)
}

#endregion

}
}
Loading

0 comments on commit 5251830

Please sign in to comment.