Skip to content
This repository has been archived by the owner on Aug 2, 2022. It is now read-only.

Commit

Permalink
Refactor, File Merger Reorganization
Browse files Browse the repository at this point in the history
  • Loading branch information
wjch-krl committed Dec 9, 2014
1 parent 4e0e5a5 commit 00591ee
Show file tree
Hide file tree
Showing 51 changed files with 103,298 additions and 445 deletions.
Binary file added Capture.PNG
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 0 additions & 2 deletions PiggySync/PiggySync.Core/Concrete/TcpSocketListner.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System;
using System.Net;
using System.Net.Sockets;
using System.Runtime.CompilerServices;
using System.Net.NetworkInformation;
using System.Threading.Tasks;
using System.Collections.Concurrent;
using System.Threading;
Expand Down
17 changes: 12 additions & 5 deletions PiggySync/PiggySync.FileMerger/Converter.cs
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
using System;
using Newtonsoft.Json;
using System.Xml;
using PiggySync.Domain;

namespace PiggySync.FileMerger
{
public class Converter
{
public Converter ()
{
}

public string XmlToJson (string xml)
{
XmlDocument doc = new XmlDocument ();
Expand All @@ -22,6 +19,16 @@ public string JsonToXml (string json)
XmlDocument doc = JsonConvert.DeserializeXmlNode (json);
return doc.ToString ();
}
}

internal string FileToXml(string text1, MergePattern pattern)
{
throw new NotImplementedException();
}

internal string XmlToFile(string mergedXml, MergePattern pattern)
{
throw new NotImplementedException();
}
}
}

215 changes: 150 additions & 65 deletions PiggySync/PiggySync.FileMerger/FileMerger.cs
Original file line number Diff line number Diff line change
@@ -1,77 +1,162 @@
using System;
using System.Data;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Xml;
using System.Xml.Serialization;
using DiffPlex;
using DiffPlex.DiffBuilder;
using DiffPlex.DiffBuilder.Model;
using PiggySync.Domain;
using PiggySync.Domain.Concrete;
using PiggySync.Model;
using System.Xml.Linq;
using PiggySync.Common;

namespace PiggySync.FileMerger
{
public class FileMerger
{
private readonly string fileAPath;
private readonly string fileBPath;
private readonly string fileCPath;
private readonly string resultPath;
private MergePattern pattern;
bool usePattern;

public FileMerger (string fileAPath, string fileBPath, string fileCPath, string resultPath)
{
string extension;
if ((extension = Path.GetExtension (fileAPath)) != Path.GetExtension (fileBPath))
{
throw new PiggyFileException ("File extensions dosn't math");
}
var file = FileTools.TextFile (extension, fileAPath, fileBPath);
usePattern = string.IsNullOrWhiteSpace (file.TemplatePath);

if (!usePattern)
{
var serializer = new XmlSerializer (typeof(MergePattern));
pattern = (MergePattern)serializer.Deserialize (File.OpenRead (file.TemplatePath));
}
this.fileAPath = fileAPath;
this.fileBPath = fileBPath;
this.fileCPath = fileCPath;
this.resultPath = resultPath;
}

public bool MergeFiles ()
{
string fileA = File.ReadAllText (fileAPath);
string fileB = File.ReadAllText (fileBPath);
string fileC = File.ReadAllText (fileCPath);
string merged = String.Empty;

var differ = new Differ ();
var inlineBuilder = new InlineDiffBuilder (differ);
var diferenceAB = inlineBuilder.BuildDiffModel (fileA, fileB);
var diferenceAC = inlineBuilder.BuildDiffModel (fileA, fileC);

foreach (var line in diferenceAB.Lines)
{
if (line.Type == ChangeType.Inserted)
{
merged = String.Format ("{0}\n{1}", merged, line.Text);
}
else if (line.Type == ChangeType.Deleted)
{
//merged += String.Format ("- {0}\n", line.Text);
}
else
{
merged += String.Format ("{0}\n", line.Text);
}
}
File.WriteAllText (resultPath, merged);
return Validator.ValidateXML (ref merged);
}
}
public class FileMerger
{
private readonly string fileAPath;
private readonly string fileBPath;
private readonly string resultPath;
private MergePattern pattern;
private string extension;

public FileMerger(string fileAPath, string fileBPath, string resultPath)
{
if ((extension = Path.GetExtension(fileAPath)) != Path.GetExtension(fileBPath))
{
throw new PiggyFileException("File extensions dosn't math");
}

this.fileAPath = fileAPath;
this.fileBPath = fileBPath;
this.resultPath = resultPath;
}

public bool MergeFiles()
{
var file = FileTools.TextFile(extension, fileAPath, fileBPath);
if (file == null)
{
throw new PiggyFileException("Not a text file");
}
if (!string.IsNullOrWhiteSpace(file.TemplatePath))
{
var serializer = new XmlSerializer(typeof (MergePattern));
pattern = (MergePattern) serializer.Deserialize(File.OpenRead(file.TemplatePath));
}
switch (extension)
{
case "xml":
return MergeXmlFiles(); // && Validator.va;
case "json":
return MergeJsonFile();
default:
if (pattern != null)
{
return ConvertAndMerge(pattern);
}
return MergeTextFiles();
}
}

private bool ConvertAndMerge(MergePattern pattern)
{
try
{
var converter = new Converter();
var text1 = File.ReadAllText(fileAPath);
var text2 = File.ReadAllText(fileAPath);

var xmlReader1 = new XmlTextReader(new StringReader(converter.FileToXml(text1,pattern)));
var xmlReader2 = new XmlTextReader(new StringReader(converter.FileToXml(text2,pattern)));

var mergedXml = MergeXmlStreams(xmlReader1, xmlReader2);
var mergedText = converter.XmlToFile(mergedXml,pattern);
File.WriteAllText(resultPath, mergedText);
return true;
}
catch (System.Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}

public bool MergeTextFiles()
{
string fileA = File.ReadAllText(fileAPath);
string fileB = File.ReadAllText(fileBPath);
string merged = String.Empty;

var differ = new Differ();
var inlineBuilder = new InlineDiffBuilder(differ);
var diferenceA = inlineBuilder.BuildDiffModel(fileB, fileA);

foreach (var diffPieceA in diferenceA.Lines)
{
if (diffPieceA.Type == ChangeType.Inserted)
{
merged = String.Format("{0}\n{1}", merged, diffPieceA.Text);
}
else if (diffPieceA.Type != ChangeType.Deleted)
{
merged += String.Format("{0}\n", diffPieceA.Text);
}
}
File.WriteAllText(resultPath, merged);
return true;
}

private bool MergeXmlFiles()
{
try
{
var xmlReader1 = new XmlTextReader(fileAPath);
var xmlReader2 = new XmlTextReader(fileAPath);

var merged = MergeXmlStreams(xmlReader1, xmlReader2);
File.WriteAllText(resultPath, merged);
return true;
}
catch (System.Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}

}

private string MergeXmlStreams(XmlTextReader xmlreader1, XmlTextReader xmlreader2)
{
var ds = new DataSet();
ds.ReadXml(xmlreader1);
var ds2 = new DataSet();
ds2.ReadXml(xmlreader2);
ds.Merge(ds2);
return ds.GetXml();
}

private bool MergeJsonFile()
{
try
{
var converter = new Converter();
var json1 = File.ReadAllText(fileAPath);
var json2 = File.ReadAllText(fileAPath);

var xmlReader1 = new XmlTextReader(new StringReader(converter.JsonToXml(json1)));
var xmlReader2 = new XmlTextReader(new StringReader(converter.JsonToXml(json2)));

var mergedXml = MergeXmlStreams(xmlReader1, xmlReader2);
var mergedJson = converter.XmlToJson(mergedXml);
File.WriteAllText(resultPath, mergedJson);
return true;
}
catch (System.Exception ex)
{
Debug.WriteLine(ex.Message);
return false;
}
}
}
}
6 changes: 2 additions & 4 deletions PiggySync/PiggySync.FileMerger/FileTools.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
using System;
using PiggySync.Domain;
using PiggySync.Domain;
using PiggySync.Domain.Concrete;
using System.Linq;
using PiggySync.Model;
using System.IO;

namespace PiggySync.FileMerger
Expand All @@ -22,7 +20,7 @@ public static TextFile TextFile (string extension, string aPath, string bPath)
{
return XmlSettingsRepository.Instance.Settings.TextFiles.First (x => x.Extension == "txt");
}
throw new PiggyFileException ("Not a text file");
return null;
}

