EDMIService: First completed version of UpdateFileMethod
This commit is contained in:
parent
deef67b548
commit
533df59b1f
@ -2,12 +2,11 @@
|
||||
Imports DigitalData.Modules.Database.MSSQLServer
|
||||
Imports DigitalData.Modules.Language
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports DigitalData.Modules.EDMI.API.Client
|
||||
Imports System.Data.SqlClient
|
||||
Imports System.IO
|
||||
Imports DigitalData.Modules.ZooFlow.State
|
||||
Imports DigitalData.Modules.Patterns
|
||||
Imports DigitalData.Services.EDMIService.Methods.IDB
|
||||
Imports DigitalData.Modules.Filesystem
|
||||
|
||||
Namespace IDB
|
||||
Public Class Helpers
|
||||
@ -15,15 +14,17 @@ Namespace IDB
|
||||
|
||||
Private ReadOnly Patterns As Patterns2
|
||||
Private ReadOnly Database As MSSQLServer
|
||||
Private ReadOnly FileEx As File
|
||||
|
||||
Public Sub New(pLogConfig As LogConfig, pMSSQLServer As MSSQLServer)
|
||||
MyBase.New(pLogConfig)
|
||||
Patterns = New Patterns2(pLogConfig)
|
||||
Database = pMSSQLServer
|
||||
FileEx = New File(pLogConfig)
|
||||
End Sub
|
||||
|
||||
Public Function GetPlaceholderValue(pValue As String,
|
||||
pFileInfo As FileInfo,
|
||||
pFileInfo As IO.FileInfo,
|
||||
pUserState As UserState,
|
||||
pUserAttributes As Dictionary(Of String, List(Of String)),
|
||||
pAutoAttributes As Dictionary(Of String, List(Of String))) As String
|
||||
@ -135,6 +136,32 @@ Namespace IDB
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function GetFileObjectPath(pStore As GlobalState.ObjectStore, pDateImported As Date) As String
|
||||
' Get directory by DateImported or, if not supplied, by current date
|
||||
Dim oSubDirectory As String
|
||||
If IsNothing(pDateImported) Then
|
||||
oSubDirectory = FileEx.CreateDateDirectory(Now)
|
||||
Else
|
||||
oSubDirectory = FileEx.CreateDateDirectory(pDateImported)
|
||||
End If
|
||||
Logger.Debug("Subdirectory is [{0}]", oSubDirectory)
|
||||
|
||||
' Check and create final path, if necessary
|
||||
Dim oFinalPath = IO.Path.Combine(pStore.Path, oSubDirectory)
|
||||
If Not IO.Directory.Exists(oFinalPath) Then
|
||||
Try
|
||||
Logger.Debug("Path does not exist, creating: [{0}]", oFinalPath)
|
||||
IO.Directory.CreateDirectory(oFinalPath)
|
||||
Logger.Debug("Created folder [{0}]", oFinalPath)
|
||||
Catch ex As Exception
|
||||
LogAndThrow(ex, $"Store Directory [{oFinalPath}] could not be created!")
|
||||
End Try
|
||||
End If
|
||||
Logger.Debug("Final Directory is [{0}]", oFinalPath)
|
||||
|
||||
Return oFinalPath
|
||||
End Function
|
||||
|
||||
Public Function GetObject(pObjectId As Long) As IDBObject
|
||||
Try
|
||||
Dim oGetObjectSQL = $"SELECT * FROM VWIDB_OBJECT WHERE IDB_OBJ_ID = {pObjectId}"
|
||||
|
||||
@ -34,37 +34,17 @@ Namespace Methods.IDB.NewFile
|
||||
|
||||
' Find ObjectStore by Title
|
||||
Logger.Debug("Checking for DataStore [{0}].", pData.StoreName)
|
||||
Dim oStore = GlobalState.ObjectStores.Where(Function(store) store.Title.Equals(pData.StoreName, StringComparison.OrdinalIgnoreCase)).SingleOrDefault()
|
||||
Dim oStore = GlobalState.ObjectStores.
|
||||
Where(Function(store) store.Title = pData.StoreName).
|
||||
SingleOrDefault()
|
||||
|
||||
If oStore Is Nothing Then
|
||||
LogAndThrow($"DataStore [{pData.StoreName}] does not exist. Exiting.")
|
||||
End If
|
||||
|
||||
' Get Store base path
|
||||
Dim oBasePath As String = oStore.Path
|
||||
Logger.Debug("Store BasePath is [{0}]", oBasePath)
|
||||
|
||||
' Get directory by DateImported or, if not supplied, by current date
|
||||
Dim oSubDirectory As String
|
||||
If IsNothing(pData.File.FileImportedAt) Then
|
||||
oSubDirectory = GetDateSubDirectory(Now)
|
||||
Else
|
||||
oSubDirectory = GetDateSubDirectory(pData.File.FileImportedAt)
|
||||
End If
|
||||
Logger.Debug("Subdirectory is [{0}]", oSubDirectory)
|
||||
|
||||
' Check and create final path, if necessary
|
||||
Dim oFinalPath = IO.Path.Combine(oBasePath, oSubDirectory)
|
||||
If Not IO.Directory.Exists(oFinalPath) Then
|
||||
Try
|
||||
Logger.Debug("Path does not exist, creating: [{0}]", oFinalPath)
|
||||
IO.Directory.CreateDirectory(oFinalPath)
|
||||
Logger.Debug("Created folder [{0}]", oFinalPath)
|
||||
Catch ex As Exception
|
||||
LogAndThrow(ex, $"Store Directory [{oFinalPath}] could not be created!")
|
||||
End Try
|
||||
End If
|
||||
Logger.Debug("Final Directory is [{0}]", oFinalPath)
|
||||
' Get Store base and final path
|
||||
Logger.Debug("Store BasePath is [{0}]", oStore.Path)
|
||||
Dim oFinalPath = Helpers.GetFileObjectPath(oStore, pData.File.FileImportedAt)
|
||||
|
||||
' Get filename
|
||||
Dim oKeepFileName As Boolean = False
|
||||
@ -182,10 +162,6 @@ Namespace Methods.IDB.NewFile
|
||||
Return $"{IDB_OBJ_ID}.ddfo"
|
||||
End If
|
||||
End Function
|
||||
|
||||
Private Function GetDateSubDirectory(pDate As Date) As String
|
||||
Return IO.Path.Combine(pDate.ToString("yyyy"), pDate.ToString("MM"), pDate.ToString("dd"))
|
||||
End Function
|
||||
End Class
|
||||
|
||||
End Namespace
|
||||
@ -20,7 +20,6 @@ Namespace Methods.IDB.UpdateFile
|
||||
End Sub
|
||||
|
||||
Public Function Run(pData As UpdateFileRequest) As UpdateFileResponse
|
||||
|
||||
Try
|
||||
' TODO: Update file object
|
||||
If Helpers.TestObjectIdExists(pData.ObjectId) = False Then
|
||||
@ -28,8 +27,13 @@ Namespace Methods.IDB.UpdateFile
|
||||
End If
|
||||
|
||||
'TODO: Create a view that collects all information about an idb object
|
||||
Dim oResultObjectId As Long
|
||||
|
||||
If pData.CreateNewVersion = False Then
|
||||
' ----------------------------------------------
|
||||
' -- Replace the existing file-object
|
||||
' ----------------------------------------------
|
||||
|
||||
Dim oGetFileObject As New GetFileObject.GetFileObjectMethod(LogConfig, DatabaseIDB, DatabaseECM, GlobalState)
|
||||
Dim oArgs = New GetFileObject.GetFileObjectRequest With {
|
||||
.ObjectId = pData.ObjectId,
|
||||
@ -56,178 +60,51 @@ Namespace Methods.IDB.UpdateFile
|
||||
LogAndThrow(ex, $"Could not write file [{oFilePath}] to disk!")
|
||||
End Try
|
||||
|
||||
Return New UpdateFileResponse(pData.ObjectId)
|
||||
oResultObjectId = pData.ObjectId
|
||||
|
||||
Else
|
||||
Throw New ApplicationException("Not implemented!!")
|
||||
' ----------------------------------------------
|
||||
' -- Create a new object + file object
|
||||
' ----------------------------------------------
|
||||
|
||||
Dim oObjectTable = DatabaseIDB.GetDatatable($"Select * FROM VWIDB_OBJECT WHERE IDB_OBJ_ID = {pData.ObjectId}")
|
||||
Dim oObjectRow As DataRow = oObjectTable.Rows.Item(0)
|
||||
Dim oKind As String = oObjectRow.Item("KIND_NAME")
|
||||
Dim oBusinessEntity As String = oObjectRow.Item("BE_NAME")
|
||||
Dim oStore As String = oObjectRow.ItemArray("STORE_NAME")
|
||||
|
||||
Dim oNewFileMethod As New NewFile.NewFileMethod(LogConfig, DatabaseIDB, DatabaseECM, GlobalState)
|
||||
Dim oNewFileRequest As New NewFile.NewFileRequest With {
|
||||
.File = pData.File,
|
||||
.BusinessEntity = oBusinessEntity,
|
||||
.KindType = oKind,
|
||||
.StoreName = oStore,
|
||||
.User = pData.User
|
||||
}
|
||||
Dim oNewFileResponse = oNewFileMethod.Run(oNewFileRequest)
|
||||
Dim oNewObjectId = oNewFileResponse.ObjectId
|
||||
|
||||
Dim oSql As String = $"EXEC PRIDB_NEW_VERSION_OBJECT '{pData.ObjectId}', '{oNewObjectId}', '{pData.User.UserName}'"
|
||||
DatabaseIDB.ExecuteNonQuery(oSql)
|
||||
|
||||
|
||||
oResultObjectId = oNewObjectId
|
||||
|
||||
End If
|
||||
|
||||
' Finally, commit the transaction
|
||||
Transaction?.Commit()
|
||||
|
||||
Return New UpdateFileResponse(oResultObjectId)
|
||||
Catch ex As Exception
|
||||
Logger.Warn("Error occurred while creating file!")
|
||||
Logger.Error(ex)
|
||||
|
||||
Logger.Info("Rolling back transaction.")
|
||||
Transaction?.Rollback()
|
||||
|
||||
Return New UpdateFileResponse(ex)
|
||||
|
||||
End Try
|
||||
|
||||
|
||||
|
||||
'Dim oFilePath As String = Nothing
|
||||
'
|
||||
'Dim oExistingObjectId = TestFileChecksumExists(pData.File.FileChecksum)
|
||||
'If oExistingObjectId > 0 Then
|
||||
' Return New UpdateFileResponse(oExistingObjectId)
|
||||
'End If
|
||||
'Try
|
||||
|
||||
' Dim oObjectId = NewObjectId(pData.KindType, pData.BusinessEntity, pData.User.UserName)
|
||||
' If oObjectId = 0 Then
|
||||
' LogAndThrow("Could not create new ObjectId!")
|
||||
' End If
|
||||
|
||||
' ' Find ObjectStore by Title
|
||||
' Logger.Debug("Checking for DataStore [{0}].", pData.StoreName)
|
||||
' Dim oStore = GlobalState.ObjectStores.
|
||||
' Where(Function(store) store.Title.Equals(pData.StoreName, StringComparison.OrdinalIgnoreCase)).
|
||||
'SingleOrDefault()
|
||||
|
||||
' If oStore Is Nothing Then
|
||||
' LogAndThrow($"DataStore [{pData.StoreName}] does not exist. Exiting.")
|
||||
' End If
|
||||
|
||||
' ' Get Store base path
|
||||
' Dim oBasePath As String = oStore.Path
|
||||
' Logger.Debug("Store BasePath is [{0}]", oBasePath)
|
||||
|
||||
' ' Get directory by DateImported or, if not supplied, by current date
|
||||
' Dim oSubDirectory As String
|
||||
' If IsNothing(pData.File.FileImportedAt) Then
|
||||
' oSubDirectory = GetDateSubDirectory(Now)
|
||||
' Else
|
||||
' oSubDirectory = GetDateSubDirectory(pData.File.FileImportedAt)
|
||||
' End If
|
||||
' Logger.Debug("Subdirectory is [{0}]", oSubDirectory)
|
||||
|
||||
' ' Check and create final path, if necessary
|
||||
' Dim oFinalPath = IO.Path.Combine(oBasePath, oSubDirectory)
|
||||
' If Not IO.Directory.Exists(oFinalPath) Then
|
||||
' Try
|
||||
' Logger.Debug("Path does not exist, creating: [{0}]", oFinalPath)
|
||||
' IO.Directory.CreateDirectory(oFinalPath)
|
||||
' Logger.Debug("Created folder [{0}]", oFinalPath)
|
||||
' Catch ex As Exception
|
||||
' LogAndThrow(ex, $"Store Directory [{oFinalPath}] could not be created!")
|
||||
' End Try
|
||||
' End If
|
||||
' Logger.Debug("Final Directory is [{0}]", oFinalPath)
|
||||
|
||||
' ' Get filename
|
||||
' Dim oKeepFileName As Boolean = False
|
||||
' If oStore.IsArchive Then
|
||||
' Logger.Debug("Object Store is an archive: [{0}]", oStore.IsArchive)
|
||||
' oKeepFileName = True
|
||||
' End If
|
||||
|
||||
' Dim oFileName As String = GetFileObjectFileName(oObjectId, pData.File.FileName, oKeepFileName)
|
||||
' Logger.Debug("Filename is [{0}]", oFileName)
|
||||
|
||||
' oFilePath = IO.Path.Combine(oFinalPath, oFileName)
|
||||
' Dim oFileObjectInfo As IO.FileInfo = New IO.FileInfo(oFilePath)
|
||||
|
||||
' Dim oFileObjectSize As Long = pData.File.FileContents.Length
|
||||
' Dim oFileObjectName As String = oFileObjectInfo.Name
|
||||
' Dim oOriginalExtension As String = pData.File.FileInfoRaw.Extension.Substring(1)
|
||||
|
||||
' Logger.Debug("File Information for [{0}]:", oFileObjectName)
|
||||
' Logger.Debug("Size: [{0}]", oFileObjectSize)
|
||||
' Logger.Debug("Original Extension: [{0}]", oOriginalExtension)
|
||||
' Logger.Debug("Checksum: [{0}]", pData.File.FileChecksum)
|
||||
|
||||
' Try
|
||||
' Using oStream = New IO.FileStream(oFilePath, IO.FileMode.Create, IO.FileAccess.Write)
|
||||
' Logger.Info("Saving file to path [{0}]", oFilePath)
|
||||
' oStream.Write(pData.File.FileContents, 0, oFileObjectSize)
|
||||
' oStream.Flush(True)
|
||||
' oStream.Close()
|
||||
' End Using
|
||||
' Catch ex As Exception
|
||||
' LogAndThrow(ex, $"Could not write file [{oFilePath}] to disk!")
|
||||
' End Try
|
||||
|
||||
' '---------------------------------------------------------------------------
|
||||
|
||||
' Logger.Info("Creating IDB FileObject for ObjectId [{0}].", oObjectId)
|
||||
|
||||
' ' Insert into DB
|
||||
' Dim oSQL As String = $"EXEC PRIDB_NEW_IDBFO
|
||||
' '{oFinalPath}',
|
||||
' '{oFileObjectName}',
|
||||
' '{oOriginalExtension}',
|
||||
' {oFileObjectSize},
|
||||
' '{pData.File.FileChecksum}' ,
|
||||
' '{pData.User.UserName}',
|
||||
' '{oObjectId}',
|
||||
' {oStore.Id}"
|
||||
|
||||
' Dim oResult As Boolean = DatabaseIDB.ExecuteNonQueryWithConnectionObject(oSQL, Connection, ExternalTransaction, Transaction)
|
||||
|
||||
' If oResult = False Then
|
||||
' LogAndThrow("IDB FileObject could not be created!")
|
||||
' End If
|
||||
|
||||
' '---------------------------------------------------------------------------
|
||||
|
||||
' 'TODO: File dates in try catch
|
||||
|
||||
' Dim oSystemAttributes As New Dictionary(Of String, Object) From {
|
||||
' {"OriginFileName", pData.File.FileName},
|
||||
' {"OriginCreationDatetime", pData.File.FileCreatedAt},
|
||||
' {"OriginChangedDatetime", pData.File.FileChangedAt}
|
||||
'}
|
||||
|
||||
' For Each oAttribute As KeyValuePair(Of String, Object) In oSystemAttributes
|
||||
' Try
|
||||
' ' Dont write empty attributes
|
||||
' If oAttribute.Value Is Nothing Then
|
||||
' Continue For
|
||||
' End If
|
||||
|
||||
' Dim oSuccess = Helpers.SetAttributeValue(Connection, Transaction, oObjectId, oAttribute.Key, oAttribute.Value, pData.User.Language, pData.User.UserName)
|
||||
' If oSuccess Then
|
||||
' Logger.Debug("System Attribute [{0}] written with value [{1}]", oAttribute.Key, oAttribute.Value)
|
||||
' Else
|
||||
' Logger.Warn("System attribute value could not be written")
|
||||
' End If
|
||||
' Catch ex As Exception
|
||||
' LogAndThrow(ex, $"System attribute [{oAttribute.Key}] could not be written!")
|
||||
' End Try
|
||||
' Next
|
||||
|
||||
' '---------------------------------------------------------------------------
|
||||
|
||||
' ' Finally, commit the transaction
|
||||
' Transaction?.Commit()
|
||||
|
||||
' Return New UpdateFileResponse(oObjectId)
|
||||
'Catch ex As Exception
|
||||
' Logger.Warn("Error occurred while creating file!")
|
||||
' Logger.Error(ex)
|
||||
|
||||
' Logger.Info("Cleaning up files.")
|
||||
' If Not IsNothing(oFilePath) AndAlso IO.File.Exists(oFilePath) Then
|
||||
' Try
|
||||
' IO.File.Delete(oFilePath)
|
||||
' Catch exInner As Exception
|
||||
' Logger.Warn("Error while cleaning up files.")
|
||||
' Logger.Error(exInner)
|
||||
' End Try
|
||||
' End If
|
||||
|
||||
' Logger.Info("Rolling back transaction.")
|
||||
' Transaction?.Rollback()
|
||||
|
||||
' Return New UpdateFileResponse(ex)
|
||||
|
||||
'End Try
|
||||
End Function
|
||||
|
||||
Private Function TestFileChecksumExists(pChecksum As String) As Long
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user