18 using System.Collections.Generic;
21 using System.Xml.XPath;
22 using TraceLabSDK.Types;
24 namespace TraceLab.Components.DevelopmentKit.IO
40 public static TLArtifactsCollection
ImportFile(
string filename)
42 StreamReader file =
new StreamReader(filename);
43 TLArtifactsCollection answer =
new TLArtifactsCollection();
45 while ((line = file.ReadLine()) != null)
47 List<string> artifacts =
new List<string>(line.Split());
48 String
id = artifacts[0].Trim();
49 artifacts.RemoveAt(0);
50 String doc = String.Join(
" ", artifacts);
51 answer.Add(
new TLArtifact(
id, doc));
64 public static TLArtifactsCollection
ImportFile(
string filename, out List<string> map)
66 map =
new List<string>();
67 StreamReader file =
new StreamReader(filename);
68 TLArtifactsCollection answer =
new TLArtifactsCollection();
70 while ((line = file.ReadLine()) != null)
72 List<string> artifacts =
new List<string>(line.Split());
73 String
id = artifacts[0].Trim();
74 artifacts.RemoveAt(0);
75 String doc = String.Join(
" ", artifacts);
76 answer.Add(
new TLArtifact(
id, doc));
90 TLArtifactsCollection artifacts =
new TLArtifactsCollection();
91 if (String.IsNullOrWhiteSpace(filter))
93 foreach (
string file
in Directory.GetFiles(path))
95 artifacts.Add(
new TLArtifact(Path.GetFileName(file), File.ReadAllText(file)));
100 foreach (
string file
in Directory.GetFiles(path,
"*." + filter))
102 artifacts.Add(
new TLArtifact(Path.GetFileNameWithoutExtension(file), File.ReadAllText(file)));
117 TextReader map =
new StreamReader(mappingFile);
118 TextReader raw =
new StreamReader(rawFile);
119 TLArtifactsCollection artifacts =
new TLArtifactsCollection();
120 string mapLine, rawLine;
121 while ((mapLine = map.ReadLine()) != null)
123 if ((rawLine = raw.ReadLine()) == null)
127 artifacts.Add(
new TLArtifact(mapLine, rawLine));
138 public static TLArtifactsCollection
ImportXMLFile(
string filepath,
bool trimValues)
140 TLArtifactsCollection artifacts =
new TLArtifactsCollection();
141 XPathDocument doc =
new XPathDocument(filepath);
142 XPathNavigator nav = doc.CreateNavigator();
144 artifacts.CollectionId = ReadSingleXMLNode(filepath, nav,
"/artifacts_collection/collection_info/id");
145 artifacts.CollectionName = ReadSingleXMLNode(filepath, nav,
"/artifacts_collection/collection_info/name");
146 artifacts.CollectionVersion = ReadSingleXMLNode(filepath, nav,
"/artifacts_collection/collection_info/version");
147 artifacts.CollectionDescription = ReadSingleXMLNode(filepath, nav,
"/artifacts_collection/collection_info/description");
150 artifacts.CollectionId = artifacts.CollectionId.Trim();
151 artifacts.CollectionName = artifacts.CollectionName.Trim();
152 artifacts.CollectionVersion = artifacts.CollectionVersion.Trim();
153 artifacts.CollectionDescription = artifacts.CollectionDescription.Trim();
156 XPathNavigator iter = nav.SelectSingleNode(
"/artifacts_collection/collection_info/content_location");
157 string content_location_type =
"internal";
161 content_location_type = iter.Value;
164 string rootDir = System.IO.Path.GetDirectoryName(filepath);
165 XPathNodeIterator artifactsIterator = nav.Select(
"/artifacts_collection/artifacts/artifact");
168 while (artifactsIterator.MoveNext())
170 iter = artifactsIterator.Current.SelectSingleNode(
"id");
171 artifactId = iter.InnerXml;
172 iter = artifactsIterator.Current.SelectSingleNode(
"content");
173 if (content_location_type.Equals(
"external"))
175 content = System.IO.File.ReadAllText(System.IO.Path.Combine(rootDir, iter.InnerXml.Trim()));
179 content = iter.InnerXml;
183 artifactId = artifactId.Trim();
184 content = content.Trim();
187 if (!artifacts.ContainsKey(artifactId))
189 TLArtifact artifact =
new TLArtifact(artifactId, content);
190 artifacts.Add(artifactId, artifact);
211 private static string ReadSingleXMLNode(
string filepath, XPathNavigator nav,
string xpath)
213 XPathNavigator iter = nav.SelectSingleNode(xpath);
216 throw new XmlException(String.Format(
"The format of the given file {0} is not correct. The xml node {1} has not been found in the file.", filepath, xpath));
218 return iter.InnerXml;
231 public static void ExportFile(TLArtifactsCollection artifacts,
string outputfile)
233 TextWriter tw =
new StreamWriter(outputfile);
234 foreach (TLArtifact artifact
in artifacts.Values)
236 tw.WriteLine(artifact.Id +
" " + artifact.Text.Replace(
"\n",
" ").Replace(
"\r", String.Empty));
251 public static void ExportXML(TLArtifactsCollection artifactsCollection,
string outputPath,
string collectionId,
string name,
string version,
string description)
253 XmlWriterSettings settings =
new XmlWriterSettings();
254 settings.Indent =
true;
255 settings.CloseOutput =
true;
256 settings.CheckCharacters =
true;
258 using (XmlWriter writer = XmlWriter.Create(outputPath, settings))
260 writer.WriteStartDocument();
261 writer.WriteStartElement(
"artifacts_collection");
262 WriteXMLCollectionInfo(writer, collectionId, name, version, description);
263 WriteXMLArtifacts(artifactsCollection, writer);
264 writer.WriteEndElement();
265 writer.WriteEndDocument();
268 System.Diagnostics.Trace.WriteLine(
"File created, you can find the file " + outputPath);
279 private static void WriteXMLCollectionInfo(XmlWriter writer,
string collectionId,
string name,
string version,
string description)
281 writer.WriteStartElement(
"collection_info");
282 writer.WriteElementString(
"id", collectionId.Trim());
283 writer.WriteElementString(
"name", name.Trim());
284 writer.WriteElementString(
"version", version.Trim());
285 writer.WriteElementString(
"description", description.Trim());
286 writer.WriteEndElement();
294 private static void WriteXMLArtifacts(TLArtifactsCollection artifactsCollection, XmlWriter writer)
296 writer.WriteStartElement(
"artifacts");
297 foreach (KeyValuePair<string, TLArtifact> artifact
in artifactsCollection)
299 writer.WriteStartElement(
"artifact");
300 writer.WriteElementString(
"id", artifact.Value.Id.Trim());
301 writer.WriteElementString(
"content", artifact.Value.Text.Trim());
302 writer.WriteElementString(
"parent_id", String.Empty);
303 writer.WriteEndElement();
305 writer.WriteEndElement();