static bool IsTextFile (string filePath)
Expand Down
7 changes: 5 additions & 2 deletions PiggySync/PiggySync.FileMerger/PiggySync.FileMerger.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3296F3DE-89D1-4B00-8031-E17A62AFD039}</ProjectGuid>
<OutputType>Library</OutputType>
<OutputType>Exe</OutputType>
<RootNamespace>PiggySync.FileMerger</RootNamespace>
<AssemblyName>PiggySync.FileMerger</AssemblyName>
<ReleaseVersion>0.5</ReleaseVersion>
Expand All @@ -27,11 +27,15 @@
<WarningLevel>4</WarningLevel>
<ConsolePause>false</ConsolePause>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="DiffPlex">
<HintPath>..\packages\DiffPlex.1.2.1\lib\portable-net40+sl50+win+wpa81+wp80\DiffPlex.dll</HintPath>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq" />
<Reference Include="Newtonsoft.Json">
Expand All @@ -42,7 +46,6 @@
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="FileMerger.cs" />
<Compile Include="Validator.cs" />
<Compile Include="XmlElement.cs" />
<Compile Include="FileTools.cs" />
<Compile Include="Converter.cs" />
<Compile Include="Program.cs" />
Expand Down
43 changes: 21 additions & 22 deletions PiggySync/PiggySync.FileMerger/Program.cs
Original file line number Diff line number Diff line change
@@ -1,28 +1,27 @@
using System;
using System.IO;

namespace PiggySync.FileMerger
{
public class Program
{
public static void main(string[] args)
{
if (args.Length != 5)
{
Console.WriteLine ("USAGE: {0} filAPath, fileBPath, fileCPath, resultPath", args [0]);
}
else
{
if (new FileMerger (args [1], args [2], args [3], args [4]).MergeFiles ())
{
Console.WriteLine ("Succesfull merge");
}
else
{
Console.WriteLine ("Merge failed.");
}
}
}
}
public class Program
{
public static void Main(string[] args)
{
if (args.Length != 5)
{
Console.WriteLine("USAGE: {0} filAPath, fileBPath, resultPath", args[0]);
}
else
{
if (new FileMerger(args[1], args[2], args[3]).MergeTextFiles())
{
Console.WriteLine("Succesfull merge");
}
else
{
Console.WriteLine("Merge failed.");
}
}
}
}
}

Loading

0 comments on commit 00591ee

Please sign in to comment.