Exemplo n.º 1
0
        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;
            }
        }
Exemplo n.º 2
0
 private void RunTest(string query)
 {
     outputEditor.Text = ArasXsltExtensions.Transform(query, _xmlWriter.ToString(), _wizard.Connection);
 }
Exemplo n.º 3
0
        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
            });
        }