Пример #1
0
        public bool II_Init(RecordInfo recordInfo)
        {
            _incomingInfo = recordInfo;
            _info         = new RecordInfo();
            _copier       = new RecordCopier(_info, _incomingInfo, false);
            for (var index = 0; index < _incomingInfo.NumFields(); index++)
            {
                var field = _incomingInfo[index];
                if (field.FieldType != FieldType.E_FT_FixedDecimal)
                {
                    _info.AddField(field.GetFieldName(), field.FieldType, (int)field.Size, field.Scale, field.GetSource(), field.GetDescription());
                    _copier.Add(index, index);
                    continue;
                }

                var fieldType = FieldType.E_FT_Double;
                if (field.Scale == 0)
                {
                    fieldType = FieldType.E_FT_Int64;
                }
                _decimalMapping.Add(index, fieldType);
                _info.AddField(field.GetFieldName(), fieldType, 0, 0, field.GetSource(), field.GetDescription());
            }
            _copier.DoneAdding();
            _record = _info.CreateRecord();
            _parent.InitOutput(_info);
            return(true);
        }
Пример #2
0
        public bool II_PushRecord(RecordData recordDataIn)
        {
            // Prepare the output
            AlteryxRecordInfoNet.Record recordOut = _recordInfoOut.CreateRecord();
            recordOut.Reset();

            // Transfer existing data
            //copyRecordData(recordDataIn, recordOut);
            _recordCopier.Copy(recordOut, recordDataIn);

            // Collect data from fields
            string data   = getFieldBaseStringData(_dataField, recordDataIn);
            string schema = getFieldBaseStringData(_schemaField, recordDataIn);

            // Shortcut out if sanity checks fail
            if (string.IsNullOrWhiteSpace(data))
            {
                return(setOutput("MISSING_XML_DATA", recordOut));
            }
            if (string.IsNullOrWhiteSpace(schema))
            {
                return(setOutput("MISSING_XML_SCHEMA", recordOut));
            }
            if (!data.TrimStart().StartsWith("<"))
            {
                return(setOutput("DATA_NOT_XML", recordOut));
            }

            // We have two non-empty strings.

            // Schemas are expected as filenames, separated by semicolons.
            XmlSchemaSet setOfSchemas = XmlValidatorMechanics.getXmlSchemaSet(schema);

            XDocument doc = XDocument.Parse(data);

            List <string> errors = new List <string>();

            doc.Validate(setOfSchemas, (o, e) =>
            {
                errors.Add(e.Message);
            }, true);

            string allErrors = string.Join("|", errors);

            // If no errors, say VALID, else, say the errors.
            if (string.IsNullOrWhiteSpace(allErrors))
            {
                return(setOutput("VALID", recordOut));
            }
            else
            {
                return(setOutput(allErrors, recordOut));
            }
        }
Пример #3
0
        private void pushRecord(
            Int32 xCoord, Int32 yCoord,
            Int32 rValue, Int32 gValue, Int32 bValue,
            Int32 alphaValue, RecordData recordDataIn)
        {
            Record recordOut = _recordInfoOut.CreateRecord();

            recordOut.Reset();

            _recordCopier.Copy(recordOut, recordDataIn);

            var outFieldCount        = _recordInfoOut.NumFields();
            int indexXCoordField     = (int)outFieldCount - 6;
            int indexYCoordField     = (int)outFieldCount - 5;
            int indexRValueField     = (int)outFieldCount - 4;
            int indexGValueField     = (int)outFieldCount - 3;
            int indexBValueField     = (int)outFieldCount - 2;
            int indexAlphaValueField = (int)outFieldCount - 1;

            // RValue Field
            FieldBase fieldBase = _recordInfoOut[indexXCoordField];

            fieldBase.SetFromInt32(recordOut, xCoord);
            // RValue Field
            fieldBase = _recordInfoOut[indexYCoordField];
            fieldBase.SetFromInt32(recordOut, yCoord);
            // RValue Field
            fieldBase = _recordInfoOut[indexRValueField];
            fieldBase.SetFromInt32(recordOut, rValue);
            // GValue Field
            fieldBase = _recordInfoOut[indexGValueField];
            fieldBase.SetFromInt32(recordOut, gValue);
            // RValue Field
            fieldBase = _recordInfoOut[indexBValueField];
            fieldBase.SetFromInt32(recordOut, bValue);
            // AlphaValue Field
            fieldBase = _recordInfoOut[indexAlphaValueField];
            fieldBase.SetFromInt32(recordOut, alphaValue);

            _outputHelper.PushRecord(recordOut.GetRecord());
        }
        private void pushRecord(string path, string value, RecordData recordDataIn)
        {
            Record recordOut = _recordInfoOut.CreateRecord();

            recordOut.Reset();

            _recordCopier.Copy(recordOut, recordDataIn);

            var outFieldCount   = _recordInfoOut.NumFields();
            int indexPathField  = (int)outFieldCount - 2;
            int indexValueField = (int)outFieldCount - 1;

            // Path Field
            FieldBase fieldBase = _recordInfoOut[indexPathField];

            fieldBase.SetFromString(recordOut, path);

            // Value Field
            fieldBase = _recordInfoOut[indexValueField];
            fieldBase.SetFromString(recordOut, value);

            _outputHelper.PushRecord(recordOut.GetRecord());
        }
