public IContent New() { var entity = new Content(); entity.IdentifyKey = RandomAlphameric.RandomAlphanumeric(10); return(this.Add(entity)); }
/// <summary> /// サムネイルを生成します /// </summary> public void Do() { try { using (MemoryStream memoryStream = new MemoryStream()) { this._ImageSource.SaveAsPng(memoryStream); string mimeType = "image/png"; if (string.IsNullOrEmpty(_rebuildThumbnailKey)) { string key = null; while (key == null) { var tal = RandomAlphameric.RandomAlphanumeric(20); var r = _thumbnailRepository.FindByKey(tal); if (r.Count() == 0) { key = tal; } foreach (var p in r) { if (p.ThumbnailType != _ThumbnailType) { key = tal; } } } var thumbnail = _thumbnailRepository.New(); thumbnail.ThumbnailKey = key; thumbnail.ThumbnailType = _ThumbnailType; thumbnail.MimeType = mimeType; thumbnail.BitmapBytes = memoryStream.ToArray(); _ThumbnailKey = key; } else { var thumbnailQue = _thumbnailRepository.FindByKey(_rebuildThumbnailKey); // サムネイルタイプのエンティティが存在する場合、trueをセットする。 bool isThumbnailSave = false; foreach (var prop in thumbnailQue) { if (prop.ThumbnailType == _ThumbnailType) { prop.BitmapBytes = memoryStream.ToArray(); isThumbnailSave = true; } } if (!isThumbnailSave) { // 指定したサムネイルタイプのエンティティを、 // 新規作成する。 var thumbnail_NewThumbnailType = _thumbnailRepository.New(); thumbnail_NewThumbnailType.ThumbnailKey = _rebuildThumbnailKey; thumbnail_NewThumbnailType.ThumbnailType = _ThumbnailType; thumbnail_NewThumbnailType.BitmapBytes = memoryStream.ToArray(); _ThumbnailKey = _rebuildThumbnailKey; } else { _ThumbnailKey = _rebuildThumbnailKey; } } } } catch (NotSupportedException expr) { _logger.Warn(expr.Message); } }
/// <summary> /// サムネイルを生成します /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public void Do(object sender, DoWorkEventArgs args) { try { // バイナリに出力 using (MemoryStream memoryStream = new MemoryStream()) { PngBitmapEncoder encoder = new PngBitmapEncoder(); var frame = BitmapFrame.Create((BitmapImage)this._ImageSource); encoder.Frames.Add(frame); encoder.Save(memoryStream); using (var dbc = new ThumbDbContext()) { var repo = new ThumbnailRepository(dbc); if (string.IsNullOrEmpty(_rebuildThumbnailKey)) { string key = null; while (key == null) { var tal = RandomAlphameric.RandomAlphanumeric(20); var r = repo.FindFromKey(tal); if (r.Count == 0) { key = tal; } foreach (var p in r) { if (p.ThumbnailType != _ThumbnailType) { key = tal; } } } var thumbnail = new Thumbnail(); thumbnail.ThumbnailKey = key; thumbnail.ThumbnailType = _ThumbnailType; thumbnail.BitmapBytes = memoryStream.ToArray(); repo.Add(thumbnail); _ThumbnailKey = key; } else { var thumbnail = repo.FindFromKey(_rebuildThumbnailKey); // サムネイルタイプのエンティティが存在する場合、trueをセットする。 bool isThumbnailSave = false; foreach (var prop in thumbnail) { if (prop.ThumbnailType == _ThumbnailType) { prop.BitmapBytes = memoryStream.ToArray(); isThumbnailSave = true; } } if (!isThumbnailSave) { // 指定したサムネイルタイプのエンティティを、 // 新規作成する。 var thumbnail_NewThumbnailType = new Thumbnail(); thumbnail_NewThumbnailType.ThumbnailKey = _rebuildThumbnailKey; thumbnail_NewThumbnailType.ThumbnailType = _ThumbnailType; thumbnail_NewThumbnailType.BitmapBytes = memoryStream.ToArray(); repo.Add(thumbnail_NewThumbnailType); _ThumbnailKey = _rebuildThumbnailKey; } else { _ThumbnailKey = _rebuildThumbnailKey; } } dbc.SaveChanges(); } } } catch (NotSupportedException expr) { LOG.WarnFormat(expr.Message); } }
protected override void Execute(CodeActivityContext context) { IWorkflowContext workflowContext = context.GetExtension <IWorkflowContext>(); ParameterStack pstack = context.GetValue <ParameterStack>(this.Parameter); var target = pstack.GetValue <FileMappingInfo>(ActivityParameterStack.TARGET); Mogami.Model.Category category = null; if (pstack.ContainsKey(ActivityParameterStack.CATEGORY)) { category = pstack.GetValue <Mogami.Model.Category>(ActivityParameterStack.CATEGORY); } var outputname = context.GetValue <string>(OutputName); // Guard Ensure.That(target).IsNotNull(); // FileMappingInfoがArtifactとの関連が存在する場合、 // 新規のArtifactは作成できないので、例外を投げる。 if (target.Id != 0L) { var r = new ArtifactRepository(workflowContext.DbContext); var a = r.LoadByFileMappingInfo(target); if (a != null) { throw new ApplicationException("すでに作成済みのFileMappingInfoです。"); } } if (category == null) { var catrepo = new CategoryRepository(workflowContext.DbContext); var appcat = catrepo.Load(3L); if (appcat == null) { throw new ApplicationException(); } } var tokens = target.MappingFilePath.Split(new string[] { @"\" }, StringSplitOptions.None); var sttokens = new Stack <string>(tokens); var title = sttokens.Pop(); // 現Verでは画像のみ、メタ情報を生成できる。 // (それ以外のファイルは、例外を投げる) if (target.Mimetype == "image/png") { var repo = new ImageArtifactRepository(workflowContext.DbContext); var entity = new ImageArtifact { Title = title, IdentifyKey = RandomAlphameric.RandomAlphanumeric(10), FileMappingInfo = target, ImageHeight = -1, // 未実装 ImageWidth = -1, // 未実装 }; if (category != null) { entity.Category = new T_Artifact2Category() { Artifact = entity, Category = category, OrderNo = 1 } } ; repo.Add(entity); pstack.SetValue(outputname, entity); } else { throw new ApplicationException("処理不能なMIMEタイプです"); } } #endregion メソッド }
/// <summary> /// ファイルマッピング情報から、コンテント情報の作成または更新を行う。 /// </summary> /// <param name="fileMappingInfo">ファイルマッピング情報</param> private IContent UpdateContentFromFileMapping(IFileMappingInfo fileMappingInfo) { // FileMappingInfoがContentとの関連が存在する場合、新規のArtifactは作成できないので例外を投げる。 if (fileMappingInfo.Id != 0L) { var a = mContentRepository.Load(fileMappingInfo); if (a != null) { throw new ApplicationException("既にコンテント情報が作成済みのFileMappingInfoです。"); } } //--- //!+ パス文字列から、階層構造を持つカテゴリを取得/作成を行うロジック //--- /* DUMMY */ var appcat = mCategoryRepository.Load(1L); // ルートカテゴリを取得する(ルートカテゴリ取得に使用するIDをハードコートで指定しているが、これは暫定対応) if (appcat == null) { throw new ApplicationException("ルートカテゴリが見つかりません"); } //処理内容 // ・パスに含まれるカテゴリすべてが永続化されること // ・Contentが永続化されること // パス文字列を、トークン区切りでキュー配列に詰めるロジック string pathText = fileMappingInfo.MappingFilePath; // 下記のコードは、Akalibへユーティリティとして実装する(パスを区切ってQueueを作成するユーティリティ) // 有効なパス区切り文字は、下記のコードでチェックしてください。 // LOG.Info("トークン文字列1: Token: {}", Path.AltDirectorySeparatorChar); // LOG.Info("トークン文字列2: Token: {}", Path.DirectorySeparatorChar); // LOG.Info("トークン文字列3: Token: {}", Path.PathSeparator); // LOG.Info("トークン文字列4: Token: {}", Path.VolumeSeparatorChar); // // Windows環境: Path.DirectorySeparatorChar // Unix環境: Path.AltDirectorySeparatorChar var sttokens = new Stack <string>(pathText.Split(Path.DirectorySeparatorChar, StringSplitOptions.None)); var title = sttokens.Pop(); var qutokens = new Queue <string>(sttokens.Reverse <string>()); // 各トークン(パス文字列)のカテゴリを取得、または存在しない場合はカテゴリを新規作成する。 while (qutokens.Count > 0) { string parsedCategoryName; bool categoryCreatedFlag = false; bool parseSuccessFlag = false; var oneText = qutokens.Dequeue(); parseSuccessFlag = AttachParsedCategoryName(oneText, out parsedCategoryName); appcat = CreateOrSelectCategory(appcat, parsedCategoryName, out categoryCreatedFlag); if (categoryCreatedFlag && parseSuccessFlag) { mMessagingManager.Dispatcher(MSG_NEWCATEGORY, appcat.Id); } AttachParsedLabel(oneText, appcat); } // **コンテント情報を保持するエンティティの作成** // 現Verでは画像のみ、メタ情報を生成できる (それ以外のファイルは、例外を投げる) if (fileMappingInfo.Mimetype == "image/png") { var entity = mContentRepository.New(); entity.Name = title; entity.IdentifyKey = RandomAlphameric.RandomAlphanumeric(10); entity.SetFileMappingInfo(fileMappingInfo); entity.SetCategory(appcat); mContentRepository.Save(); return(entity); } else { throw new ApplicationException("処理不能なMIMEタイプです"); } // -------------------- // ここまで // -------------------- }