Skip to content

Commit fffae93

Browse files
committed
Changed the Console-app's arguments to take source-directory and target-directory. The whole app does not crash on one failed file.
1 parent ae63274 commit fffae93

File tree

2 files changed

+114
-105
lines changed

2 files changed

+114
-105
lines changed

aspx2razor/DirectoryHandler.cs

+39-44
Original file line numberDiff line numberDiff line change
@@ -1,77 +1,72 @@
1-
namespace aspx2razor
2-
{
3-
using System.IO;
4-
using System.Linq;
1+
using System.Collections.Generic;
2+
using System.IO;
3+
using System.Linq;
4+
5+
namespace aspx2razor {
56

67
/// <summary>
78
/// An object that will handle the traversing of directories and collection of files
89
/// </summary>
9-
public class DirectoryHandler
10-
{
10+
public class DirectoryHandler {
11+
private static IEnumerable<string> extensionFilter = new List<string>() {
12+
".aspx", ".ascx"
13+
};
14+
1115
private string InputDirectory { get; set; }
12-
private string InputFilter { get; set; }
1316
private string OutputDirectory { get; set; }
14-
17+
1518
/// <summary>
1619
/// Initializes a new DirectoryHandler instance
1720
/// </summary>
1821
/// <param name="inputDirectory">The initial directory to start inspections at</param>
1922
/// <param name="outputDirectory">The output directory to output to</param>
20-
public DirectoryHandler(string inputFile, string outputDirectory)
21-
{
22-
InputFilter = Path.GetFileName(inputFile) ?? "";
23-
InputDirectory = GetFullPathOrDefault(inputFile);
23+
public DirectoryHandler(string inputDirectory, string outputDirectory) {
24+
InputDirectory = GetFullPathOrDefault(inputDirectory);
2425

25-
if (string.IsNullOrEmpty(outputDirectory))
26-
{
26+
if(string.IsNullOrEmpty(outputDirectory)) {
2727
OutputDirectory = InputDirectory;
28-
}
29-
else
30-
{
28+
} else {
3129
OutputDirectory = Path.GetFullPath(outputDirectory);
3230
}
3331
}
3432

35-
public string[] GetFiles(bool includeSubdirectories)
36-
{
37-
return GetFiles(InputDirectory, InputFilter, includeSubdirectories);
33+
public IEnumerable<string> GetFiles(bool includeSubdirectories) {
34+
return GetFiles(InputDirectory, includeSubdirectories);
3835
}
3936

40-
public string GetOutputFileName(string fileName)
41-
{
37+
public string GetOutputFileName(string fileName) {
4238
var fullFileName = Path.GetFullPath(fileName);
4339
var relativeFileName = fullFileName.Remove(0, InputDirectory.Length + 1);
4440

4541
return Path.Combine(OutputDirectory, relativeFileName);
4642
}
4743

48-
private static string[] GetFiles(string inputDirectory, string inputFilter, bool includeSubdirectories)
49-
{
50-
if (!includeSubdirectories)
51-
{
52-
return Directory.GetFiles(inputDirectory, inputFilter);
53-
}
44+
private static List<string> GetFiles(string inputDirectory, bool includeSubdirectories) {
45+
var files = GetFileRecursive(new List<string>(), inputDirectory, includeSubdirectories);
46+
return files;
47+
}
5448

55-
string[] outFiles = Directory.GetFiles(inputDirectory, inputFilter);
56-
var di = new DirectoryInfo(inputDirectory);
57-
if (di.GetDirectories().Length > 0)
58-
{
59-
var directories = di.GetDirectories();
60-
outFiles =
61-
directories.Aggregate(outFiles,
62-
(current, subdirectory) => current.Union(GetFiles(subdirectory.FullName, inputFilter, true)).ToArray()
63-
);
64-
}
49+
private static List<string> GetFileRecursive(List<string> list, string directoryPath, bool recursive) {
50+
var directory = new DirectoryInfo(directoryPath);
51+
var files = directory.GetFiles().Where(file => extensionFilter.Contains(file.Extension));
52+
53+
list.AddRange(files.Select(file => file.FullName));
6554

66-
return outFiles;
55+
if(recursive) {
56+
var subDirectories = directory.GetDirectories();
57+
foreach(var subDirectory in subDirectories) {
58+
GetFileRecursive(list, subDirectory.FullName, recursive);
59+
}
60+
}
61+
return list;
6762
}
6863

69-
private static string GetFullPathOrDefault(string directory)
70-
{
71-
directory = Path.GetDirectoryName(directory);
64+
private static string GetFullPathOrDefault(string directory) {
65+
if(!Directory.Exists(directory)) {
66+
directory = Path.GetDirectoryName(directory);
67+
}
7268

73-
if (string.IsNullOrEmpty(directory))
74-
{
69+
if(string.IsNullOrEmpty(directory)) {
7570
directory = Directory.GetCurrentDirectory();
7671
}
7772

aspx2razor/Program.cs

+75-61
Original file line numberDiff line numberDiff line change
@@ -1,106 +1,120 @@
1-
namespace aspx2razor
2-
{
3-
using System;
4-
using System.ComponentModel.Composition;
5-
using System.ComponentModel.Composition.Hosting;
6-
using System.IO;
7-
using System.Linq;
8-
using System.Text;
9-
using Telerik.RazorConverter;
10-
using Telerik.RazorConverter.Razor.DOM;
11-
12-
class Program
13-
{
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel.Composition;
4+
using System.ComponentModel.Composition.Hosting;
5+
using System.IO;
6+
using System.Linq;
7+
using System.Text;
8+
9+
using Telerik.RazorConverter;
10+
using Telerik.RazorConverter.Razor.DOM;
11+
12+
namespace aspx2razor {
13+
14+
class Program {
1415
[Import]
15-
private IWebFormsParser Parser
16-
{
17-
get;
18-
set;
19-
}
16+
private IWebFormsParser Parser { get; set; }
2017

2118
[Import]
22-
private IWebFormsConverter<IRazorNode> Converter
23-
{
24-
get;
25-
set;
26-
}
19+
private IWebFormsConverter<IRazorNode> Converter { get; set; }
2720

2821
[Import]
29-
private IRenderer<IRazorNode> Renderer
30-
{
31-
get;
32-
set;
33-
}
22+
private IRenderer<IRazorNode> Renderer { get; set; }
3423

35-
private static void Main(string[] args)
36-
{
24+
private static void Main(string[] args) {
3725
var p = new Program();
3826
p.Run(args);
3927
}
4028

41-
private Program()
42-
{
29+
private Program() {
4330
var catalog = new AssemblyCatalog(typeof(IWebFormsParser).Assembly);
4431
var container = new CompositionContainer(catalog);
4532
container.ComposeParts(this);
4633
}
4734

48-
public void Run(string[] args)
49-
{
35+
public void Run(string[] args) {
5036
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
5137

52-
if (args.Length < 1)
53-
{
38+
if(args.Length < 1) {
5439
DisplayUsage();
5540
return;
5641
}
5742

43+
var failList = new List<string>();
44+
int successCount = 0;
45+
5846
var outputDirectory = (args.Length >= 2 && !args[1].StartsWith("-")) ? args[1] : "";
59-
var directoryHandler = new DirectoryHandler(args[0], outputDirectory);
47+
48+
DirectoryHandler directoryHandler;
49+
try {
50+
directoryHandler = new DirectoryHandler(args[0], outputDirectory);
51+
}
52+
catch(ArgumentException ex) {
53+
Console.WriteLine("The given directories were not valid: {0}", ex.Message);
54+
return;
55+
}
6056

6157
var recursive = args.Contains("-r", StringComparer.InvariantCultureIgnoreCase);
6258
var files = directoryHandler.GetFiles(recursive);
63-
foreach (var file in files)
64-
{
59+
foreach(var file in files) {
6560
Console.WriteLine("Converting {0}", file);
66-
67-
var webFormsPageSource = File.ReadAllText(file, Encoding.UTF8);
68-
var webFormsDocument = Parser.Parse(webFormsPageSource);
69-
var razorDom = Converter.Convert(webFormsDocument);
70-
var razorPage = Renderer.Render(razorDom);
71-
72-
var outputFileName = ReplaceExtension(directoryHandler.GetOutputFileName(file), ".cshtml");
73-
Console.WriteLine("Writing {0}", outputFileName);
74-
EnsureDirectory(Path.GetDirectoryName(outputFileName));
75-
File.WriteAllText(outputFileName, razorPage, Encoding.UTF8);
76-
77-
Console.WriteLine("Done\n");
61+
62+
try {
63+
var webFormsPageSource = File.ReadAllText(file, Encoding.UTF8);
64+
var webFormsDocument = Parser.Parse(webFormsPageSource);
65+
var razorDom = Converter.Convert(webFormsDocument);
66+
var razorPage = Renderer.Render(razorDom);
67+
68+
var outputFileName = ReplaceExtension(directoryHandler.GetOutputFileName(file), ".cshtml");
69+
Console.WriteLine("Writing {0}", outputFileName);
70+
EnsureDirectory(Path.GetDirectoryName(outputFileName));
71+
File.WriteAllText(outputFileName, razorPage, Encoding.UTF8);
72+
73+
Console.WriteLine("Done");
74+
successCount++;
75+
}
76+
catch(Exception ex) {
77+
Console.WriteLine("Exception Thrown!");
78+
AddFail(file, ex.Message, failList);
79+
}
80+
finally {
81+
Console.WriteLine();
82+
}
7883
}
7984

8085
var elapsed = stopwatch.Elapsed;
8186
Console.WriteLine();
82-
Console.WriteLine("{0} files converted", files.Length);
87+
Console.WriteLine("{0} files converted", successCount);
88+
89+
if(failList.Any()) {
90+
Console.WriteLine();
91+
Console.WriteLine("{0} files failed:", failList.Count);
92+
failList.ForEach(fail => Console.WriteLine(fail));
93+
Console.WriteLine();
94+
}
95+
8396
Console.WriteLine("Elapsed: {0} seconds", elapsed.TotalSeconds);
8497
}
8598

86-
private static void DisplayUsage()
87-
{
99+
private static void AddFail(string fileName, string errorMessage, IList<string> failList) {
100+
string fail = string.Format("- '{1}':{0} {2}", Environment.NewLine, fileName, errorMessage);
101+
failList.Add(fail);
102+
}
103+
104+
private static void DisplayUsage() {
88105
Console.WriteLine("Converts WebForms pages (.aspx, .ascx) into a Razor views (.cshtml)");
89-
Console.WriteLine("Usage: aspx2razor <input file / wildcard> [output-directory] [options]");
106+
Console.WriteLine("Usage: aspx2razor <input-directory> [output-directory] [options]");
90107
Console.WriteLine("Options available:\r");
91108
Console.WriteLine("-r: Convert directories and their contents recursively");
92109
}
93110

94-
private static void EnsureDirectory(string directory)
95-
{
96-
if (!Directory.Exists(directory))
97-
{
111+
private static void EnsureDirectory(string directory) {
112+
if(!Directory.Exists(directory)) {
98113
Directory.CreateDirectory(directory);
99114
}
100115
}
101116

102-
private static string ReplaceExtension(string fileName, string newExtension)
103-
{
117+
private static string ReplaceExtension(string fileName, string newExtension) {
104118
var targetFolder = Path.GetDirectoryName(fileName);
105119
return Path.Combine(targetFolder, Path.GetFileNameWithoutExtension(fileName) + newExtension);
106120
}

0 commit comments

Comments
 (0)