Пример #5
0
        public bool II_Init(RecordInfo recordInfo)
        {
            _info         = new RecordInfo();
            _incomingInfo = recordInfo;
            _copier       = new RecordCopier(_info, _incomingInfo, false);
            for (var i = 0; i < _incomingInfo.NumFields(); i++)
            {
                _info.AddField(_incomingInfo[i]);
                _copier.Add(i, i);
            }
            _copier.DoneAdding();
            _info.AddField(_parent.NewField, FieldType.E_FT_Int64);
            _newField = _info.GetFieldByName(_parent.NewField, false);

            _fields = new FieldBase[_parent.Fields.Length];
            for (var i = 0; i < _fields.Length; i++)
            {
                _fields[i] = _incomingInfo.GetFieldByName(_parent.Fields[i], false);
            }

            _record = _info.CreateRecord();
            _parent.Output.Init(_info, "Output", null, _parent.Config);
            return(true);
        }
        public bool II_PushRecord(RecordData recordDataIn)
        {
            DebugMessage($"II_PushRecord() Entering; ToolID={_toolID}");

            // The same object is used in each call, so reset the result fields before using them.
            _retCode = "";
            _cmdLine = "";
            lock (_sbStdOutLock) { _sbStdOut.Clear(); }
            lock (_sbExceptionsLock) { _sbExceptions.Clear(); }



            // Check the paths to Executable and Script...
            string exePath = getFieldBaseStringData(_exePathField, recordDataIn);

            checkValidPath(exePath, _exePathField);

            // Do the magic
            shell(exePath, getArguments(recordDataIn));

            // Get the output
            string stdOut = "";

            lock (_sbStdOutLock)
            { stdOut = _sbStdOut.ToString(); }

            // Get the exceptions
            string exceptions = "";

            lock (_sbExceptionsLock)
            { exceptions = _sbExceptions.ToString(); }


            // Prepare the output
            AlteryxRecordInfoNet.Record recordOut = _recordInfoOut.CreateRecord();
            recordOut.Reset();

            // Transfer existing data
            _recordCopier.Copy(recordOut, recordDataIn);


            // Set Output Fields
            var numInputFields = (int)_recordInfoIn.NumFields();

            AlteryxRecordInfoNet.FieldBase fbStdOut = _recordInfoOut[numInputFields];
            fbStdOut.SetFromString(recordOut, stdOut);

            AlteryxRecordInfoNet.FieldBase fbRetCode = _recordInfoOut[numInputFields + 1];
            fbRetCode.SetFromString(recordOut, _retCode);

            AlteryxRecordInfoNet.FieldBase fbExceptions = _recordInfoOut[numInputFields + 2];
            fbExceptions.SetFromString(recordOut, exceptions);

            AlteryxRecordInfoNet.FieldBase fbDiagnostics = _recordInfoOut[numInputFields + 3];
            fbDiagnostics.SetFromString(recordOut, _cmdLine);


            // Output
            _outputHelper.PushRecord(recordOut.GetRecord());


            // Clear the accumulated strings for next record
            _retCode = "";
            _cmdLine = "";
            lock (_sbStdOutLock) { _sbStdOut.Clear(); }
            lock (_sbExceptionsLock) { _sbExceptions.Clear(); }

            DebugMessage($"II_PushRecord() Exiting; ToolID={_toolID}");
            return(true);
        }
Пример #7
0
        public void II_Close()
        {
            DebugMessage($"II_Close() has been called; ToolID={_toolID}");

            // Get Concavity and ScaleFactor
            double concavity = 90;

            try { concavity = Convert.ToDouble(_sConcavity); }
            catch
            {
                WarningMessage($"Failed to convert concavity [{_sConcavity}] to double value;  Using 90 degrees;");
                concavity = 0;
            }

            /*
             * Int32 scaleFactor = 1;
             * try { scaleFactor = Convert.ToInt32(_sScaleFactor); }
             * catch
             * {
             *  WarningMessage($"Failed to convert scale factor [{_sScaleFactor}] to integer value;  Using 1;");
             *  scaleFactor = 1;
             * }
             *
             * if (scaleFactor < 1)
             * {
             *  WarningMessage($"Scale factor [{_sScaleFactor}] was unacceptable;  Positive non-zero integer required; Using 1;");
             *  scaleFactor = 1;
             * }
             */

            foreach (KeyValuePair <string, List <Tuple <Double, Double> > > kvp in _dicPoints)
            {
                DebugMessage($"Group [{kvp.Key}] has [{kvp.Value.Count}] points.  Would process at this point.");



                ////////////////////
                // HULL PROCESSING

                List <Node> dot_list = new List <Node>();
                int         id       = 0;
                foreach (Tuple <double, double> element in kvp.Value)
                {
                    ++id;
                    Node node = new Node(element.Item1, element.Item2, id);
                    dot_list.Add(node);
                }

                var hull = new Hull();
                hull.makeHull(dot_list, concavity);
                List <Node> way = hull.getWay();

                string diag = hull.dumpWay(way);

                // END HULL PROCESSING
                ////////////////////////

                int seq = 0;
                foreach (Node node in way)
                {
                    Record recordOut = _recordInfoOut.CreateRecord();
                    recordOut.Reset();

                    // Group
                    FieldBase fieldBase = _recordInfoOut[0];
                    fieldBase.SetFromString(recordOut, kvp.Key);

                    // Sequence Number Dummy
                    fieldBase = _recordInfoOut[1];
                    fieldBase.SetFromInt32(recordOut, seq);

                    // XCoord
                    fieldBase = _recordInfoOut[2];
                    fieldBase.SetFromDouble(recordOut, node.x);

                    // YCoord
                    fieldBase = _recordInfoOut[3];
                    fieldBase.SetFromDouble(recordOut, node.y);

                    // Write record
                    _outputHelper.PushRecord(recordOut.GetRecord());

                    ++seq;
                }
            }


            DebugMessage($"II_Close() is exiting; ToolID={_toolID}");
        }