Example #1
0
        /// <summary>
        /// Найти тип объектов недвижимости.
        /// </summary>
        /// <param name="typeName">Имя типа объектов недвижимости.</param>
        /// <returns>Найденный тип объектов недвижимости.</returns>
        private RealtyObjectType FindType(string typeName)
        {
            RealtyObjectType result =
                this.context.RealtyObjectTypes.FirstOrDefault(rot =>
                                                              rot.TypeName == typeName);

            if (result == null)
            {
                throw new InvalidOperationException(
                          "Типа с именем " + typeName + " не существует в БД.");
            }

            return(result);
        }
        /// <summary>
        /// Получить полный путь к XML-документу, содержащему
        /// объекты недвижимости конкретного типа.
        /// </summary>
        /// <param name="type">Тип объектов недвижимости.</param>
        /// <returns>XML-документ.</returns>
        internal string GetXmlDoc(RealtyObjectType type)
        {
            string path = this.initialDir.FullName;

            switch (type)
            {
            case RealtyObjectType.ArendaZhilyih:
                path = Path.Combine(path, "arenda_zhilyih", "info_arenda_zhilyih.xml");
                break;

            case RealtyObjectType.Dachi:
                path = Path.Combine(path, "dachi", "info_dachi.xml");
                break;

            case RealtyObjectType.Dolevoe:
                path = Path.Combine(path, "dolevoe", "info_dolevoe.xml");
                break;

            case RealtyObjectType.DomaKottedzhi:
                path = Path.Combine(path, "doma_kottedzhi", "info_doma_kottedzhi.xml");
                break;

            case RealtyObjectType.KommercheskayaNedvizhimost:
                path = Path.Combine(path, "kommercheskaya_nedvizhimost", "info_kommercheskaya_nedvizhimost.xml");
                break;

            case RealtyObjectType.Kvartiryi:
                path = Path.Combine(path, "kvartiryi", "info_kvartiryi.xml");
                break;

            case RealtyObjectType.Malosemeyki:
                path = Path.Combine(path, "malosemeyki", "info_malosemeyki.xml");
                break;

            case RealtyObjectType.Raznoe:
                path = Path.Combine(path, "raznoe", "info_raznoe.xml");
                break;

            case RealtyObjectType.Uchastki:
                path = Path.Combine(path, "uchastki", "info_uchastki.xml");
                break;

            default:
                throw new ArgumentOutOfRangeException("type", type, null);
            }

            return(path);
        }
        /// <summary>
        /// Получить предполагаемый путь к папке с фотографиями
        /// объекта недвижимости.
        /// </summary>
        /// <param name="realtyObjectType">Тип объекта недвижимости.</param>
        /// <param name="realtyObjectId">Id объекта недвижимости (из xml).</param>
        /// <returns>Предполагаемый путь к фотографиям
        /// объекта недвижимости.</returns>
        /// <remarks>Существование папки не гарантируется, т.к.
        /// у объекта может не быть фотографий.</remarks>
        internal string GetPhotoPath(
            RealtyObjectType realtyObjectType,
            string realtyObjectId)
        {
            string xmlPath = this.GetXmlDoc(realtyObjectType);
            string dirPath = Path.GetDirectoryName(xmlPath);

            if (string.IsNullOrWhiteSpace(dirPath))
            {
                throw new DirectoryNotFoundException(
                          "Не удалось найти папку хранения фотографий объекта "
                          + realtyObjectId);
            }

            return(Path.Combine(dirPath, "photo", realtyObjectId));
        }
        /// <summary>
        /// Создать стандартные метаданные.
        /// </summary>
        public void CreateStandardMetadata()
        {
            foreach (TypeMetadataDescription typeDescription
                     in Metadata.GetInstance().TypeDescriptions)
            {
                RealtyObjectType newType = new RealtyObjectType
                {
                    TypeName = typeDescription.Name
                };

                foreach (string propName
                         in typeDescription.PropertyNames)
                {
                    PropertyType propType =
                        this.FindOrCreatePropertyType(propName);
                    newType.PropertyTypes.Add(propType);
                }

                this.context.RealtyObjectTypes.Add(newType);
            }
        }