コード例 #1
0
        /// <summary>
        /// Create a fully inflated, properly typed media object instance based on the specified data record and
        /// belonging to the specified parent album.
        /// </summary>
        /// <param name="moDto">A media object DTO containing information about the media object.</param>
        /// <param name="parentAlbum">The album that contains the media obect to be returned.</param>
        /// <returns>Returns a fully inflated, properly typed media object instance based on the specified data 
        /// record and belonging to the specified parent album.</returns>
        /// <exception cref="ArgumentNullException">Thrown when <paramref name = "moDto" /> or <paramref name = "parentAlbum" /> is null.</exception>
        public static IGalleryObject LoadMediaObjectInstance(MediaObjectDto moDto, IAlbum parentAlbum)
        {
            // SQL:
            // SELECT
            //  mo.MediaObjectID, mo.FKAlbumID, mo.Title, mo.HashKey, mo.ThumbnailFilename, mo.ThumbnailWidth, mo.ThumbnailHeight,
            //  mo.ThumbnailSizeKB, mo.OptimizedFilename, mo.OptimizedWidth, mo.OptimizedHeight, mo.OptimizedSizeKB,
            //  mo.OriginalFilename, mo.OriginalWidth, mo.OriginalHeight, mo.OriginalSizeKB, mo.ExternalHtmlSource, mo.ExternalType, mo.Seq,
            //  mo.CreatedBy, mo.DateAdded, mo.LastModifiedBy, mo.DateLastModified, mo.IsPrivate
            // FROM [gs_MediaObject] mo JOIN [gs_Album] a ON mo.FKAlbumID = a.AlbumID
            // WHERE mo.MediaObjectID = @MediaObjectId AND a.FKGalleryID = @GalleryID

            if (moDto == null)
                throw new ArgumentNullException("moDto");

            if (parentAlbum == null)
                throw new ArgumentNullException("parentAlbum");

            #if DEBUG
            //int id = moDto.MediaObjectId;

            //Trace.WriteLine(
            //  String.Format(
            //    "LoadMediaObjectInstance(IDataRecord dr, IAlbum parentAlbum): Retrieving media object {0} from data store...", id));
            #endif

            GalleryObjectType goType = HelperFunctions.DetermineMediaObjectType(moDto.OriginalFilename, moDto.ExternalHtmlSource);
            IGalleryObject go = null;

            try
            {
                // It is tempting to look in the media object cache for the desired object, but this does not work. If you try, then when you retrieve the
                // album from the cache on the next page load it will have zero media objects but the AreChildrenInflated property will be true, which
                // causes problems.
                switch (goType)
                {
                    case GalleryObjectType.Image:
                        {
                            #region Create Image

                            go = new Image(
                                moDto.MediaObjectId,
                                parentAlbum,
                                moDto.Title.Trim(),
                                moDto.HashKey.Trim(),
                                moDto.ThumbnailFilename,
                                moDto.ThumbnailWidth,
                                moDto.ThumbnailHeight,
                                moDto.ThumbnailSizeKB,
                                moDto.OptimizedFilename.Trim(),
                                moDto.OptimizedWidth,
                                moDto.OptimizedHeight,
                                moDto.OptimizedSizeKB,
                                moDto.OriginalFilename.Trim(),
                                moDto.OriginalWidth,
                                moDto.OriginalHeight,
                                moDto.OriginalSizeKB,
                                moDto.Seq,
                                moDto.CreatedBy.Trim(),
                                Convert.ToDateTime(moDto.DateAdded, CultureInfo.CurrentCulture),
                                moDto.LastModifiedBy.Trim(),
                                HelperFunctions.ToDateTime(moDto.DateLastModified),
                                moDto.IsPrivate,
                                true,
                                null);
                            break;

                            #endregion
                        }
                    case GalleryObjectType.Video:
                        {
                            #region Create Video

                            go = new Video(
                                moDto.MediaObjectId,
                                parentAlbum,
                                moDto.Title.Trim(),
                                moDto.HashKey.Trim(),
                                moDto.ThumbnailFilename,
                                moDto.ThumbnailWidth,
                                moDto.ThumbnailHeight,
                                moDto.ThumbnailSizeKB,
                                moDto.OptimizedFilename.Trim(),
                                moDto.OptimizedWidth,
                                moDto.OptimizedHeight,
                                moDto.OptimizedSizeKB,
                                moDto.OriginalFilename.Trim(),
                                moDto.OriginalWidth,
                                moDto.OriginalHeight,
                                moDto.OriginalSizeKB,
                                moDto.Seq,
                                moDto.CreatedBy.Trim(),
                                Convert.ToDateTime(moDto.DateAdded, CultureInfo.CurrentCulture),
                                moDto.LastModifiedBy.Trim(),
                                HelperFunctions.ToDateTime(moDto.DateLastModified),
                                moDto.IsPrivate,
                                true,
                                null);
                            break;

                            #endregion
                        }
                    case GalleryObjectType.Audio:
                        {
                            #region Create Audio

                            go = new Audio(
                                moDto.MediaObjectId,
                                parentAlbum,
                                moDto.Title.Trim(),
                                moDto.HashKey.Trim(),
                                moDto.ThumbnailFilename,
                                moDto.ThumbnailWidth,
                                moDto.ThumbnailHeight,
                                moDto.ThumbnailSizeKB,
                                moDto.OptimizedFilename.Trim(),
                                moDto.OptimizedWidth,
                                moDto.OptimizedHeight,
                                moDto.OptimizedSizeKB,
                                moDto.OriginalFilename.Trim(),
                                moDto.OriginalWidth,
                                moDto.OriginalHeight,
                                moDto.OriginalSizeKB,
                                moDto.Seq,
                                moDto.CreatedBy.Trim(),
                                Convert.ToDateTime(moDto.DateAdded, CultureInfo.CurrentCulture),
                                moDto.LastModifiedBy.Trim(),
                                HelperFunctions.ToDateTime(moDto.DateLastModified),
                                moDto.IsPrivate,
                                true,
                                null);
                            break;

                            #endregion
                        }
                    case GalleryObjectType.Generic:
                    case GalleryObjectType.Unknown:
                        {
                            #region Create Generic Media Object

                            go = new GenericMediaObject(
                                moDto.MediaObjectId,
                                parentAlbum,
                                moDto.Title.Trim(),
                                moDto.HashKey.Trim(),
                                moDto.ThumbnailFilename,
                                moDto.ThumbnailWidth,
                                moDto.ThumbnailHeight,
                                moDto.ThumbnailSizeKB,
                                moDto.OriginalFilename.Trim(),
                                moDto.OriginalWidth,
                                moDto.OriginalHeight,
                                moDto.OriginalSizeKB,
                                moDto.Seq,
                                moDto.CreatedBy.Trim(),
                                Convert.ToDateTime(moDto.DateAdded, CultureInfo.CurrentCulture),
                                moDto.LastModifiedBy.Trim(),
                                HelperFunctions.ToDateTime(moDto.DateLastModified),
                                moDto.IsPrivate,
                                true,
                                null);
                            break;

                            #endregion
                        }
                    case GalleryObjectType.External:
                        {
                            #region Create External

                            go = new ExternalMediaObject(
                                moDto.MediaObjectId,
                                parentAlbum,
                                moDto.Title.Trim(),
                                moDto.HashKey.Trim(),
                                moDto.ThumbnailFilename,
                                moDto.ThumbnailWidth,
                                moDto.ThumbnailHeight,
                                moDto.ThumbnailSizeKB,
                                moDto.ExternalHtmlSource.Trim(),
                                MimeTypeEnumHelper.ParseMimeTypeCategory(moDto.ExternalType.Trim()),
                                moDto.Seq,
                                moDto.CreatedBy.Trim(),
                                Convert.ToDateTime(moDto.DateAdded, CultureInfo.CurrentCulture),
                                moDto.LastModifiedBy.Trim(),
                                HelperFunctions.ToDateTime(moDto.DateLastModified),
                                moDto.IsPrivate,
                                true);
                            break;

                            #endregion
                        }
                    default:
                        {
                            throw new UnsupportedMediaObjectTypeException(Path.Combine(parentAlbum.FullPhysicalPath, moDto.OriginalFilename));
                        }
                }

                AddMediaObjectMetadata(go, moDto);

                AddToMediaObjectCache(go);
            }
            catch
            {
                if (go != null)
                    go.Dispose();

                throw;
            }

            return go;
        }