示例#1
0
        private static bool LoadRequiredFields(XmlNode inputNode, ValuePresentation unit)
        {
            var offsetValue = inputNode.GetXmlNodeValue("@B");
            var scaleValue = inputNode.GetXmlNodeValue("@C");
            var decimalDigitsValue = inputNode.GetXmlNodeValue("@D");

            if (string.IsNullOrEmpty(offsetValue) ||
                string.IsNullOrEmpty(scaleValue) ||
                string.IsNullOrEmpty(decimalDigitsValue))
                return false;

            long offset;
            if (!long.TryParse(offsetValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out offset))
                return false;
            unit.Offset = offset;

            double scale;
            if (!double.TryParse(scaleValue, NumberStyles.Number, CultureInfo.InvariantCulture, out scale) ||
                scale < 0)
                return false;
            unit.Scale = scale;

            byte decimalDigits;
            if (!byte.TryParse(decimalDigitsValue, NumberStyles.Integer, CultureInfo.InvariantCulture, out decimalDigits) ||
                decimalDigits < 0 || decimalDigits > 7)
                return false;
            unit.DecimalDigits = decimalDigits;

            return true;
        }
示例#2
0
        private bool LoadCellDimensions(XmlNode inputNode)
        {
            double gridCellSizeLatitude;
            if (!inputNode.GetXmlNodeValue("@C").ParseValue(out gridCellSizeLatitude) ||
                gridCellSizeLatitude < 0 || gridCellSizeLatitude > 1)
                return false;

            double gridCellSizeLongitude;
            if (!inputNode.GetXmlNodeValue("@D").ParseValue(out gridCellSizeLongitude) ||
                gridCellSizeLongitude < 0 || gridCellSizeLongitude > 1)
                return false;

            int columnCount;
            if (!inputNode.GetXmlNodeValue("@E").ParseValue(out columnCount) ||
                columnCount < 0)
                return false;

            int rowCount;
            if (!inputNode.GetXmlNodeValue("@F").ParseValue(out rowCount) ||
                rowCount < 0)
                return false;

            _descriptor.ColumnCount = columnCount;
            _descriptor.RowCount = rowCount;
            _descriptor.CellHeight = new NumericRepresentationValue(null, new NumericValue(null, gridCellSizeLatitude));
            _descriptor.CellWidth = new NumericRepresentationValue(null, new NumericValue(null, gridCellSizeLongitude));

            return true;
        }
示例#3
0
        private DataVariable LoadDataVariable(XmlNode inputNode)
        {
            var ddiValue = inputNode.GetXmlNodeValue("@A");
            if (string.IsNullOrEmpty(ddiValue))
                return null;

            var ddi = Convert.ToInt32(ddiValue, 16);

            long dataValue;
            if (!inputNode.GetXmlNodeValue("@B").ParseValue(out dataValue))
                dataValue = 0;

            var userUnit = _taskDocument.Units.FindById(inputNode.GetXmlNodeValue("@E"));

            var unit = UnitFactory.Instance.GetUnitByDdi(ddi);

            var dataVariable = new DataVariable
            {
                Ddi = ddi,
                Value = unit.ConvertFromIsoUnit(dataValue),
                ProductId = inputNode.GetXmlNodeValue("@C"),
                IsoUnit = unit,
                UserUnit = userUnit.ToAdaptUnit()
            };

            return dataVariable;
        }
        private static GpsSource GetGpsSource(XmlNode inputNode)
        {
            var gpsSource = new GpsSource();

            gpsSource.SourceType = GetSourceType(inputNode.GetXmlNodeValue("@I"));
            gpsSource.HorizontalAccuracy = GetAccuracy(inputNode.GetXmlNodeValue("@J"));
            gpsSource.VerticalAccuracy = GetAccuracy(inputNode.GetXmlNodeValue("@K"));
            return gpsSource;
        }
