Files
SDL/_VERAG_PROG_ALLGEMEIN/Classes/cProgrammeUpdate.vb
2024-10-02 08:59:41 +00:00

255 lines
11 KiB
VB.net

Imports System.Data.SqlClient
Imports System.Reflection
Public Class cProgrammeUpdate
Property pud_progId As Object = Nothing
Property pud_codename As String
Property pud_version As String
Property pud_fileName As String
Property pud_filePathFolder As Object = Nothing
Property pud_datum As Date = Now
Property pud_file_Verion As String
Property pud_file_Date As Date
Property pud_file_Size As Integer
Dim SQL As New SQL
Shared Function getParameterList(UD As cProgrammeUpdate) As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
Dim list As New List(Of VERAG_PROG_ALLGEMEIN.SQLVariable)
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_progId", UD.pud_progId))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_codename", UD.pud_codename))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_version", UD.pud_version))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_fileName", UD.pud_fileName))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_filePathFolder", UD.pud_filePathFolder))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_datum", UD.pud_datum))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_file_Verion", UD.pud_file_Verion))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_file_Date", UD.pud_file_Date))
list.Add(New VERAG_PROG_ALLGEMEIN.SQLVariable("pud_file_Size", UD.pud_file_Size))
Return list
End Function
Public Function SAVE() As Boolean
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList(Me)
Return SQL.doSQLVarList(getInsertCmd, "ADMIN", , list)
End Function
Public Shared Function LOAD_AKT_LIST(pud_progId) As List(Of cProgrammeUpdate)
Dim LIST As New List(Of cProgrammeUpdate)
Try
Using conn As SqlConnection = SQL.GetNewOpenConnectionADMIN()
Using cmd As New SqlCommand("SELECT * FROM tblProgrammeUpdate WHERE pud_progId=@pud_progId AND pud_version=(SELECT TOP (1) pud_version FROM tblProgrammeUpdate WHERE pud_progId=@pud_progId order by pud_version DESC) ", conn)
cmd.Parameters.AddWithValue("@pud_progId", pud_progId)
Dim dr = cmd.ExecuteReader()
While dr.Read
Dim UD As New cProgrammeUpdate
For Each li In cProgrammeUpdate.getParameterList(UD)
Dim propInfo As PropertyInfo = UD.GetType.GetProperty(li.Scalarvariable)
If dr.Item(li.Text) Is DBNull.Value Then
propInfo.SetValue(UD, Nothing)
Else
propInfo.SetValue(UD, dr.Item(li.Text))
End If
Next
LIST.Add(UD)
End While
dr.Close()
End Using
End Using
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
Return LIST
End Function
Public Shared Function SAVE_LIST(pud_progId As Integer, pud_version As String, pud_codename As String, LIST As List(Of cProgrammeUpdate)) As Boolean
Dim SQL As New SQL
SQL.doSQL("DELETE FROM tblProgrammeUpdate WHERE pud_version='" & pud_version & "'", "ADMIN")
SAVE_LIST = True
For Each UD In LIST
UD.pud_progId = pud_progId
UD.pud_version = pud_version
UD.pud_codename = pud_codename
If Not UD.SAVE() Then SAVE_LIST = False
Next
End Function
Public Function getUpdateCmd() As String
Try
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList(Me)
Dim str As String = ""
For Each i In list
If Not i.isPrimaryParam Then
str &= "[" & i.Text & "] = @" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & ","
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
Return (" UPDATE [tblProgrammeUpdate] SET " & str & " WHERE gb_nr=@gb_nr ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
Return ""
End Function
Public Function getInsertCmd() As String
Try
Dim list As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable) = getParameterList(Me)
Dim str As String = ""
Dim values As String = ""
For Each i In list
If Not i.isPrimaryParam Then
str &= "[" & i.Text & "],"
values &= "@" & i.Scalarvariable & "," '.Replace("-", "").Replace(" ", "") & ","
End If
Next
str = str.Substring(0, str.Length - 1) 'wg. ','
values = values.Substring(0, values.Length - 1) 'wg. ','
Return (" INSERT INTO tblProgrammeUpdate (" & str & ") VALUES(" & values & ") ")
Catch ex As Exception
MsgBox("Fehler in der Funktion '" & System.Reflection.MethodInfo.GetCurrentMethod.Name & "'" & vbNewLine & vbNewLine & ex.Message & vbNewLine & vbNewLine & ex.StackTrace)
End Try
Return ""
End Function
Public Shared Function isNewFile(ByRef file As VERAG_PROG_ALLGEMEIN.cProgrammeUpdate, LIST_DEST As List(Of VERAG_PROG_ALLGEMEIN.cProgrammeUpdate)) As Boolean
For Each li In LIST_DEST
If li.pud_filePathFolder = file.pud_filePathFolder And li.pud_fileName = file.pud_fileName And li.pud_file_Size = file.pud_file_Size And li.pud_file_Date = file.pud_file_Date Then
Return False
End If
Next
Return True
End Function
Public Shared Function isOldFile(ByRef file As VERAG_PROG_ALLGEMEIN.cProgrammeUpdate, LIST_SOURCE As List(Of VERAG_PROG_ALLGEMEIN.cProgrammeUpdate)) As Boolean
For Each li In LIST_SOURCE
If li.pud_filePathFolder = file.pud_filePathFolder And li.pud_fileName = file.pud_fileName And li.pud_file_Size = file.pud_file_Size And li.pud_file_Date = file.pud_file_Date Then
Return False
End If
Next
Return True
End Function
Public Shared Function copyProgramLIST(ByRef sourcePfad As String, ByVal destPfad As String, ignoreFilesBeginWith As String()) As Boolean
Try
If destPfad.Trim = "" Then Return False
If sourcePfad.Trim = "" Then Return False
If Not My.Computer.FileSystem.DirectoryExists(sourcePfad) Then
MsgBox("ERROR_COPY_01: Quell-Ordner existiert nicht.", MsgBoxStyle.Critical, "ERROR") : Return False
End If
' MsgBox(destPfad)
If Not My.Computer.FileSystem.DirectoryExists(destPfad) Then
MsgBox("ERROR_COPY_02: Ziel-Ordner existiert nicht.", MsgBoxStyle.Critical, "ERROR") : Return False
End If
Dim LIST_SOURCE As New List(Of VERAG_PROG_ALLGEMEIN.cProgrammeUpdate)
Dim dirNameReplace_SOURCE = ""
Dim DI_SOURCE As New IO.DirectoryInfo(sourcePfad)
RekursivGetFiles(DI_SOURCE, dirNameReplace_SOURCE, LIST_SOURCE, {})
Dim LIST_DEST As New List(Of VERAG_PROG_ALLGEMEIN.cProgrammeUpdate)
Dim dirNameReplace_DEST = ""
Dim DI_DEST As New IO.DirectoryInfo(destPfad)
RekursivGetFiles(DI_DEST, dirNameReplace_DEST, LIST_DEST, ignoreFilesBeginWith)
If LIST_SOURCE.Count = 0 Then
MsgBox("ERROR_COPY_01: Quell-Daten existiert nicht.", MsgBoxStyle.Critical, "ERROR") : Return False
End If
'If LIST_DEST.Count = 0 Then
' MsgBox("ERROR_COPY_02: Ziel-Daten existiert nicht.", MsgBoxStyle.Critical, "ERROR") : Return False
'End If
'ORDNER erstellen:
For Each f In LIST_SOURCE
If If(f.pud_filePathFolder, "") <> "" Then
If Not IO.Directory.Exists(dirNameReplace_DEST & "\" & f.pud_filePathFolder) Then '.Replace("\\", "\")
IO.Directory.CreateDirectory(dirNameReplace_DEST & "\" & f.pud_filePathFolder) '.Replace("\\", "\")
End If
End If
Next
'Löschen der unbenötigten Files:
For Each f In LIST_DEST
If isOldFile(f, LIST_SOURCE) Then
IO.File.Delete(dirNameReplace_DEST & "\" & If(f.pud_filePathFolder, "") & "\" & f.pud_fileName) '.Replace("\\", "\")
End If
Next
If dirNameReplace_DEST = "" Then dirNameReplace_DEST = destPfad
'Kopieren/Überschreiben der neuen Files:
For Each f In LIST_SOURCE
If isNewFile(f, LIST_DEST) Then
Dim s_path = dirNameReplace_SOURCE & "\" & If(f.pud_filePathFolder, "") & "\" & f.pud_fileName '.Replace("\\", "\")
Dim d_path = dirNameReplace_DEST & "\" & If(f.pud_filePathFolder, "") & "\" & f.pud_fileName '.Replace("\\", "\")
d_path = d_path '.replace("\\", "\")
IO.File.Copy(s_path, d_path)
End If
Next
Catch ex As Exception
MsgBox(ex.Message & ex.StackTrace)
Return False
End Try
' If isNewFile(destPfad) Then Return FileCopier(sourcePfad, destPfad)
Return True
End Function
Public Shared Function fileStartsWith(fileName As String, ignoreFilesBeginWith As String())
For Each s In ignoreFilesBeginWith
If fileName.StartsWith(s) Then Return True
Next
Return False
End Function
Public Shared Sub RekursivGetFiles(ByVal oDir As IO.DirectoryInfo, ByRef dirNameReplace As String, ByRef LIST As List(Of VERAG_PROG_ALLGEMEIN.cProgrammeUpdate), ignoreFilesBeginWith As String())
Dim oSubDir As IO.DirectoryInfo
Dim FI As IO.FileInfo
' zunächst alle Dateien des Ordners aufspüren
For Each FI In oDir.GetFiles()
If Not fileStartsWith(FI.Name, ignoreFilesBeginWith) Then 'DATEIEN beginnen mit betimmten Namen, z.B. UPDATER
' Dim FI As New IO.FileInfo(oFile)
If dirNameReplace = "" Then
dirNameReplace = FI.DirectoryName
End If
Dim UD As New VERAG_PROG_ALLGEMEIN.cProgrammeUpdate
UD.pud_fileName = FI.Name
UD.pud_filePathFolder = FI.DirectoryName.Replace(dirNameReplace, "")
If UD.pud_filePathFolder = "" Then UD.pud_filePathFolder = Nothing
UD.pud_file_Size = FI.Length
UD.pud_file_Date = FI.LastWriteTime
UD.pud_file_Verion = "" 'FI.
LIST.Add(UD)
End If
'With oFile
' ListBox1.Items.Add(.DirectoryName & "\" & .Name & vbTab &
' .Length & vbTab & .LastWriteTime)
'End With
Next
' Jetzt alle Unterverzeichnis durchlaufen
' und die Prozedur rekursiv selbst aufrufen
For Each oSubDir In oDir.GetDirectories()
RekursivGetFiles(oSubDir, dirNameReplace, LIST, {})
Next
End Sub
End Class