/// <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; }