示例#5
0
        public static Point LoadPoint(XmlNode pointNode)
        {
            double latitude, longitude;
            if (pointNode.GetXmlNodeValue("@C").ParseValue(out latitude) == false ||
                pointNode.GetXmlNodeValue("@D").ParseValue(out longitude) == false)
                return null;

            var point = new Point();
            point.X = longitude;
            point.Y = latitude;

            return point;
        }
        private static GpsSource GetGpsSource(XmlNode inputNode)
        {
            var gpsSource = new GpsSource
            {
                SourceType = GetSourceType(inputNode.GetXmlNodeValue("@D"))
            };

            int satelliteCount;
            if (inputNode.GetXmlNodeValue("@G").ParseValue(out satelliteCount))
                gpsSource.NumberOfSatellites = satelliteCount;

            gpsSource.GpsUtcTime = GetGpsTime(inputNode);

            return gpsSource;
        }
示例#7
0
        private static CropVariety LoadVariety(XmlNode inputNode, out string varietyId)
        {
            varietyId = inputNode.GetXmlNodeValue("@A");
            var description = inputNode.GetXmlNodeValue("@B");
            if (string.IsNullOrEmpty(varietyId) || string.IsNullOrEmpty(description))
                return null;

            var variety = new CropVariety
            {
                ProductType = ProductTypeEnum.Variety,
                Description = description
            };
            variety.Id.UniqueIds.Add(ImportHelper.CreateUniqueId(varietyId));

            return variety;
        }
示例#8
0
        private static GuidanceGroupDescriptor LoadGuidanceGroup(XmlNode inputNode, out string groupId)
        {
            groupId = inputNode.GetXmlNodeValue("@A");
            if (string.IsNullOrEmpty(groupId))
                return null;

            var group = new GuidanceGroup();
            group.Description = inputNode.GetXmlNodeValue(@"B");

            group.BoundingPolygon = ShapeLoader.LoadPolygon(inputNode.SelectNodes("PLN[0]"));

            var patterns = GuidancePatternLoader.LoadGuidancePatterns(inputNode.SelectNodes("GPN"));
            group.GuidancePatternIds = patterns.Values.Select(x => x.Id.ReferenceId).ToList();

            return new GuidanceGroupDescriptor(group, patterns);
        }
示例#9
0
        private Crop LoadCrop(XmlNode inputNode, out string cropId)
        {
            var crop = new Crop();

            // Required fields. Do not proceed if they are missing
            cropId = inputNode.GetXmlNodeValue("@A");
            crop.Name = inputNode.GetXmlNodeValue("@B");
            if (cropId == null || crop.Name == null)
                return null;
            crop.Id.UniqueIds.Add(ImportHelper.CreateUniqueId(cropId));

            // Optional fields
            LoadVarieties(inputNode, crop);

            _taskDocument.LoadLinkedIds(cropId, crop.Id);
            return crop;
        }
示例#10
0
        private static bool IsProductMix(XmlNode inputNode)
        {
            var productType = inputNode.GetXmlNodeValue("@F");

            return !string.IsNullOrEmpty(productType) &&
                string.Equals(productType, "2", StringComparison.OrdinalIgnoreCase) &&
                inputNode.SelectNodes("PRN").Count > 0;
        }
示例#11
0
        private static UniqueId LoadLink(XmlNode inputNode, out string linkId)
        {
            linkId = inputNode.GetXmlNodeValue("@A");
            if (string.IsNullOrEmpty(linkId))
                return null;

            var linkValue = inputNode.GetXmlNodeValue("@B");
            if (string.IsNullOrEmpty(linkValue))
                return null;

            var uniqueId = new UniqueId
            {
                Id = linkValue,
                Source = inputNode.GetXmlNodeValue("@C")
            };

            return uniqueId;
        }
示例#12
0
        private static bool VerifyRootNode(XmlNode rootNode)
        {
            var majorVersion = rootNode.GetXmlNodeValue("@VersionMajor");
            IsoVersionEnum isoVersion;
            if (majorVersion == null || Enum.TryParse(majorVersion, true, out isoVersion) == false ||
                isoVersion != IsoVersionEnum.Standard_V2_Final_Draft)
                return false;

            return true;
        }
