Skip to content

Commit 2fc510d

Browse files
committed
Removed schema layer.
Added ReClassNetProject.
1 parent 56c1099 commit 2fc510d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

70 files changed

+2044
-1618
lines changed

DataExchange/CustomNodeConverter.cs

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Diagnostics.Contracts;
4+
using System.Linq;
5+
using System.Xml.Linq;
6+
using ReClassNET.Logger;
7+
using ReClassNET.Nodes;
8+
9+
namespace ReClassNET.DataExchange
10+
{
11+
[ContractClass(typeof(ICustomNodeConverterContract))]
12+
public interface ICustomNodeConverter
13+
{
14+
/// <summary>Determine if the instance can handle the xml element.</summary>
15+
/// <param name="element">The xml element to check.</param>
16+
/// <returns>True if the instance can handle the element, false if not.</returns>
17+
bool CanHandleElement(XElement element);
18+
19+
/// <summary>Determine if the instance can handle the node.</summary>
20+
/// <param name="node">The node to check.</param>
21+
/// <returns>True if the instance can handle the node, false if not.</returns>
22+
bool CanHandleNode(BaseNode node);
23+
24+
/// <summary>Creates a schema node from the xml element. This method gets only called if <see cref="CanHandleElement(XElement)"/> returned true.</summary>
25+
/// <param name="element">The element to create the schema from.</param>
26+
/// <param name="classes">The list of classes which correspond to the schema.</param>
27+
/// <param name="logger">The logger used to output messages.</param>
28+
/// <returns>The schema node for the xml element.</returns>
29+
BaseNode CreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger);
30+
31+
/// <summary>Creates a xml element from the schema node. This method gets only called if <see cref="CanHandleSchema(SchemaCustomNode)"/> returned true.</summary>
32+
/// <param name="node">The schema node to create the xml element from.</param>
33+
/// <param name="logger">The logger used to output messages.</param>
34+
/// <returns>The xml element for the schema node.</returns>
35+
XElement CreateElementFromNode(BaseNode node, ILogger logger);
36+
}
37+
38+
[ContractClassFor(typeof(ICustomNodeConverter))]
39+
internal abstract class ICustomNodeConverterContract : ICustomNodeConverter
40+
{
41+
public bool CanHandleElement(XElement element)
42+
{
43+
Contract.Requires(element != null);
44+
45+
throw new NotImplementedException();
46+
}
47+
48+
public bool CanHandleNode(BaseNode node)
49+
{
50+
Contract.Requires(node != null);
51+
52+
throw new NotImplementedException();
53+
}
54+
55+
public BaseNode CreateNodeFromElement(XElement element, ClassNode parent, IEnumerable<ClassNode> classes, ILogger logger)
56+
{
57+
Contract.Requires(element != null);
58+
Contract.Requires(CanHandleElement(element));
59+
Contract.Requires(parent != null);
60+
Contract.Requires(classes != null);
61+
Contract.Requires(Contract.ForAll(classes, c => c != null));
62+
Contract.Requires(logger != null);
63+
Contract.Ensures(Contract.Result<BaseNode>() != null);
64+
65+
throw new NotImplementedException();
66+
}
67+
68+
public XElement CreateElementFromNode(BaseNode node, ILogger logger)
69+
{
70+
Contract.Requires(node != null);
71+
Contract.Requires(CanHandleNode(node));
72+
Contract.Requires(logger != null);
73+
Contract.Ensures(Contract.Result<XElement>() != null);
74+
75+
throw new NotImplementedException();
76+
}
77+
}
78+
79+
public class CustomNodeConvert
80+
{
81+
private static readonly List<ICustomNodeConverter> converters = new List<ICustomNodeConverter>();
82+
83+
public static void RegisterCustomType(ICustomNodeConverter converter)
84+
{
85+
Contract.Requires(converter != null);
86+
87+
converters.Add(converter);
88+
}
89+
90+
public static void DeregisterCustomType(ICustomNodeConverter converter)
91+
{
92+
Contract.Requires(converter != null);
93+
94+
converters.Remove(converter);
95+
}
96+
97+
public static ICustomNodeConverter GetReadConverter(XElement element)
98+
{
99+
Contract.Requires(element != null);
100+
101+
return converters.Where(c => c.CanHandleElement(element)).FirstOrDefault();
102+
}
103+
104+
public static ICustomNodeConverter GetWriteConverter(BaseNode node)
105+
{
106+
Contract.Requires(node != null);
107+
108+
return converters.Where(c => c.CanHandleNode(node)).FirstOrDefault();
109+
}
110+
}
111+
}

DataExchange/CustomSchemaConverter.cs

Lines changed: 0 additions & 168 deletions
This file was deleted.

DataExchange/IReClassExport.cs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
using System.Diagnostics.Contracts;
2+
using System.IO;
23
using ReClassNET.Logger;
34

45
namespace ReClassNET.DataExchange
56
{
67
[ContractClass(typeof(IReClassExportContract))]
78
public interface IReClassExport
89
{
9-
void Save(string filePath, SchemaBuilder schema, ILogger logger);
10+
void Save(string filePath, ILogger logger);
11+
12+
void Save(Stream output, ILogger logger);
1013
}
1114

1215
[ContractClassFor(typeof(IReClassExport))]
1316
internal abstract class IReClassExportContract : IReClassExport
1417
{
15-
public void Save(string filePath, SchemaBuilder schema, ILogger logger)
18+
public void Save(string filePath, ILogger logger)
1619
{
1720
Contract.Requires(filePath != null);
18-
Contract.Requires(schema != null);
21+
Contract.Requires(logger != null);
22+
}
23+
24+
public void Save(Stream output, ILogger logger)
25+
{
26+
Contract.Requires(output != null);
1927
Contract.Requires(logger != null);
2028
}
2129
}

DataExchange/IReClassImport.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ namespace ReClassNET.DataExchange
77
[ContractClass(typeof(IReClassImportContract))]
88
public interface IReClassImport
99
{
10-
SchemaBuilder Load(string filePath, ILogger logger);
10+
void Load(string filePath, ILogger logger);
1111
}
1212

1313
[ContractClassFor(typeof(IReClassImport))]
1414
internal abstract class IReClassImportContract : IReClassImport
1515
{
16-
public SchemaBuilder Load(string filePath, ILogger logger)
16+
public void Load(string filePath, ILogger logger)
1717
{
1818
Contract.Requires(filePath != null);
1919
Contract.Requires(logger != null);

0 commit comments

Comments
 (0)