343 lines
15 KiB
VB.net
343 lines
15 KiB
VB.net
Imports System
|
|
Imports DigitalData.Modules.Logging
|
|
Imports DigitalData.Modules.Windream
|
|
Imports DigitalData.Modules.Config
|
|
Imports System.IO
|
|
Imports System.Text.RegularExpressions
|
|
Imports DigitalData.Modules.Database
|
|
|
|
Module Module1
|
|
Private _ArgumentLength As Integer
|
|
Public _database As MSSQLServer
|
|
Public oRegExArg As String
|
|
Public Function Main(args As String()) As Integer
|
|
Dim oReturnResult As Integer
|
|
Try
|
|
|
|
oReturnResult = 0
|
|
' Console.WriteLine("Starting up WIDig...")
|
|
Dim opath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
|
|
Dim oLogConfig As New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing,
|
|
"Digital Data",
|
|
"WIDigCons")
|
|
|
|
LOGCONFIG = oLogConfig
|
|
LOGGER = LOGCONFIG.GetLogger
|
|
InitUserConfig()
|
|
LOGCONFIG.Debug = CONFIG.Config.LOG_DEBUG
|
|
LOGGER = LOGCONFIG.GetLogger
|
|
Dim oUserPW = GetUserPWPlain()
|
|
LOGGER.Debug("Initializing MainForm....")
|
|
|
|
System.Console.WriteLine($"Starting up WIDig...")
|
|
If Connect2Windream(oUserPW) = True Then
|
|
System.Console.WriteLine($"Windream initialized!")
|
|
If InitDatabase() = True Then
|
|
Load_DB_DAta()
|
|
'Dim oArguments As String() = Environment.GetCommandLineArgs()
|
|
If ParseArgs(args) = True Then
|
|
System.Console.WriteLine($"Parsed all arguments!")
|
|
If StreamORIndexFile() = True Then
|
|
oErrorImport = False
|
|
oReturnResult = 1
|
|
Else
|
|
System.Console.WriteLine($"###Error in StreamIndexFile!####")
|
|
oErrorImport = True
|
|
End If
|
|
Else
|
|
System.Console.WriteLine($"###Error in ParseArgs!####")
|
|
System.Console.WriteLine($"### Error in ParseArgs ####")
|
|
System.Console.WriteLine(oErrorMessage)
|
|
System.Console.WriteLine("### For more information check the log! Press any key to exit! ####")
|
|
System.Console.WriteLine($"####################")
|
|
Console.ReadKey()
|
|
End If
|
|
|
|
|
|
Else
|
|
oErrorMessage = "Could not initialize DB"
|
|
End If
|
|
|
|
Else
|
|
oErrorMessage = "Could not initialize windream"
|
|
|
|
End If
|
|
|
|
|
|
If oErrorParse = True Or oErrorImport = True Then
|
|
System.Console.WriteLine(oErrorMessage)
|
|
System.Console.WriteLine("### For more information check the log! Press any key to exit! ####")
|
|
System.Console.WriteLine($"####################")
|
|
Console.ReadKey()
|
|
oReturnResult = 0
|
|
|
|
Else
|
|
oReturnResult = 1
|
|
End If
|
|
Return oReturnResult
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
Return oReturnResult
|
|
End Try
|
|
|
|
End Function
|
|
Public Sub InitUserConfig()
|
|
Dim oUserAppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
|
|
oUserAppDataPath = oUserAppDataPath & "\Digital Data\WIDigDat"
|
|
Dim oCommonAppDataPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
|
|
CONFIG = New ConfigManager(Of ClassConfig)(LOGCONFIG, oUserAppDataPath, System.AppDomain.CurrentDomain.BaseDirectory, oCommonAppDataPath)
|
|
System.Console.WriteLine($"Config loaded!")
|
|
LOGGER.Info("Config loaded")
|
|
'Settings_Load()
|
|
End Sub
|
|
Public Function InitDatabase() As Boolean
|
|
If CONFIG.Config.ConnectionString.Length = 0 Then
|
|
Return False
|
|
End If
|
|
|
|
Try
|
|
_database = New MSSQLServer(LOGCONFIG, CONFIG.Config.ConnectionString)
|
|
If _database.DBInitialized = True Then
|
|
Return True
|
|
Else
|
|
Return False
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
|
|
Public Function Load_DB_DAta()
|
|
Try
|
|
Dim oSql = "SELECT [REGEX] FROM [TBDD_FUNCTION_REGEX] WHERE FUNCTION_NAME = 'WM-INDEXER-INDEX_GROUP'"
|
|
oRegExArg = _database.GetScalarValue(oSql, 120)
|
|
If oRegExArg.Length = 0 Then
|
|
oRegExArg = 0
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Private Function Connect2Windream(oPW As String)
|
|
Try
|
|
WINDREAM = New Windream(LOGCONFIG, False, CONFIG.Config.WMDrive, CONFIG.Config.WMRelPath, True, CONFIG.Config.WMServer, CONFIG.Config.WMUsername, oPW, CONFIG.Config.Domain)
|
|
If Not IsNothing(WINDREAM) Then
|
|
If WINDREAM.SessionLoggedin = True Then
|
|
LOGGER.Debug("windream initialisiert")
|
|
Return True
|
|
End If
|
|
End If
|
|
Catch ex As Exception
|
|
LOGGER.Warn("CHECKING WMConnectivity: " & ex.Message)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Private Function GetUserPWPlain()
|
|
Try
|
|
Dim PWplainText As String
|
|
Dim wrapper As New ClassEncryption("!35452didalog=")
|
|
If CONFIG.Config.WMUserPW = String.Empty Then
|
|
PWplainText = ""
|
|
Else
|
|
PWplainText = wrapper.DecryptData(CONFIG.Config.WMUserPW)
|
|
End If
|
|
|
|
Return PWplainText
|
|
Catch ex As Exception
|
|
LOGGER.Warn("Error in GetUserPWPlain - the password [" & CONFIG.Config.WMUserPW & "] could not be decrypted", False)
|
|
Return String.Empty
|
|
End Try
|
|
End Function
|
|
Public Function ParseArgs(pArguments As String(), Optional pTest As Boolean = False)
|
|
Dim oINDEXInfoStarted As Boolean = False
|
|
Dim oINDEXInfotemp As String = ""
|
|
Try
|
|
If pArguments.Length <= 3 Then
|
|
_ArgumentLength = pArguments.Length
|
|
LOGGER.Warn($"Insufficient number of arguments [{pArguments.Length}]!")
|
|
System.Console.WriteLine($"Insufficient number of arguments - {Now.ToString}")
|
|
oErrorParse = True
|
|
Return False
|
|
End If
|
|
|
|
Dim ocount As Integer = 0
|
|
For Each oArg As String In pArguments
|
|
LOGGER.Debug($"[{ocount}] {oArg}")
|
|
oArg = oArg.Replace("""", "")
|
|
If oArg.StartsWith("-Source@") Then
|
|
oSourceFile = oArg.Replace("-Source@", "")
|
|
If IsNumeric(oSourceFile) Then
|
|
LOGGER.Info($"SourceFile seems to be a DocID [{oSourceFile}]")
|
|
Dim oSQL = $"SELECT [dbo].[FNDD_GET_WINDREAM_FILE_PATH] ({oSourceFile})"
|
|
oSourceFile = _database.GetScalarValue(oSQL)
|
|
End If
|
|
If System.IO.File.Exists(oSourceFile) = False Then
|
|
LOGGER.Warn($"Parser@Sourcefile - File [{oSourceFile}] is not existing!")
|
|
oErrorMessage &= vbNewLine & $"Parser@Sourcefile - File [{oSourceFile}] is not existing!"
|
|
oErrorParse = True
|
|
Return False
|
|
End If
|
|
|
|
ElseIf oArg.StartsWith("-Mode@") Then
|
|
oMode = oArg.Replace("-Mode@", "").ToUpper
|
|
|
|
ElseIf oArg.StartsWith("-Target@") Then
|
|
oTargetPath = oArg.Replace("-Target@", "")
|
|
If IsNumeric(oTargetPath) Then
|
|
LOGGER.Info($"Target seems to be a DocID [{oTargetPath}]")
|
|
Dim oSQL = $"SELECT [dbo].[FNDD_GET_WINDREAM_FILE_PATH] ({oTargetPath})"
|
|
oSourceFile = _database.GetScalarValue(oSQL)
|
|
End If
|
|
Dim oWMFolder = System.IO.Path.GetDirectoryName(oTargetPath)
|
|
Dim oWindowsPath = oTargetPath
|
|
oExtension = Path.GetExtension(oWindowsPath)
|
|
Dim oNormalizePath = WINDREAM.GetNormalizedPath(oTargetPath)
|
|
If WINDREAM.TestFileExists(oTargetPath) = False Then
|
|
LOGGER.Info($"WMFile [{oTargetPath}] not existing!")
|
|
End If
|
|
If oMode = "IMPV" Then
|
|
Dim oWMCheckPath = WINDREAM.VersionWMFilename(oTargetPath, System.IO.Path.GetExtension(oTargetPath))
|
|
If oNormalizePath.ToUpper <> oWMCheckPath.ToString.ToUpper Then
|
|
LOGGER.Info($"Target [{oNormalizePath}] already existed!! - NewWMFilename [{oWMCheckPath}]")
|
|
oTargetPath = oWMCheckPath
|
|
End If
|
|
End If
|
|
'Checks and creates the path if necessary
|
|
WINDREAM.NewFolder(oTargetPath, oExtension)
|
|
|
|
ElseIf oArg.StartsWith("-WMOT@") Then
|
|
oWMObjecttype = oArg.Replace("-WMOT@", "")
|
|
Dim oexists As Boolean = False
|
|
Dim myWMOTypes = WINDREAM.ObjectTypes
|
|
For Each otype As String In myWMOTypes
|
|
If oWMObjecttype = otype Then
|
|
oexists = True
|
|
Exit For
|
|
End If
|
|
Next
|
|
If oexists = False Then
|
|
LOGGER.Info($"WMObjekttype [{oWMObjecttype}] not existing!!")
|
|
oErrorMessage &= vbNewLine & $"WMObjekttype [{oWMObjecttype}] not existing!!"
|
|
Return False
|
|
oErrorParse = True
|
|
Else
|
|
WMIndices = WINDREAM.GetIndiciesByObjecttype(oWMObjecttype)
|
|
End If
|
|
ElseIf oArg.StartsWith("-index@") Then
|
|
oINDEXInfotemp = oArg
|
|
oINDEXInfoStarted = True
|
|
oINDEXInfotemp = oINDEXInfotemp.Replace("-index@", "")
|
|
|
|
Else
|
|
If oINDEXInfoStarted Then
|
|
oINDEXInfotemp &= " " & oArg
|
|
End If
|
|
End If
|
|
ocount += 1
|
|
Next
|
|
|
|
Dim oIndexparts As String() = oINDEXInfotemp.Split(New String() {"#~#"}, StringSplitOptions.RemoveEmptyEntries)
|
|
|
|
LOGGER.Info($" [{oIndexparts.Length}] Indices transmitted...")
|
|
oIndexArr = oIndexparts
|
|
Return True
|
|
Catch ex As Exception
|
|
LOGGER.Error(ex)
|
|
LOGGER.Warn("Error in ParseArgs:" & vbNewLine & ex.Message)
|
|
oErrorMessage &= vbNewLine & "Error in ParseArgs:" & vbNewLine & ex.Message
|
|
oErrorParse = True
|
|
System.Console.WriteLine($"Error in ParseArgs - {Now.ToString}")
|
|
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Function StreamORIndexFile()
|
|
Try
|
|
Dim oResult As Boolean = False
|
|
If oMode = "IMPV" Then
|
|
oResult = WINDREAM.NewFileStream(oSourceFile, oTargetPath)
|
|
ElseIf oMode = "IMPO" Then
|
|
Dim oDeleted = WINDREAM.RemoveFile(oTargetPath)
|
|
If oDeleted = True Then
|
|
oResult = WINDREAM.NewFileStream(oSourceFile, oTargetPath)
|
|
Else
|
|
LOGGER.Warn($"Mode ImportOverwrite is active - but WMFile could not be deleted!!")
|
|
End If
|
|
ElseIf oMode = "NI" Then
|
|
oResult = True
|
|
End If
|
|
|
|
|
|
If oResult = True Then
|
|
If oMode <> "NI" Then
|
|
LOGGER.Info($"File successfully streamed to windream [{oTargetPath}]! Now indexing...")
|
|
End If
|
|
|
|
For Each oIndex2 As String In oIndexArr
|
|
Dim oIndexInfo() = oIndex2.Split("={")
|
|
Dim oIndexName = oIndexInfo(0)
|
|
Dim oIndexvalue
|
|
Dim r As Regex = New Regex(oRegExArg, RegexOptions.IgnoreCase)
|
|
' ' Match the regular expression pattern against a text string.
|
|
Dim m As Match = r.Match(oIndex2)
|
|
Do While m.Success
|
|
|
|
' oClearedBodyText = oClearedBodyText.Replace(m.Value, "")
|
|
'Dim g As Group = m.Groups(1)
|
|
Dim g1 As Group = m.Groups(2)
|
|
Dim g2 As Group = m.Groups(3)
|
|
|
|
If Not IsNothing(g2.Value) Then
|
|
oIndexvalue = g2.Value
|
|
Console.WriteLine($"Indexvalue: {oIndexvalue}")
|
|
End If
|
|
If Len(oIndexvalue) > 0 Then
|
|
If WMIndex_exists(oIndexName) = True Then
|
|
LOGGER.Info($"Setting Index: oIndexName [{oIndexName}] - oIndexvalue [{oIndexvalue}]")
|
|
If WINDREAM.SetFileIndex(oTargetPath, oIndexName, oIndexvalue, oWMObjecttype) = False Then
|
|
LOGGER.Info($"Index could not be set...")
|
|
If WINDREAM.RemoveFile(oTargetPath) = True Then
|
|
LOGGER.Info($"File deleted after error!")
|
|
End If
|
|
oResult = False
|
|
Exit For
|
|
End If
|
|
Else
|
|
LOGGER.Warn($"Transmitted index with name [{oIndexName}] is not existing in WM Objecttype!")
|
|
If WINDREAM.RemoveFile(oTargetPath) = True Then
|
|
LOGGER.Info($"File deleted after error!")
|
|
End If
|
|
oResult = False
|
|
Exit For
|
|
End If
|
|
End If
|
|
m = m.NextMatch()
|
|
Loop
|
|
Next
|
|
If oResult = True Then
|
|
LOGGER.Info("## All Tasks finished ##")
|
|
oErrorImport = False
|
|
End If
|
|
End If
|
|
Return oResult
|
|
Catch ex As Exception
|
|
LOGGER.Warn($"Unexpected Error in StreamORIndexFile: {ex.Message}")
|
|
LOGGER.Error(ex)
|
|
End Try
|
|
|
|
End Function
|
|
Private Function WMIndex_exists(pIndex As String)
|
|
Dim oexist As Boolean = False
|
|
For Each oWMIndex As String In WMIndices
|
|
If oWMIndex = pIndex Then
|
|
Return True
|
|
End If
|
|
Next
|
|
Return oexist
|
|
End Function
|
|
|
|
End Module
|