示例#13
0
        private static void LoadLinkedGroup(XmlNode inputNode)
        {
            var groupId = inputNode.GetXmlNodeValue("@A");
            if (string.IsNullOrEmpty(groupId))
                return;

            var groupTypeValue = inputNode.GetXmlNodeValue("@B");
            if (string.IsNullOrEmpty(groupTypeValue))
                return;

            var manufacturerGln = inputNode.GetXmlNodeValue("@C");
            var groupNamespace = inputNode.GetXmlNodeValue("@D");
            if (groupTypeValue.Equals("2", StringComparison.OrdinalIgnoreCase) &&
                string.IsNullOrEmpty(manufacturerGln))
                return;

            var linkNodes = inputNode.SelectNodes("LNK");
            LoadLinks(linkNodes, groupTypeValue, manufacturerGln, groupNamespace);
        }
示例#14
0
 private void AssignCustomer(XmlNode inputNode, Farm farm)
 {
     var customerId = inputNode.GetXmlNodeValue("@I");
     if (string.IsNullOrEmpty(customerId) == false)
     {
         var customer = _taskDocument.Customers.FindById(customerId);
         if (customer != null)
             farm.GrowerId = customer.Id.ReferenceId;
     }
 }
示例#15
0
        private void AssignFarm(XmlNode inputNode, Field field)
        {
            var farmId = inputNode.GetXmlNodeValue("@F");
            if (string.IsNullOrEmpty(farmId))
                return;

            var farm = _taskDocument.Farms.FindById(farmId);
            if (farm != null)
                field.FarmId = farm.Id.ReferenceId;
        }
示例#16
0
        private static void LoadPhoneNumbers(XmlNode inputNode, ContactInfo contactInfo)
        {
            contactInfo.Contacts = new List<Contact>();

            var phone = inputNode.GetXmlNodeValue("@J");
            if (string.IsNullOrEmpty(phone) == false)
                contactInfo.Contacts.Add(new Contact { Number = phone, Type = ContactTypeEnum.FixedPhone });

            var mobile = inputNode.GetXmlNodeValue("@K");
            if (string.IsNullOrEmpty(mobile) == false)
                contactInfo.Contacts.Add(new Contact { Number = mobile, Type = ContactTypeEnum.MobilePhone });

            var fax = inputNode.GetXmlNodeValue("@L");
            if (string.IsNullOrEmpty(fax) == false)
                contactInfo.Contacts.Add(new Contact { Number = fax, Type = ContactTypeEnum.Fax });

            var email = inputNode.GetXmlNodeValue("@M");
            if (string.IsNullOrEmpty(email) == false)
                contactInfo.Contacts.Add(new Contact { Number = email, Type = ContactTypeEnum.Email });
        }
        private void LoadCommentAllocations(XmlNode inputNode)
        {
            Note note = null;

            var commentId = inputNode.GetXmlNodeValue("@A");
            if (!string.IsNullOrEmpty(commentId))
                note = LoadCodedComment(inputNode, commentId);
            else
                note = new Note { Description = inputNode.GetXmlNodeValue("@C") };

            if (note == null)
                return;

            var noteTimeStamp = AllocationTimestampLoader.Load(inputNode);
            note.TimeStamps.Add(noteTimeStamp);
            if (noteTimeStamp != null && noteTimeStamp.Location1 != null)
                note.SpatialContext = noteTimeStamp.Location1.Position;

            _allocations.Add(note);
        }
示例#18
0
        private Farm LoadFarm(XmlNode inputNode, out string farmId)
        {
            var farm = new Farm();

            // Required fields. Do not proceed if they are missing
            farmId = inputNode.GetXmlNodeValue("@A");
            farm.Description = inputNode.GetXmlNodeValue("@B");
            if (farmId == null || farm.Description == null)
                return null;

            farm.Id.UniqueIds.Add(ImportHelper.CreateUniqueId(farmId));

            // Optional fields
            LoadContactInfo(inputNode, farm);

            AssignCustomer(inputNode, farm);

            _taskDocument.LoadLinkedIds(farmId, farm.Id);
            return farm;
        }
        private static DateTime GetGpsTime(XmlNode inputNode)
        {
            var gpsTime = inputNode.GetXmlNodeValue("@H");
            var gpsDate = inputNode.GetXmlNodeValue("@I");
            if (string.IsNullOrEmpty(gpsDate))
                return DateTime.MinValue;

            int utcDays;
            if (!gpsDate.ParseValue(out utcDays))
                return DateTime.MinValue;

            long utcMilliseconds = 0;
            if (!string.IsNullOrEmpty(gpsTime))
            {
                if (!gpsTime.ParseValue(out utcMilliseconds))
                    utcMilliseconds = 0;
            }

            return GpsBaseDate.Add(TimeSpan.FromDays(utcDays).Add(TimeSpan.FromMilliseconds(utcMilliseconds)));
        }
