327 lines
14 KiB
VB.net
327 lines
14 KiB
VB.net
Imports System.Console
|
|
Imports System.IO
|
|
Imports System.Xml
|
|
Imports NLog
|
|
|
|
Module Main
|
|
Private mainDoc As XmlDocument
|
|
Private markDoc As XmlDocument
|
|
Private patentDoc As XmlDocument
|
|
|
|
Private parserMarks As New ParserMarks()
|
|
Private parserPatents As New ParserPatents()
|
|
|
|
Private dpmaPatents As DPMAConnectPatents
|
|
Private dpmaMarks As DPMAConnectMarks
|
|
|
|
Private query As String
|
|
Private version As String
|
|
|
|
Private patents As New List(Of Patent)
|
|
Private propsMarks = New List(Of String) From {
|
|
"RegistrationOfficeCode",
|
|
"RegistrationDate",
|
|
"RegistrationNumber",
|
|
"MarkCurrentStatusCode",
|
|
"MarkVerbalElementText",
|
|
"MarkFeature",
|
|
"ApplicationDate",
|
|
"Applicant",
|
|
"Representative",
|
|
"PublicationDate",
|
|
"ExpiryDate",
|
|
"TerminationDate",
|
|
"OppositionPeriodStartDate",
|
|
"OppositionPeriodEndDate",
|
|
"Classification",
|
|
"ClassificationLong"
|
|
}
|
|
|
|
Private propsPatents = New List(Of String) From {
|
|
"LeadingRegisteredNumber", ' Aktenzeichen
|
|
"Type", ' Schutzrechtsart
|
|
"Status", ' Status
|
|
"Title", ' Titel
|
|
"ICM", 'IPC-Klasse
|
|
"ApplicationDate",
|
|
"PublicationDate",
|
|
"Inventors",
|
|
"Applicants",
|
|
"Abstract"
|
|
}
|
|
|
|
Public DataDir As String = "Data"
|
|
Public LogDir As String = "Log"
|
|
|
|
Public MainFileMarks As String = "DPMA-Marks.xml"
|
|
Public MainFilePatents As String = "DPMA-Patents.xml"
|
|
Public MainPathMarks As String = Path.Combine(DataDir, MainFileMarks)
|
|
Public MainPathPatents As String = Path.Combine(DataDir, MainFilePatents)
|
|
|
|
Public logger As Logger
|
|
Public config As ConfigValues
|
|
Public database As DB
|
|
|
|
|
|
Sub Main()
|
|
Try
|
|
logger = LogManager.GetLogger("Main")
|
|
config = AppConfig.GetConfiguration()
|
|
|
|
database = New DB(config.connstring, config.database)
|
|
version = AppConfig.GetVersion()
|
|
|
|
logger.Info("{0} (Version {1}) started", My.Application.Info.Title, version)
|
|
|
|
If Not Directory.Exists(DataDir) Then
|
|
Directory.CreateDirectory(DataDir)
|
|
End If
|
|
|
|
If Not Directory.Exists(LogDir) Then
|
|
Directory.CreateDirectory(LogDir)
|
|
End If
|
|
|
|
Dim marks As New List(Of Mark)
|
|
Dim patents As New List(Of Patent)
|
|
|
|
Dim updatedMarks As Integer = 0
|
|
Dim addedMarks As Integer = 0
|
|
Dim failedMarks As Integer = 0
|
|
|
|
Dim updatedPatents As Integer = 0
|
|
Dim addedPatents As Integer = 0
|
|
Dim failedPatents As Integer = 0
|
|
|
|
' Abfrage starten
|
|
If config.searchType.Contains("M") Then
|
|
marks = ImporterMarks.FromDPMA()
|
|
|
|
Dim formId As Integer = database.GetFormIdFor("Marken")
|
|
|
|
|
|
For Each m As Mark In marks
|
|
|
|
logger.Debug("Mark Verbal Element: {0}", m.MarkVerbalElementText)
|
|
|
|
Dim mainControlId As Integer
|
|
|
|
' Das eindeutige Control suchen
|
|
mainControlId = database.GetControlId(formId)
|
|
|
|
' Über mainControlId überprüfen, ob marke vorhanden
|
|
Dim markExists As Integer = database.GetRecordId(mainControlId, m.ApplicationNumber)
|
|
logger.Debug("Mark {0} exists: {1}", markExists, CBool(markExists))
|
|
|
|
' Wenn noch nicht vorhanden
|
|
If (markExists = 0) Then
|
|
Try
|
|
' Einen Record erstellen
|
|
Dim recordId = database.InsertRecord(formId)
|
|
logger.Info("New record created with GUID: " & recordId)
|
|
' Den Leit-Wert einfügen für mainControlId
|
|
Dim valueId = database.InsertValue(mainControlId, recordId, m.ApplicationNumber)
|
|
addedMarks = addedMarks + 1
|
|
logger.Debug("Value inserted - Property: {0}, Value: {1}, ControlId: {2}", "ApplicationNumber", m.ApplicationNumber, mainControlId)
|
|
|
|
' alle anderen properties zu dieser marke einfügen
|
|
For Each prop As String In propsMarks
|
|
' ControlID für die aktuelle property holen
|
|
Dim controlId = database.GetControlId(formId, prop)
|
|
' Wert für die aktuelle property holen
|
|
Dim value = database.GetPropertyMark(m, prop)
|
|
|
|
If controlId = 0 Then
|
|
logger.Warn("Value NOT inserted - ControlId for Property {0} could not be found.")
|
|
Continue For
|
|
End If
|
|
|
|
' Wert einfügen
|
|
database.InsertValue(controlId, recordId, value)
|
|
|
|
' Wenn Bildmarke oder Wort- und Bildmarke, Bild einfügen
|
|
If prop = "MarkFeature" Then
|
|
If value = "wort-bildmarke" Or value = "bildmarke" Then
|
|
Dim imageControlId = database.GetControlId(formId, "MarkImage")
|
|
Dim bimage() As Byte = Convert.FromBase64String(m.Image.BinaryImage)
|
|
logger.Debug("Image inserted, RecordId: {0}")
|
|
database.InsertImage(bimage, imageControlId, recordId)
|
|
End If
|
|
End If
|
|
|
|
logger.Debug("Value inserted - Property: {0}, Value: {1}, ControlId: {2}", prop, value, controlId)
|
|
Next
|
|
|
|
addedMarks += 1
|
|
Catch ex As Exception
|
|
logger.Error($"Exception while ADDING mark {m.ApplicationNumber}: {ex.Message}")
|
|
failedMarks += 1
|
|
|
|
Continue For
|
|
End Try
|
|
Else
|
|
Try
|
|
' Marke aktualisieren
|
|
Dim recordId As Integer = markExists
|
|
Dim propsChanged = False
|
|
|
|
logger.Info("Existing Record updated with GUID: {0}", recordId)
|
|
|
|
For Each prop As String In propsMarks
|
|
' ControlID für die aktuelle property holen
|
|
Dim controlId = database.GetControlId(formId, prop)
|
|
' Wert für die aktuelle property holen
|
|
Dim value = database.GetPropertyMark(m, prop)
|
|
|
|
' Wert aktualisieren
|
|
database.UpdateValue(controlId, recordId, value)
|
|
|
|
' Wenn Bildmarke oder Wort- und Bildmarke, Bild aktualisieren
|
|
If prop = "MarkFeature" Then
|
|
If value = "wort-bildmarke" Or value = "bildmarke" Then
|
|
Dim imageControlId = database.GetControlId(formId, "MarkImage")
|
|
Dim bimage() As Byte = Convert.FromBase64String(m.Image.BinaryImage)
|
|
database.UpdateImage(bimage, imageControlId, recordId)
|
|
End If
|
|
End If
|
|
|
|
logger.Debug("Value updated - Property: {0}, ControlId: {1}", prop, controlId)
|
|
|
|
'Dim hasChanged As Boolean = Not db.IsEqual(controlId, recordId, value)
|
|
'logger.Debug("Value for {0} has changed", recordId)
|
|
|
|
'If hasChanged Then
|
|
' propsChanged = True
|
|
' ' Wert aktualisieren
|
|
' db.UpdateValue(controlId, recordId, value)
|
|
' logger.Debug("Value updated - Property: {0}, ControlId: {1}", prop, controlId)
|
|
'End If
|
|
Next
|
|
|
|
updatedMarks += 1
|
|
Catch ex As Exception
|
|
logger.Error($"Exception while UPDATING mark {m.ApplicationNumber}: {ex.Message}")
|
|
failedMarks += 1
|
|
|
|
Continue For
|
|
End Try
|
|
End If
|
|
Next
|
|
|
|
logger.Info($"{addedMarks} Marks added, {updatedMarks} updated, {failedMarks} failed.")
|
|
End If
|
|
|
|
If config.searchType.Contains("P") Then
|
|
patents = ImporterPatents.FromDPMA()
|
|
|
|
Dim formId As Integer = database.GetFormIdFor("Patente")
|
|
|
|
For Each p In patents
|
|
|
|
logger.Debug("Patent Title: {0}", p.Title)
|
|
|
|
Dim mainControlId As Integer
|
|
|
|
' Das eindeutige Control suchen
|
|
mainControlId = database.GetControlId(formId, "LeadingRegisteredNumber")
|
|
|
|
' Über mainControlId überprüfen, ob patent vorhanden
|
|
Dim patentExists As Integer = database.GetRecordId(mainControlId, p.LeadingRegisteredNumber)
|
|
logger.Debug("Patent {0} exists: {1}", patentExists, CBool(patentExists))
|
|
|
|
If (patentExists = 0) Then
|
|
Try
|
|
' Einen Record erstellen
|
|
Dim recordId = database.InsertRecord(formId)
|
|
logger.Info("New record created with GUID: " & recordId)
|
|
' Den Leit-Wert einfügen für mainControlId
|
|
Dim valueId = database.InsertValue(mainControlId, recordId, p.LeadingRegisteredNumber)
|
|
addedPatents = addedPatents + 1
|
|
logger.Debug("Value inserted - Property: {0}, Value: {1}, ControlId: {2}", "LeadingRegisteredNumber", p.LeadingRegisteredNumber, mainControlId)
|
|
|
|
' alle anderen properties zu dieses patents einfügen
|
|
For Each prop As String In propsPatents
|
|
' ControlID für die aktuelle property holen
|
|
Dim controlId = database.GetControlId(formId, prop)
|
|
' Wert für die aktuelle property holen
|
|
Dim value = database.GetPropertyPatent(p, prop)
|
|
|
|
If controlId = 0 Then
|
|
logger.Warn("Value NOT inserted - ControlId for Property {0} could not be found.")
|
|
Continue For
|
|
End If
|
|
|
|
' Wert einfügen
|
|
database.InsertValue(controlId, recordId, value)
|
|
|
|
logger.Debug("Value inserted - Property: {0}, Value: {1}, ControlId: {2}", prop, value, controlId)
|
|
Next
|
|
|
|
addedPatents += 1
|
|
Catch ex As Exception
|
|
logger.Error($"Exception while ADDING patent {p.LeadingRegisteredNumber}: {ex.Message}")
|
|
failedPatents += 1
|
|
|
|
Continue For
|
|
End Try
|
|
Else
|
|
Try
|
|
' Patent aktualisieren
|
|
Dim recordId As Integer = patentExists
|
|
Dim propsChanged = False
|
|
|
|
logger.Info("Existing Record updated with GUID: {0}", recordId)
|
|
|
|
For Each prop As String In propsPatents
|
|
' ControlID für die aktuelle property holen
|
|
Dim controlId = database.GetControlId(formId, prop)
|
|
' Wert für die aktuelle property holen
|
|
Dim value = database.GetPropertyPatent(p, prop)
|
|
|
|
If controlId = 0 Then
|
|
logger.Warn("Value NOT updated - ControlId for Property {0} could not be found.")
|
|
Continue For
|
|
End If
|
|
|
|
' Wert aktualisieren
|
|
database.UpdateValue(controlId, recordId, value)
|
|
|
|
logger.Debug("Value updated - Property: {0}, ControlId: {1}", prop, controlId)
|
|
Next
|
|
|
|
updatedPatents += 1
|
|
Catch ex As Exception
|
|
logger.Error($"Exception while UPDATING patent {p.LeadingRegisteredNumber}: {ex.Message}")
|
|
failedPatents += 1
|
|
|
|
Continue For
|
|
End Try
|
|
End If
|
|
Next
|
|
|
|
logger.Info($"{addedPatents} Marks added, {updatedPatents} updated, {failedPatents} failed.")
|
|
End If
|
|
|
|
logger.Debug("=================== IMPORT END ===================")
|
|
ReadLine()
|
|
Catch ex As Exception
|
|
logger.Error("==================================================")
|
|
logger.Error("=================== ERROR ========================")
|
|
logger.Error("==================================================")
|
|
logger.Error("An Error occurred: {0}", GetExceptionInfo(ex))
|
|
End Try
|
|
End Sub
|
|
|
|
Public Function GetExceptionInfo(ex As Exception) As String
|
|
Dim Result As String
|
|
Dim hr As Integer = Runtime.InteropServices.Marshal.GetHRForException(ex)
|
|
Result = ex.GetType.ToString & "(0x" & hr.ToString("X8") & "): " & ex.Message & Environment.NewLine & ex.StackTrace & Environment.NewLine
|
|
Dim st As StackTrace = New StackTrace(ex, True)
|
|
For Each sf As StackFrame In st.GetFrames
|
|
If sf.GetFileLineNumber() > 0 Then
|
|
Result &= "Line:" & sf.GetFileLineNumber() & " Filename: " & IO.Path.GetFileName(sf.GetFileName) & Environment.NewLine
|
|
End If
|
|
Next
|
|
Return Result
|
|
End Function
|
|
End Module
|