public override void HandleTextEntered(EditorControl control, string insertText) { var text = control.Editor.Text.Substring(0, control.Editor.CaretOffset); switch (insertText[0]) { case ':': if (XmlParser.IsInsideAttributeValue(text, text.Length)) { var namespaces = XmlParser.GetNamespacesInScope(text); var i = text.Length - 2; while (Char.IsLetterOrDigit(text[i]) || text[i] == '_') { i--; } string namespaceUri; if (namespaces != null && namespaces.TryGetValue(text.Substring(i + 1).TrimEnd(':'), out namespaceUri)) { var methods = ArasXsltExtensions.GetExtensionMethods(namespaceUri).OrderBy(m => m.Name); control.ShowCompletionWindow(from m in methods group m by m.Name into Group select new BasicCompletionData(Group.Key, Group.Select(MethodToString).Aggregate((p, c) => p + Environment.NewLine + c)), 0); } } break; default: base.HandleTextEntered(control, insertText); break; } }
private void RunTest(string query) { outputEditor.Text = ArasXsltExtensions.Transform(query, _xmlWriter.ToString(), _wizard.Connection); }
public void ProcessImport(IDataExtractor extractor, string xslt, int batchSize) { _extractor = extractor; Exception error = null; _completeDate = DateTime.MinValue; _globallyProcessed = 0; try { extractor.Reset(); using (_cts = new CancellationTokenSource()) { var opts = new ParallelOptions(); opts.CancellationToken = _cts.Token; Parallel.ForEach(GetXml(extractor, batchSize), opts, xml => { int locallyProcessed = 0; var doc = new XmlDocument(); doc.LoadXml(ArasXsltExtensions.Transform(xslt, xml, _conn.ExternalConnection)); IList <XmlElement> levelElements = new XmlElement[] { doc.DocumentElement }; while (!levelElements.Any(e => e.LocalName == "AML" || e.LocalName == "SQL" || e.LocalName == "sql" || e.LocalName == "Item")) { levelElements = levelElements.Elements(e => true).ToList(); } var isError = false; for (var i = 0; i < levelElements.Count; i++) { Action <int, int> progressReporter = (curr, count) => { var progress = (int)(((double)(count * i + curr) / (count * levelElements.Count)) * batchSize); if (progress > locallyProcessed) { Interlocked.Add(ref _globallyProcessed, progress - locallyProcessed); } locallyProcessed = progress; SignalProgress(batchSize); }; XmlNode result; switch (levelElements[i].LocalName) { case "AML": result = _conn.CallAction("ApplyAML", levelElements[i], progressReporter); break; case "SQL": case "sql": result = _conn.CallAction("ApplySQL", levelElements[i], progressReporter); break; case "Item": result = _conn.CallAction("ApplyItem", levelElements[i], progressReporter); break; default: result = null; break; } if (_conn.GetError(result) != null) { _errors.Add(new ErrorEntry() { Error = result.OuterXml, Query = xml }); isError = true; break; } } if (isError) { Interlocked.Increment(ref _errorBlocks); } Interlocked.Add(ref _globallyProcessed, batchSize - locallyProcessed); SignalProgress(batchSize); opts.CancellationToken.ThrowIfCancellationRequested(); }); } } catch (OperationCanceledException) { } catch (Exception ex) { error = ex; } finally { _cts = null; } _completeDate = DateTime.Now; OnActionComplete(new ActionCompleteEventArgs() { Exception = error }); }