示例#20
0
        private TreatmentZone LoadTreatmentZone(XmlNode inputNode, out int zoneId)
        {
            // Required fields. Do not proceed if they are missing
            if (!inputNode.GetXmlNodeValue("@A").ParseValue(out zoneId))
                return null;

            // Optional fields
            var zone = new TreatmentZone { Variables = new List<DataVariable>() };
            zone.Name = inputNode.GetXmlNodeValue("@B");
            LoadDataVariables(inputNode.SelectNodes("PDV"), zone);

            return zone;
        }
示例#21
0
        private List<DataVariable> GetDataVariables(XmlNode inputNode)
        {
            var dataVariables = new List<DataVariable>();
            int treatmentZoneId;
            if (!inputNode.GetXmlNodeValue("@J").ParseValue(out treatmentZoneId))
                return dataVariables;

            _descriptor.ProductRateTemplateId = treatmentZoneId;

            var treatmentZone = _treatmentZones.FindById(treatmentZoneId);
            if (treatmentZone == null || treatmentZone.Variables == null)
                return dataVariables;
            return treatmentZone.Variables;
        }
示例#22
0
        private static IsoUnit LoadUnit(XmlNode inputNode)
        {
            //var valueUnitId = inputNode.GetXmlNodeValue("@D");
            var quantityDdiValue = inputNode.GetXmlNodeValue("@E");

            int quantityDdi = Convert.ToInt32(quantityDdiValue, 16);

            switch (quantityDdi)
            {
                case 0x48: // DDI 72
                case 0x4B: // DDI 75
                case 0x4E: // DDI 78
                    return UnitFactory.Instance.GetUnitByDdi(quantityDdi);
            }

            return null;
        }
示例#23
0
        private ValuePresentation LoadUnit(XmlNode inputNode, out string unitId)
        {
            var unit = new ValuePresentation();

            // Required fields. Do not proceed if they are missing
            unitId = inputNode.GetXmlNodeValue("@A");
            if (string.IsNullOrEmpty(unitId) ||
                !LoadRequiredFields(inputNode, unit))
                return null;

            // Optional fields
            unit.Symbol = inputNode.GetXmlNodeValue("@E");

            _taskDocument.LoadLinkedIds(unitId, unit.Id);

            return unit;
        }
        private GuidanceAllocation LoadGuidanceAllocations(XmlNode inputNode)
        {
            var groupId = inputNode.GetXmlNodeValue("@A");
            if (string.IsNullOrEmpty(groupId))
                return null;

            var group = FindGuidanceGroup(groupId);
            var gsts = inputNode.SelectNodes("GST");

            var allocation = new GuidanceAllocation
            {
                GuidanceGroupId = group.Group.Id.ReferenceId,
                GuidanceShift = GuidanceShiftLoader.Load(gsts, _taskDocument),
                TimeScopes = new List<TimeScope> { AllocationTimestampLoader.Load(inputNode) ?? AllocationTimestampLoader.Load(inputNode) }
            };

            return allocation;
        }
示例#25
0
        private void LoadCropZone(XmlNode inputNode, Field field, string fieldId)
        {
            var cropId = inputNode.GetXmlNodeValue("@G");
            if (string.IsNullOrEmpty(cropId))
                return;

            Crop crop;
            if (!_taskDocument.Crops.TryGetValue(cropId, out crop))
                return;

            var cropZone = new CropZone();
            cropZone.CropId = crop.Id.ReferenceId;
            cropZone.FieldId = field.Id.ReferenceId;
            cropZone.Description = field.Description;
            cropZone.Area = field.Area.Copy();
            cropZone.GuidanceGroupIds = field.GuidanceGroupIds != null ? field.GuidanceGroupIds.ToList() : null;

            _taskDocument.CropZones[fieldId] = cropZone;
        }
