private bool TryGetFile(string relativePath, string fileName, out ImageRow file) { ColumnTuplesWithWhere fileQuery = new ColumnTuplesWithWhere(); fileQuery.SetWhere(relativePath, fileName); List<ImageRow> files = this.Files.Select(fileQuery.Where); if (files.Count == 0) { file = null; return false; } if (files.Count == 1) { file = files[0]; return true; } throw new ArgumentOutOfRangeException("relativePath, fileName", String.Format("{0} files match '{1}'.", files.Count, fileQuery.Where)); }
protected List<FileExpectations> PopulateDefaultDatabase(FileDatabase fileDatabase, bool excludeSubfolderFiles) { TimeZoneInfo imageSetTimeZone = fileDatabase.ImageSet.GetTimeZone(); // files in same folder as .tdb and .ddb DateTimeAdjustment martenDateTimeAdjustment; ImageRow martenImage = this.CreateFile(fileDatabase, imageSetTimeZone, TestConstant.FileExpectation.InfraredMarten, out martenDateTimeAdjustment); Assert.IsTrue(martenDateTimeAdjustment.HasFlag(DateTimeAdjustment.MetadataDate) && martenDateTimeAdjustment.HasFlag(DateTimeAdjustment.MetadataTime)); DateTimeAdjustment bobcatDatetimeAdjustment; ImageRow bobcatImage = this.CreateFile(fileDatabase, imageSetTimeZone, TestConstant.FileExpectation.DaylightBobcat, out bobcatDatetimeAdjustment); Assert.IsTrue(bobcatDatetimeAdjustment.HasFlag(DateTimeAdjustment.MetadataDate) && bobcatDatetimeAdjustment.HasFlag(DateTimeAdjustment.MetadataTime)); fileDatabase.AddFiles(new List<ImageRow>() { martenImage, bobcatImage }, null); fileDatabase.SelectFiles(FileSelection.All); FileTableEnumerator fileEnumerator = new FileTableEnumerator(fileDatabase); Assert.IsTrue(fileEnumerator.TryMoveToFile(0)); Assert.IsTrue(fileEnumerator.MoveNext()); ColumnTuplesWithWhere bobcatUpdate = new ColumnTuplesWithWhere(); bobcatUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.Choice0, "choice b")); bobcatUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.Counter0, 1.ToString())); bobcatUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.FlagNotVisible, true)); bobcatUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.Note3, "bobcat")); bobcatUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.NoteNotVisible, "adult")); bobcatUpdate.SetWhere(fileEnumerator.Current.ID); fileDatabase.UpdateFiles(new List<ColumnTuplesWithWhere>() { bobcatUpdate }); long martenImageID = fileDatabase.Files[0].ID; fileDatabase.UpdateFile(martenImageID, TestConstant.DefaultDatabaseColumn.Choice0, "choice b"); fileDatabase.UpdateFile(martenImageID, TestConstant.DefaultDatabaseColumn.Counter0, 1.ToString()); fileDatabase.UpdateFile(martenImageID, TestConstant.DefaultDatabaseColumn.FlagNotVisible, Boolean.TrueString); fileDatabase.UpdateFile(martenImageID, TestConstant.DefaultDatabaseColumn.Note3, "American marten"); fileDatabase.UpdateFile(martenImageID, TestConstant.DefaultDatabaseColumn.NoteNotVisible, "adult"); // generate expectations List<FileExpectations> fileExpectations = new List<FileExpectations>() { new FileExpectations(TestConstant.FileExpectation.InfraredMarten), new FileExpectations(TestConstant.FileExpectation.DaylightBobcat), }; // files in subfolder if (excludeSubfolderFiles == false) { DateTimeAdjustment martenPairDateTimeAdjustment; ImageRow martenPairImage = this.CreateFile(fileDatabase, imageSetTimeZone, TestConstant.FileExpectation.DaylightMartenPair, out martenPairDateTimeAdjustment); Assert.IsTrue(martenPairDateTimeAdjustment.HasFlag(DateTimeAdjustment.MetadataDate) && martenPairDateTimeAdjustment.HasFlag(DateTimeAdjustment.MetadataTime)); DateTimeAdjustment coyoteDatetimeAdjustment; ImageRow coyoteImage = this.CreateFile(fileDatabase, imageSetTimeZone, TestConstant.FileExpectation.DaylightCoyote, out coyoteDatetimeAdjustment); Assert.IsTrue(coyoteDatetimeAdjustment.HasFlag(DateTimeAdjustment.MetadataDate) && coyoteDatetimeAdjustment.HasFlag(DateTimeAdjustment.MetadataTime)); fileDatabase.AddFiles(new List<ImageRow>() { martenPairImage, coyoteImage }, null); fileDatabase.SelectFiles(FileSelection.All); ColumnTuplesWithWhere coyoteImageUpdate = new ColumnTuplesWithWhere(); coyoteImageUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.Note3, "coyote")); coyoteImageUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.NoteNotVisible, "adult")); coyoteImageUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.NoteWithCustomDataLabel, String.Empty)); coyoteImageUpdate.Columns.Add(new ColumnTuple(TestConstant.DefaultDatabaseColumn.Note0, "escaped field, because a comma is present")); coyoteImageUpdate.SetWhere(fileEnumerator.Current.ID); fileDatabase.UpdateFiles(new List<ColumnTuplesWithWhere>() { coyoteImageUpdate }); long martenPairImageID = fileDatabase.Files[3].ID; fileDatabase.UpdateFile(martenPairImageID, TestConstant.DefaultDatabaseColumn.Note3, "American marten"); fileDatabase.UpdateFile(martenPairImageID, TestConstant.DefaultDatabaseColumn.NoteNotVisible, "adult"); fileDatabase.UpdateFile(martenPairImageID, TestConstant.DefaultDatabaseColumn.NoteWithCustomDataLabel, String.Empty); fileDatabase.UpdateFile(martenPairImageID, TestConstant.DefaultDatabaseColumn.Note0, "escaped field due to presence of \",\""); fileExpectations.Add(new FileExpectations(TestConstant.FileExpectation.DaylightMartenPair)); fileExpectations.Add(new FileExpectations(TestConstant.FileExpectation.DaylightCoyote)); } // pull the file data table again so the updates are visible to .csv export fileDatabase.SelectFiles(FileSelection.All); // complete setting expectations for (int fileIndex = 0; fileIndex < fileDatabase.Files.RowCount; ++fileIndex) { FileExpectations fileExpectation = fileExpectations[fileIndex]; fileExpectation.ID = fileIndex + 1; } return fileExpectations; }
/// <summary> /// Update a column's value (identified by its data label) in the row of an existing file (identified by its ID) /// </summary> public void UpdateFile(long fileID, string dataLabel, string value) { // update the data table ImageRow file = this.Files.Find(fileID); file.SetValueFromDatabaseString(dataLabel, value); // update the row in the database this.CreateBackupIfNeeded(); ColumnTuplesWithWhere columnToUpdate = new ColumnTuplesWithWhere(); columnToUpdate.Columns.Add(new ColumnTuple(dataLabel, value)); // Populate the data columnToUpdate.SetWhere(fileID); this.Database.Update(Constant.DatabaseTable.FileData, columnToUpdate); }