public void Two_instances_of_different_addresses_are_not_equal()
 {
     Assert.NotEqual(GroupAddress.FromGroups(9, 5, 4), GroupAddress.FromGroups(10, 5, 4));
 }
 public void ToString_prints_ets_like_group_address()
 {
     Assert.Equal("5/4/9", GroupAddress.FromGroups(5, 4, 9).ToString());
 }
 public void Address_with_middle_group_10_cannot_be_constructed()
 {
     Assert.Throws <ArgumentOutOfRangeException>(() => GroupAddress.FromGroups(0, 10, 0));
 }
 public void Two_instances_of_same_address_are_equal()
 {
     Assert.Equal(GroupAddress.FromGroups(10, 5, 4), GroupAddress.FromGroups(10, 5, 4));
 }
Exemple #5
0
 static void EncodeGroup(StringBuilder builder, GroupAddress group)
 {
     builder.AppendFormat("(NIL NIL {0} NIL)", MimeUtils.Quote(group.Name));
     EncodeInternetAddressListAddresses(builder, group.Members);
     builder.Append("(NIL NIL NIL NIL)");
 }
Exemple #6
0
 public override int GetHashCode()
 {
     return(GroupAddress != null ? GroupAddress.GetHashCode() : 0);
 }
Exemple #7
0
        public static void Main(string[] args)
        {
            // Establish tunneling connection with gateway at 10.0.0.135
            _trace = new ConsoleTrace();
            var connection = new KnxConnection(new IPEndPoint(IPAddress.Parse("10.0.0.102"), 50000), new IPEndPoint(IPAddress.Parse("10.0.0.135"), 3671), _trace);


            var messageBus = new MessageBus();

            var dressingLight = new Entity(messageBus,
                                           new IntegerMessageBusAddress(123),
                                           new[] { new Switch() });

            var button = new Button(new IntegerMessageBusAddress(123));
            var dressingLightButton = new Entity(messageBus, new IntegerMessageBusAddress(456), new[] { button });

            var temperatureGauge      = new TemperatureGauge();
            var temperatureLivingRoom = new Entity(messageBus, new IntegerMessageBusAddress(1001), new[] { temperatureGauge });


            var temperatureGauge2       = new TemperatureGauge();
            var temperatureDressingRoom = new Entity(messageBus, new IntegerMessageBusAddress(1002), new[] { temperatureGauge2 });

            var radio = new Entity(messageBus, new IntegerMessageBusAddress(999), new[] { new Radio() });

            var binding = new KnxBinding(connection, messageBus, new IntegerMessageBusAddress(10000));

            binding.AddSwitch(GroupAddress.FromGroups(0, 0, 6), new IntegerMessageBusAddress(123), KnxAddressBindingTypes.Switch);
            binding.AddSwitch(GroupAddress.FromGroups(0, 4, 0), new IntegerMessageBusAddress(999), KnxAddressBindingTypes.Switch);
            binding.AddSwitch(GroupAddress.FromGroups(0, 3, 21), new IntegerMessageBusAddress(1001), KnxAddressBindingTypes.Temperature);
            binding.AddSwitch(GroupAddress.FromGroups(0, 3, 20), new IntegerMessageBusAddress(1002), KnxAddressBindingTypes.Temperature);

            var test = new Test(temperatureGauge.Temperatures, temperatureGauge2.Temperatures);

            using (RunAsp(test))
            {
                for (;;)
                {
                    var       ck        = Console.ReadKey();
                    CemiFrame cemiFrame = null;
                    if (ck.Key == ConsoleKey.R)
                    {
                        cemiFrame = new CemiFrame(CemiFrame.MessageCodes.DataRequest,
                                                  CemiFrame.Control1Flags.DoNotRepeat | CemiFrame.Control1Flags.PriorityLow |
                                                  CemiFrame.Control1Flags.StandardFrame, CemiFrame.Control2Flags.GroupAddress, IndividualAddress.FromAddressLineDevice(1, 1, 60),
                                                  GroupAddress.FromGroups(0, 0, 6), 1, (ushort)(CemiFrame.Commands.ValueRead) << 6);
                    }
                    else if (ck.Key == ConsoleKey.Escape)
                    {
                        break;
                    }
                    if (cemiFrame != null)
                    {
                        var task = connection.SendTunnelingRequest(cemiFrame);
                        task.Wait();
                        Console.WriteLine("Seq sent: " + task.Result);
                    }
                }
                Console.ReadKey();
                connection.Dispose();
            }
        }
        /// <summary>
        /// Writes to package.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model">The model.</param>
        public static void WriteToPackage <T>(T model)
        {
            var typeName = model.GetType().Name;

            if (model is IImportModel)
            {
                var importModel = (IImportModel)model;
                // check if a textwriter is needed for this model type
                if (!textWriters.ContainsKey(typeName))
                {
                    if (!Directory.Exists(_packageDirectory))
                    {
                        InitalizePackageFolder();
                    }

                    textWriters.Add(typeName, (TextWriter)File.CreateText($@"{_packageDirectory}\{importModel.GetFileName()}"));

                    // if model is for person create related writers
                    if (importModel is Person)
                    {
                        // person attributes
                        var personAttributeValue = new PersonAttributeValue();
                        textWriters.Add(personAttributeValue.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{personAttributeValue.GetFileName()}"));

                        // person phones
                        var personPhone = new PersonPhone();
                        textWriters.Add(personPhone.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{personPhone.GetFileName()}"));

                        // person addresses
                        var personAddress = new PersonAddress();
                        textWriters.Add(personAddress.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{personAddress.GetFileName()}"));
                    }

                    // if model is for financial batch create related writers
                    if (importModel is FinancialBatch)
                    {
                        // financial transactions
                        var financialTransaction = new FinancialTransaction();
                        textWriters.Add(financialTransaction.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{financialTransaction.GetFileName()}"));

                        // financial transation details
                        var financialTransactionDetail = new FinancialTransactionDetail();
                        textWriters.Add(financialTransactionDetail.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{financialTransactionDetail.GetFileName()}"));
                    }

                    // if model is for financial transaction create related writers
                    if (importModel is FinancialTransaction)
                    {
                        // financial transation details
                        var financialTransactionDetail = new FinancialTransactionDetail();
                        textWriters.Add(financialTransactionDetail.GetType().Name, ( TextWriter )File.CreateText($@"{_packageDirectory}\{financialTransactionDetail.GetFileName()}"));
                    }

                    // if model is for group create related writers
                    if (importModel is Group)
                    {
                        // group member
                        var groupMember = new GroupMember();
                        textWriters.Add(groupMember.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{groupMember.GetFileName()}"));

                        // group attributes
                        var groupAttributeValue = new GroupAttributeValue();
                        textWriters.Add(groupAttributeValue.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{groupAttributeValue.GetFileName()}"));

                        // group addresses
                        var groupAddress = new GroupAddress();
                        textWriters.Add(groupAddress.GetType().Name, (TextWriter)File.CreateText($@"{_packageDirectory}\{groupAddress.GetFileName()}"));
                    }

                    // if model is for business create related writers
                    if (importModel is Business)
                    {
                        // business attributes
                        var businessAttributeValue = new BusinessAttributeValue();
                        textWriters.Add(businessAttributeValue.GetType().Name, ( TextWriter )File.CreateText($@"{_packageDirectory}\{businessAttributeValue.GetFileName()}"));

                        // business phones
                        var businessPhone = new BusinessPhone();
                        textWriters.Add(businessPhone.GetType().Name, ( TextWriter )File.CreateText($@"{_packageDirectory}\{businessPhone.GetFileName()}"));

                        // business addresses
                        var businessAddress = new BusinessAddress();
                        textWriters.Add(businessAddress.GetType().Name, ( TextWriter )File.CreateText($@"{_packageDirectory}\{businessAddress.GetFileName()}"));

                        // business contacts
                        var businessContact = new BusinessContact();
                        textWriters.Add(businessContact.GetType().Name, ( TextWriter )File.CreateText($@"{_packageDirectory}\{businessContact.GetFileName()}"));
                    }
                }

                var txtWriter = textWriters[typeName];

                // check if a csvwriter is needed for this model type
                if (!csvWriters.ContainsKey(typeName))
                {
                    var newCsvWriter = new CsvWriter(txtWriter);
                    csvWriters.Add(typeName, newCsvWriter);
                    newCsvWriter.WriteHeader <T>();
                    //newCsvWriter.Configuration.QuoteAllFields = true;

                    // if model is for person create related writers
                    if (importModel is Person)
                    {
                        // person attributes
                        var personAttributeValue             = new PersonAttributeValue();
                        var newPersonAttributeValueCsvWriter = new CsvWriter(textWriters[personAttributeValue.GetType().Name]);
                        csvWriters.Add(personAttributeValue.GetType().Name, newPersonAttributeValueCsvWriter);
                        newPersonAttributeValueCsvWriter.WriteHeader <PersonAttributeValue>();

                        // person phones
                        var personPhone             = new PersonPhone();
                        var newPersonPhoneCsvWriter = new CsvWriter(textWriters[personPhone.GetType().Name]);
                        csvWriters.Add(personPhone.GetType().Name, newPersonPhoneCsvWriter);
                        newPersonPhoneCsvWriter.WriteHeader <PersonPhone>();

                        // person addresses
                        var personAddress             = new PersonAddress();
                        var newPersonAddressCsvWriter = new CsvWriter(textWriters[personAddress.GetType().Name]);
                        csvWriters.Add(personAddress.GetType().Name, newPersonAddressCsvWriter);
                        newPersonAddressCsvWriter.WriteHeader <PersonAddress>();
                    }

                    // if model is for financial batch create related writers
                    if (importModel is FinancialBatch)
                    {
                        // financial transaction
                        var financialTransaction             = new FinancialTransaction();
                        var newFinancialTransactionCsvWriter = new CsvWriter(textWriters[financialTransaction.GetType().Name]);
                        csvWriters.Add(financialTransaction.GetType().Name, newFinancialTransactionCsvWriter);
                        newFinancialTransactionCsvWriter.WriteHeader <FinancialTransaction>();

                        // financial transaction detail
                        var financialTransactionDetail             = new FinancialTransactionDetail();
                        var newFinancialTransactionDetailCsvWriter = new CsvWriter(textWriters[financialTransactionDetail.GetType().Name]);
                        csvWriters.Add(financialTransactionDetail.GetType().Name, newFinancialTransactionDetailCsvWriter);
                        newFinancialTransactionDetailCsvWriter.WriteHeader <FinancialTransactionDetail>();
                    }

                    //if model is for financial transaction, create related writers
                    if (importModel is FinancialTransaction)
                    {
                        // financial transaction detail
                        var financialTransactionDetail             = new FinancialTransactionDetail();
                        var newFinancialTransactionDetailCsvWriter = new CsvWriter(textWriters[financialTransactionDetail.GetType().Name]);
                        csvWriters.Add(financialTransactionDetail.GetType().Name, newFinancialTransactionDetailCsvWriter);
                        newFinancialTransactionDetailCsvWriter.WriteHeader <FinancialTransactionDetail>();
                    }

                    // if model is for group create related writers
                    if (importModel is Group)
                    {
                        // group member
                        var groupMember             = new GroupMember();
                        var newGroupMemberCsvWriter = new CsvWriter(textWriters[groupMember.GetType().Name]);
                        csvWriters.Add(groupMember.GetType().Name, newGroupMemberCsvWriter);
                        newGroupMemberCsvWriter.WriteHeader <GroupMember>();

                        // group attributes
                        var groupAttributeValue             = new GroupAttributeValue();
                        var newGroupAttributeValueCsvWriter = new CsvWriter(textWriters[groupAttributeValue.GetType().Name]);
                        csvWriters.Add(groupAttributeValue.GetType().Name, newGroupAttributeValueCsvWriter);
                        newGroupAttributeValueCsvWriter.WriteHeader <GroupAttributeValue>();

                        // group addresses
                        var groupAddress             = new GroupAddress();
                        var newGroupAddressCsvWriter = new CsvWriter(textWriters[groupAddress.GetType().Name]);
                        csvWriters.Add(groupAddress.GetType().Name, newGroupAddressCsvWriter);
                        newGroupAddressCsvWriter.WriteHeader <GroupAddress>();
                    }

                    // if model is for business create related writers
                    if (importModel is Business)
                    {
                        // business attributes
                        var businessAttributeValue             = new BusinessAttributeValue();
                        var newBusinessAttributeValueCsvWriter = new CsvWriter(textWriters[businessAttributeValue.GetType().Name]);
                        csvWriters.Add(businessAttributeValue.GetType().Name, newBusinessAttributeValueCsvWriter);
                        newBusinessAttributeValueCsvWriter.WriteHeader <BusinessAttributeValue>();

                        // business phones
                        var businessPhone             = new BusinessPhone();
                        var newBusinessPhoneCsvWriter = new CsvWriter(textWriters[businessPhone.GetType().Name]);
                        csvWriters.Add(businessPhone.GetType().Name, newBusinessPhoneCsvWriter);
                        newBusinessPhoneCsvWriter.WriteHeader <PersonPhone>();

                        // business addresses
                        var businessAddress             = new BusinessAddress();
                        var newBusinessAddressCsvWriter = new CsvWriter(textWriters[businessAddress.GetType().Name]);
                        csvWriters.Add(businessAddress.GetType().Name, newBusinessAddressCsvWriter);
                        newBusinessAddressCsvWriter.WriteHeader <PersonAddress>();

                        // business Contacts
                        var businessContacts             = new BusinessContact();
                        var newBusinessContactsCsvWriter = new CsvWriter(textWriters[businessContacts.GetType().Name]);
                        csvWriters.Add(businessContacts.GetType().Name, newBusinessContactsCsvWriter);
                        newBusinessContactsCsvWriter.WriteHeader <PersonAddress>();
                    }
                }

                var csvWriter = csvWriters[typeName];

                csvWriter.WriteRecord <T>(model);

                // if person model write out any related models
                if (importModel is Person)
                {
                    // person attributes
                    var personAttributeValue          = new PersonAttributeValue();
                    var csvPersonAttributeValueWriter = csvWriters[personAttributeValue.GetType().Name];

                    if (csvPersonAttributeValueWriter != null)
                    {
                        foreach (var attribute in ((Person)importModel).Attributes)
                        {
                            csvPersonAttributeValueWriter.WriteRecord(attribute);
                        }
                    }

                    // person phones
                    var personPhone          = new PersonPhone();
                    var csvPersonPhoneWriter = csvWriters[personPhone.GetType().Name];

                    if (csvPersonPhoneWriter != null)
                    {
                        foreach (var phone in ((Person)importModel).PhoneNumbers)
                        {
                            csvPersonPhoneWriter.WriteRecord(phone);
                        }
                    }

                    // person addresses
                    var personAddress          = new PersonAddress();
                    var csvPersonAddressWriter = csvWriters[personAddress.GetType().Name];

                    if (csvPersonAddressWriter != null)
                    {
                        foreach (var address in ((Person)importModel).Addresses)
                        {
                            csvPersonAddressWriter.WriteRecord(address);
                        }
                    }
                }

                // if financial model write out any related models
                if (importModel is FinancialBatch)
                {
                    // write out financial transactions and transaction details
                    var financialTransaction          = new FinancialTransaction();
                    var csvFinancialTransactionWriter = csvWriters[financialTransaction.GetType().Name];

                    var financialTransactionDetail          = new FinancialTransactionDetail();
                    var csvFinancialTransactionDetailWriter = csvWriters[financialTransactionDetail.GetType().Name];

                    if (csvFinancialTransactionWriter != null && csvFinancialTransactionDetailWriter != null)
                    {
                        foreach (var transaction in ((FinancialBatch)importModel).FinancialTransactions)
                        {
                            csvFinancialTransactionWriter.WriteRecord(transaction);

                            foreach (var transactionDetail in transaction.FinancialTransactionDetails)
                            {
                                csvFinancialTransactionDetailWriter.WriteRecord(transactionDetail);
                            }
                        }
                    }
                }

                // if financial Transaction model write out any related models
                if (importModel is FinancialTransaction)
                {
                    var financialTransactionDetail          = new FinancialTransactionDetail();
                    var csvFinancialTransactionDetailWriter = csvWriters[financialTransactionDetail.GetType().Name];

                    if (csvFinancialTransactionDetailWriter != null)
                    {
                        foreach (var transactionDetail in ((FinancialTransaction)importModel).FinancialTransactionDetails)
                        {
                            csvFinancialTransactionDetailWriter.WriteRecord(transactionDetail);
                        }
                    }
                }

                // if group model write out any related models
                if (importModel is Group)
                {
                    // group members
                    var groupMember          = new GroupMember();
                    var csvGroupMemberWriter = csvWriters[groupMember.GetType().Name];

                    if (csvGroupMemberWriter != null)
                    {
                        foreach (var groupMemberItem in ((Group)importModel).GroupMembers)
                        {
                            csvGroupMemberWriter.WriteRecord(groupMemberItem);
                        }
                    }

                    // group attributes
                    var groupAttributeValue           = new GroupAttributeValue();
                    var csvPersonAttributeValueWriter = csvWriters[groupAttributeValue.GetType().Name];

                    if (csvPersonAttributeValueWriter != null)
                    {
                        foreach (var attribute in ((Group)importModel).Attributes)
                        {
                            csvPersonAttributeValueWriter.WriteRecord(attribute);
                        }
                    }

                    // group addresses
                    var groupAddress          = new GroupAddress();
                    var csvGroupAddressWriter = csvWriters[groupAddress.GetType().Name];

                    if (csvGroupAddressWriter != null)
                    {
                        foreach (var address in ((Group)importModel).Addresses)
                        {
                            csvGroupAddressWriter.WriteRecord(address);
                        }
                    }
                }

                // if business model write out any related models
                if (importModel is Business)
                {
                    // business attributes
                    var personBusinessValue             = new BusinessAttributeValue();
                    var csvBusinessAttributeValueWriter = csvWriters[personBusinessValue.GetType().Name];

                    if (csvBusinessAttributeValueWriter != null)
                    {
                        foreach (var attribute in (( Business )importModel).Attributes)
                        {
                            csvBusinessAttributeValueWriter.WriteRecord(attribute);
                        }
                    }

                    // business phones
                    var businessPhone          = new BusinessPhone();
                    var csvBusinessPhoneWriter = csvWriters[businessPhone.GetType().Name];

                    if (csvBusinessPhoneWriter != null)
                    {
                        foreach (var phone in (( Business )importModel).PhoneNumbers)
                        {
                            csvBusinessPhoneWriter.WriteRecord(phone);
                        }
                    }

                    // business addresses
                    var businessAddress          = new BusinessAddress();
                    var csvBusinessAddressWriter = csvWriters[businessAddress.GetType().Name];

                    if (csvBusinessAddressWriter != null)
                    {
                        foreach (var address in (( Business )importModel).Addresses)
                        {
                            csvBusinessAddressWriter.WriteRecord(address);
                        }
                    }

                    // business contacts
                    var businessContact          = new BusinessContact();
                    var csvBusinessContactWriter = csvWriters[businessContact.GetType().Name];

                    if (csvBusinessContactWriter != null)
                    {
                        foreach (var contact in (( Business )importModel).Contacts)
                        {
                            csvBusinessAddressWriter.WriteRecord(contact);
                        }
                    }
                }
            }
        }
Exemple #9
0
        public static Group Translate(DataRow row, DataTable members)
        {
            var group = new Group();

            if (row.Field <int?>("Group_Id").HasValue)
            {
                group.Id = row.Field <int?>("Group_Id").Value;
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(row.Field <string>("Group_Name")) && row.Field <int?>("ParentGroupId").HasValue)
                {
                    MD5 md5Hasher = MD5.Create();
                    var hashed    = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(row.Field <string>("Group_Name") + row.Field <int?>("ParentGroupId").Value));
                    var groupId   = Math.Abs(BitConverter.ToInt32(hashed, 0));   // used abs to ensure positive number
                    if (groupId > 0)
                    {
                        group.Id = groupId;
                    }
                }
                else
                {
                    return(null);
                }
            }

            group.Name          = row.Field <string>("Group_Name");
            group.GroupTypeId   = row.Field <int>("Group_Type_ID");
            group.IsActive      = row.Field <int>("is_active") != 0;
            group.IsPublic      = row.Field <int>("is_public") != 0;
            group.MeetingDay    = row.Field <string>("ScheduleDay");
            group.ParentGroupId = row.Field <int?>("ParentGroupId") ?? 90000000 + group.GroupTypeId;
            group.Description   = row.Field <string>("Description");

            if (!string.IsNullOrWhiteSpace(row.Field <string>("StartHour")))
            {
                group.MeetingTime = row.Field <string>("StartHour") + ":00";
            }

            var importAddress = new GroupAddress();

            importAddress.GroupId     = group.Id;
            importAddress.Street1     = row.Field <string>("Address1");
            importAddress.Street2     = row.Field <string>("Address2");
            importAddress.City        = row.Field <string>("City");
            importAddress.State       = row.Field <string>("StProvince");
            importAddress.PostalCode  = row.Field <string>("PostalCode");
            importAddress.Country     = row.Field <string>("country");
            importAddress.AddressType = AddressType.Other;


            // only add the address if we have a valid address
            if (importAddress.Street1.IsNotNullOrWhitespace() &&
                importAddress.City.IsNotNullOrWhitespace() &&
                importAddress.PostalCode.IsNotNullOrWhitespace())
            {
                group.Addresses.Add(importAddress);
            }

            foreach (var member in members.Select("Group_Id =" + group.Id))
            {
                var groupMember = new GroupMember();
                groupMember.GroupId  = group.Id;
                groupMember.PersonId = member.Field <int>("Individual_ID");
                groupMember.Role     = member.Field <string>("Group_Member_Type");

                group.GroupMembers.Add(groupMember);
            }

            return(group);
        }
Exemple #10
0
        public static List <Group> Translate(XElement inputGroup)
        {
            List <Group> groups = new List <Group>();

            int?departmentId = null;
            int?directorId   = null;

            var group = new Group();

            group.Id          = inputGroup.Attribute("id").Value.AsInteger();
            group.Name        = inputGroup.Element("name")?.Value;
            group.Description = inputGroup.Element("description")?.Value.RemoveCrLf();
            group.GroupTypeId = inputGroup.Element("group_type").Attribute("id").Value.AsInteger();
            group.CampusId    = inputGroup.Element("campus").Attribute("id").Value.AsIntegerOrNull();
            group.Capacity    = inputGroup.Element("group_capacity").Value.AsIntegerOrNull();
            group.IsActive    = !inputGroup.Element("inactive").Value.AsBoolean();
            group.IsPublic    = inputGroup.Element("public_search_listed").Value.AsBoolean();
            group.MeetingDay  = inputGroup.Element("meeting_day").Value;
            group.MeetingTime = inputGroup.Element("meeting_time").Value;

            ProcessBooleanAttribute(group, inputGroup.Element("childcare_provided"), "HasChildcare");

            if (group.GroupTypeId == 0)
            {
                group.GroupTypeId = CcbApi.GROUPTYPE_UNKNOWN_ID;
            }

            groups.Add(group);

            // add the department as a group with an id of 9999 + its id to create a unique group id for it
            if (inputGroup.Element("department") != null && inputGroup.Element("department").Attribute("id") != null && inputGroup.Element("department").Attribute("id").Value.IsNotNullOrWhitespace())
            {
                departmentId = ("9999" + inputGroup.Element("department").Attribute("id").Value).AsInteger();
                var departmentName = inputGroup.Element("department").Value;
                if (departmentName.IsNullOrWhiteSpace())
                {
                    departmentName = "No Department Name";
                }
                groups.Add(new Group {
                    Id = departmentId.Value, Name = inputGroup.Element("department").Value, IsActive = true, GroupTypeId = 9999
                });
            }

            // add the director as a group with an id of 9998 + its id to create a unique group id for it
            if (inputGroup.Element("director") != null && inputGroup.Element("director").Attribute("id") != null && inputGroup.Element("director").Attribute("id").Value.IsNotNullOrWhitespace())
            {
                directorId = ("9998" + inputGroup.Element("director").Attribute("id").Value).AsInteger();

                var directorGroup = new Group();
                directorGroup.Id          = directorId.Value;
                directorGroup.IsActive    = true;
                directorGroup.Name        = inputGroup.Element("director").Element("full_name").Value;
                directorGroup.GroupTypeId = 9998;

                // add parent group of the department if it exists
                if (departmentId.HasValue)
                {
                    directorGroup.ParentGroupId = departmentId.Value;
                }

                directorGroup.GroupMembers.Add(new GroupMember {
                    PersonId = inputGroup.Element("director").Attribute("id").Value.AsInteger(), Role = "Leader", GroupId = directorGroup.Id
                });

                groups.Add(directorGroup);
            }

            // add leader
            if (inputGroup.Element("main_leader").Attribute("id") != null && inputGroup.Element("main_leader").Attribute("id").Value.AsInteger() != 0)
            {
                group.GroupMembers.Add(new GroupMember {
                    PersonId = inputGroup.Element("main_leader").Attribute("id").Value.AsInteger(), Role = "Leader", GroupId = group.Id
                });
            }

            // add assistant leaders
            if (inputGroup.Element("leaders") != null)
            {
                foreach (var leaderNode in inputGroup.Element("leaders").Elements("leader"))
                {
                    group.GroupMembers.Add(new GroupMember {
                        PersonId = leaderNode.Attribute("id").Value.AsInteger(), Role = "Assistant Leader", GroupId = group.Id
                    });
                }
            }

            // add participants
            if (inputGroup.Element("participants") != null)
            {
                foreach (var participantNode in inputGroup.Element("participants").Elements("participant"))
                {
                    group.GroupMembers.Add(new GroupMember {
                        PersonId = participantNode.Attribute("id").Value.AsInteger(), Role = "Member", GroupId = group.Id
                    });
                }
            }

            var addressList = inputGroup.Element("addresses").Elements("address");

            foreach (var address in addressList)
            {
                if (address.Element("street_address") != null && address.Element("street_address").Value.IsNotNullOrWhitespace())
                {
                    var importAddress = new GroupAddress();
                    importAddress.GroupId    = group.Id;
                    importAddress.Street1    = address.Element("street_address").Value.RemoveCrLf();
                    importAddress.City       = address.Element("city").Value;
                    importAddress.State      = address.Element("state").Value;
                    importAddress.PostalCode = address.Element("zip").Value;
                    importAddress.Latitude   = address.Element("latitude")?.Value;
                    importAddress.Longitude  = address.Element("longitude")?.Value;
                    importAddress.Country    = address.Element("country")?.Value;

                    var addressType = address.Attribute("type").Value;

                    switch (addressType)
                    {
                    case "mailing":
                    case "home":
                    {
                        importAddress.AddressType = AddressType.Home;
                        importAddress.IsMailing   = addressType.Equals("mailing");
                        break;
                    }

                    case "work":
                    {
                        importAddress.AddressType = AddressType.Work;
                        break;
                    }

                    case "other":
                    {
                        importAddress.AddressType = AddressType.Other;
                        break;
                    }
                    }

                    // only add the address if we have a valid address
                    if (importAddress.Street1.IsNotNullOrWhitespace() && importAddress.City.IsNotNullOrWhitespace() && importAddress.PostalCode.IsNotNullOrWhitespace())
                    {
                        group.Addresses.Add(importAddress);
                    }
                }
            }

            // determine the parent group
            if (directorId.HasValue)
            {
                group.ParentGroupId = directorId.Value;
            }
            else if (departmentId.HasValue)
            {
                group.ParentGroupId = departmentId.Value;
            }

            return(groups);
        }
Exemple #11
0
 /// <summary>
 /// Xor of the hash codes of the layer length, datalink, message type, query version and group address.
 /// </summary>
 public sealed override int GetHashCode()
 {
     return(base.GetHashCode() ^
            GroupAddress.GetHashCode());
 }
Exemple #12
0
        public async Task <Result <bool> > UpdateAddressAsync(Abonent abonent, int id, GroupAddress addressGroup, string information)
        {
            if (!abonent.Addresses.Any(p => p.Information == information && p.Id != id))
            {
                var answer = abonent.UpdateAddress(id, addressGroup, information);
                if (answer.Succeeded)
                {
                    await db.SaveChangesAsync();

                    return(Result <bool> .Success(true));
                }
                return(Result <bool> .Fail(answer.Errors));
            }
            return(Result <bool> .Fail(new string[] { "Such Address exists" }));
        }
Exemple #13
0
 public void AddSwitch(GroupAddress groupAddress, IMessageBusAddress address, KnxAddressBindingTypes knxAddressBindingType)
 {
     _mapping.Add(address, groupAddress);
     _bindingTypes = _bindingTypes.Add(groupAddress, knxAddressBindingType);
     _messageBus.AddMessageSink(address, this, this);
 }
Exemple #14
0
        public static Group Translate(DataRow row, DataTable members, DataTable staffing)
        {
            var group = new Group();

            if (row.Field <int?>("Group_Id").HasValue)
            {
                group.Id = row.Field <int?>("Group_Id").Value;
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(row.Field <string>("Group_Name")) && row.Field <int?>("ParentGroupId").HasValue)
                {
                    MD5    md5Hasher   = MD5.Create();
                    string valueToHash = $"{ row.Field<string>( "Group_Name" ) }{ row.Field<int>( "ParentGroupId" ) }";
                    var    hashed      = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(valueToHash));
                    var    groupId     = Math.Abs(BitConverter.ToInt32(hashed, 0)); // used abs to ensure positive number
                    if (groupId > 0)
                    {
                        group.Id = groupId;
                    }
                }
                else
                {
                    return(null);
                }
            }

            // Limit the group name to 50 since the schedules that will be created in Rock use the group's name as the schedule name and
            // that field is limited in the database to 50 characters
            group.Name        = row.Field <string>("Group_Name").Left(50);
            group.GroupTypeId = row.Field <int>("Group_Type_ID");
            group.IsActive    = row.Field <int>("is_active") != 0;
            if (row.Field <int?>("is_public").HasValue)
            {
                group.IsPublic = row.Field <int?>("is_public").Value != 0;
            }
            group.MeetingDay    = row.Field <string>("ScheduleDay");
            group.ParentGroupId = row.Field <int?>("ParentGroupId") ?? 90000000 + group.GroupTypeId;
            group.Description   = row.Field <string>("Description");

            if (!string.IsNullOrWhiteSpace(row.Field <string>("StartHour")))
            {
                group.MeetingTime = row.Field <string>("StartHour") + ":00";
            }

            var importAddress = new GroupAddress();

            importAddress.GroupId     = group.Id;
            importAddress.Street1     = row.Field <string>("Address1");
            importAddress.Street2     = row.Field <string>("Address2");
            importAddress.City        = row.Field <string>("City");
            importAddress.State       = row.Field <string>("StProvince");
            importAddress.PostalCode  = row.Field <string>("PostalCode");
            importAddress.Country     = row.Field <string>("country");
            importAddress.AddressType = AddressType.Other;


            // only add the address if we have a valid address
            if (importAddress.Street1.IsNotNullOrWhitespace() &&
                importAddress.City.IsNotNullOrWhitespace() &&
                importAddress.PostalCode.IsNotNullOrWhitespace())
            {
                group.Addresses.Add(importAddress);
            }

            foreach (var member in members.Select($"Group_Id ={ group.Id }"))
            {
                var groupMember = new GroupMember();
                groupMember.GroupId  = group.Id;
                groupMember.PersonId = member.Field <int>("Individual_ID");
                groupMember.Role     = member.Field <string>("Group_Member_Type");

                group.GroupMembers.Add(groupMember);
            }

            if (staffing != null)
            {
                foreach (var staff in staffing.Select($"Group_Id = { group.Id }"))
                {
                    var groupMember = new GroupMember();
                    groupMember.GroupId  = group.Id;
                    groupMember.PersonId = staff.Field <int>("INDIVIDUAL_ID");
                    groupMember.Role     = "Staff";

                    group.GroupMembers.Add(groupMember);
                }
            }

            return(group);
        }
        public void Address_0_3_7_is_ushort_address_775()
        {
            var sut = GroupAddress.FromGroups(0, 3, 7);

            Assert.Equal(sut.AsUShort, 775);
        }
Exemple #16
0
 private static bool IsToUndisclosedRecipients(GroupAddress address)
 {
     return((address.Name ?? "").ToLower().Replace(" ", "").Replace("-", "") == "undisclosedrecipients");
 }
        public void Address_12_6_129_is_ushort_address_40577()
        {
            var sut = GroupAddress.FromGroups(19, 6, 129);

            Assert.Equal(sut.AsUShort, 40577);
        }
Exemple #18
0
        public static Group Translate(GroupDTO group, List <GroupMemberDTO> members, DataTable staffing)
        {
            var slingshotGroup = new Group();

            if (group.GroupId.HasValue)
            {
                slingshotGroup.Id = group.GroupId.Value;
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(group.GroupName) && group.ParentGroupId.HasValue)
                {
                    MD5    md5Hasher   = MD5.Create();
                    string valueToHash = $"{ group.GroupName }{ group.ParentGroupId.Value }";
                    var    hashed      = md5Hasher.ComputeHash(Encoding.UTF8.GetBytes(valueToHash));
                    var    groupId     = Math.Abs(BitConverter.ToInt32(hashed, 0)); // used abs to ensure positive number
                    if (groupId > 0)
                    {
                        slingshotGroup.Id = groupId;
                    }
                }
                else
                {
                    return(null);
                }
            }

            // Limit the group name to 50 since the schedules that will be created in Rock use the group's name as the schedule name and
            // that field is limited in the database to 50 characters
            slingshotGroup.Name        = group.GroupName.Left(50);
            slingshotGroup.GroupTypeId = group.GroupTypeId;
            slingshotGroup.IsActive    = group.IsActive;
            if (group.IsPublic.HasValue)
            {
                slingshotGroup.IsPublic = group.IsPublic.Value;
            }
            slingshotGroup.MeetingDay    = group.ScheduleDay;
            slingshotGroup.ParentGroupId = group.ParentGroupId ?? 90000000 + slingshotGroup.GroupTypeId;
            slingshotGroup.Description   = group.Description;

            if (!string.IsNullOrWhiteSpace(group.StartHour))
            {
                slingshotGroup.MeetingTime = group.StartHour + ":00";
            }

            var importAddress = new GroupAddress();

            importAddress.GroupId     = slingshotGroup.Id;
            importAddress.Street1     = group.Address1;
            importAddress.Street2     = group.Address2;
            importAddress.City        = group.City;
            importAddress.State       = group.StateProvince;
            importAddress.PostalCode  = group.PostalCode;
            importAddress.Country     = group.Country;
            importAddress.AddressType = AddressType.Other;


            // only add the address if we have a valid address
            if (importAddress.Street1.IsNotNullOrWhitespace() &&
                importAddress.City.IsNotNullOrWhitespace() &&
                importAddress.PostalCode.IsNotNullOrWhitespace())
            {
                slingshotGroup.Addresses.Add(importAddress);
            }

            var groupMembers = members.AsEnumerable().Where(m => m.GroupId == slingshotGroup.Id);

            foreach (var member in groupMembers)
            {
                var groupMember = new GroupMember();
                groupMember.GroupId  = slingshotGroup.Id;
                groupMember.PersonId = member.IndividualId;
                groupMember.Role     = member.GroupMemberType;

                slingshotGroup.GroupMembers.Add(groupMember);
            }

            if (staffing != null)
            {
                foreach (var staff in staffing.Select($"RLC_ID = { slingshotGroup.Id } OR Activity_ID = { slingshotGroup.Id }"))
                {
                    var groupMember = new GroupMember();
                    groupMember.GroupId  = slingshotGroup.Id;
                    groupMember.PersonId = staff.Field <int>("INDIVIDUAL_ID");
                    groupMember.Role     = "Staff";

                    slingshotGroup.GroupMembers.Add(groupMember);
                }
            }

            return(slingshotGroup);
        }
 public void Address_with_main_group_33_cannot_be_constructed()
 {
     Assert.Throws <ArgumentOutOfRangeException>(() => GroupAddress.FromGroups(33, 0, 0));
 }
Exemple #20
0
        static bool TryParse(string text, ref int index, out InternetAddress addr)
        {
            string     name, route, user, domain;
            DomainList domains;

            addr = null;

            if (text[index] != '(')
            {
                return(false);
            }

            index++;

            if (!TryParse(text, ref index, out name))
            {
                return(false);
            }

            if (!TryParse(text, ref index, out route))
            {
                return(false);
            }

            if (!TryParse(text, ref index, out user))
            {
                return(false);
            }

            if (!TryParse(text, ref index, out domain))
            {
                return(false);
            }

            while (index < text.Length && text[index] == ' ')
            {
                index++;
            }

            if (index >= text.Length || text[index] != ')')
            {
                return(false);
            }

            index++;

            if (domain != null)
            {
                var address = user + "@" + domain;

                if (route != null && DomainList.TryParse(route, out domains))
                {
                    addr = new MailboxAddress(name, domains, address);
                }
                else
                {
                    addr = new MailboxAddress(name, address);
                }
            }
            else if (user != null)
            {
                addr = new GroupAddress(user);
            }

            return(true);
        }
Exemple #21
0
 public KnxAddressBinding(GroupAddress groupAddress, KnxAddressBindingTypes knxAddressBindingType)
 {
     GroupAddress          = groupAddress;
     KnxAddressBindingType = knxAddressBindingType;
 }