示例#26
0
        private void LoadContactInfo(XmlNode inputNode, Farm farm)
        {
            var contactInfo = new ContactInfo();

            contactInfo.AddressLine1 = inputNode.GetXmlNodeValue("@C");
            contactInfo.PoBoxNumber = inputNode.GetXmlNodeValue("@D");
            contactInfo.PostalCode = inputNode.GetXmlNodeValue("@E");
            contactInfo.City = inputNode.GetXmlNodeValue("@F");
            contactInfo.StateOrProvince = inputNode.GetXmlNodeValue("@G");
            contactInfo.Country = inputNode.GetXmlNodeValue("@H");

            farm.ContactInfo = contactInfo;

            _taskDocument.Contacts.Add(contactInfo);
        }
示例#27
0
        private ProductMix GetProduct(XmlNode inputNode)
        {
            var product = new ProductMix { ProductType = ProductTypeEnum.Mix, Form = ProductFormEnum.Unknown };

            var groupId = inputNode.GetXmlNodeValue("@C");
            if (string.IsNullOrEmpty(groupId))
                return product;

            var groupNode = _taskDocument.RootNode.SelectSingleNode(
                string.Format(CultureInfo.InvariantCulture, "PGP[@A='{0}']", groupId));
            if (groupNode == null)
                return product;

            var groupType = groupNode.GetXmlNodeValue("@C");
            if (string.IsNullOrEmpty(groupType))
                return product;

            if (string.Equals(groupType, "2", StringComparison.OrdinalIgnoreCase))
                product.ProductType = ProductTypeEnum.Variety;

            return product;
        }
示例#28
0
        private void LoadContactInfo(XmlNode inputNode, Person worker)
        {
            var contactInfo = new ContactInfo();

            contactInfo.AddressLine1 = inputNode.GetXmlNodeValue("@D");
            contactInfo.PoBoxNumber = inputNode.GetXmlNodeValue("@E");
            contactInfo.PostalCode = inputNode.GetXmlNodeValue("@F");
            contactInfo.City = inputNode.GetXmlNodeValue("@G");
            contactInfo.StateOrProvince = inputNode.GetXmlNodeValue("@H");
            contactInfo.Country = inputNode.GetXmlNodeValue("@I");

            LoadPhoneNumbers(inputNode, contactInfo);

            worker.ContactInfoId = contactInfo.Id.ReferenceId;

            _taskDocument.Contacts.Add(contactInfo);
        }
        private Note LoadCodedComment(XmlNode inputNode, string commentId)
        {
            var comment = _taskDocument.Comments.FindById(commentId);
            if (comment == null)
                return null;

            var commentValueId = inputNode.GetXmlNodeValue("@B");
            if (string.IsNullOrEmpty(commentValueId))
                return null;

            var commentValue = comment.Values.FindById(commentValueId);
            if (commentValue == null)
                return null;

            return new Note
            {
                Value = new EnumeratedValue
                {
                    Value = commentValue,
                    Representation = comment.Comment
                }
            };
        }
示例#30
0
        private Grower LoadCustomer(XmlNode inputNode, out string growerId)
        {
            Grower grower = new Grower();

            // Required fields. Do not proceed if they are missing
            growerId = inputNode.GetXmlNodeValue("@A");
            grower.Name = inputNode.GetXmlNodeValue("@B");
            if (growerId == null || grower.Name == null)
                return null;

            grower.Id.UniqueIds.Add(ImportHelper.CreateUniqueId(growerId));

            // Optional fields
            var firstName = inputNode.GetXmlNodeValue("@C");
            if (!string.IsNullOrWhiteSpace(firstName))
                grower.Name += ", " + firstName;

            LoadContactInfo(inputNode, grower);

            _taskDocument.LoadLinkedIds(growerId, grower.Id);

            return grower;
        }