| <?xml version="1.0" encoding="UTF-8"?> |
| <!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> |
| <!--*********************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| ***********************************************************--> |
| <script:module xmlns:script="http://openoffice.org/2000/script" script:name="FilesModul" script:language="StarBasic">Option Explicit |
| |
| Public AbsTemplateFound as Integer |
| Public AbsDocuFound as Integer |
| Public oLogDocument as Object |
| Public oLogTable as Object |
| Public bLogExists as Boolean |
| Public sComment as String |
| Public MaxCollectIndex as Integer |
| Public bInsertRow as Boolean |
| Public sLogUrl as String |
| Public sCurPassWord as String |
| Public FileCount as Integer |
| Public XMLTemplateCount as Integer |
| Public PathCollection(7,3) as String |
| Public bIsFirstLogTable as Boolean |
| Public bFilterTracerIsinsideTable as Boolean |
| |
| |
| Function ReadCollectionPaths(FilesList() as String, sFilterName() as String) |
| Dim FilterIndex as Integer |
| Dim bRecursive as Boolean |
| Dim SearchDir as String |
| Dim i as Integer |
| Dim n as Integer |
| Dim a as Integer |
| Dim s as Integer |
| Dim t as Integer |
| Dim sFileContent() as String |
| Dim NewList(0,1) as String |
| Dim Index as Integer |
| Dim CurFileName as String |
| Dim CurExtension as String |
| Dim CurFileContent as String |
| Dim XMLTemplateContentList() as String |
| Dim bIsTemplatePath as Boolean |
| Dim MaxIndex as Integer |
| Dim NewContentList() as String |
| Dim XMLTemplateContentString as String |
| Dim ApplIndex as Integer |
| Dim bAssignFileName as Boolean |
| bInterruptSearch = False |
| For i = 0 To MaxCollectIndex |
| SearchDir = PathCollection(i,0) |
| bRecursive = PathCollection(i,1) |
| sFileContent() = ArrayoutofString(PathCollection(i,2), "|") |
| NewList() = ReadDirectories(SearchDir, bRecursive, False, False, sFileContent(), "") |
| If InterruptProcess Then |
| ReadCollectionPaths() = False |
| Exit Function |
| End If |
| If Ubound(NewList()) > -1 Then |
| bIsTemplatePath = FieldInList("vor", sFileContent) |
| If bIsTemplatePath Then |
| XMLTemplateContentString = PathCollection(i,3) |
| XMLTemplateContentList() = ArrayoutofString(XMLTemplateContentString, "|") |
| If Ubound(XMLTemplateContentList()) > -1 Then |
| MaxIndex = Ubound(NewList()) |
| ReDim Preserve NewList(MaxIndex, 1) as String |
| ReDim Preserve NewContentList(MaxIndex) as String |
| a = -1 |
| For n = 0 To MaxIndex |
| bAssignFileName = True |
| If InterruptProcess() Then |
| ReadCollectionPaths() = False |
| Exit Function |
| End If |
| CurFileContent = "" |
| CurFileName = NewList(n,0) |
| If (FieldInList(NewList(n,1), XMLTemplateList())) Then |
| CurFileContent = GetRealFileContent(CurFileName) |
| t = SearchArrayforPartString(CurFileContent, XMLTemplateContentList()) |
| bAssignFileName = (t > -1) |
| If bAssignFileName Then |
| CurFileContent = XMLTemplateContentList(t) |
| End If |
| NewList(n,1) = CurFileContent |
| End If |
| CurExtension = NewList(n,1) |
| If bAssignFileName Then |
| If a < n Then |
| a = a + 1 |
| NewList(a,0) = CurFileName |
| NewList(a,1) = CurExtension |
| If CurFileContent = "" Then |
| CurFileContent = CurExtension |
| End If |
| ApplIndex = GetApplicationIndex(CurFileContent, sFiltername()) |
| NewContentList(a) = ApplIndex |
| End If |
| End If |
| Next n |
| If a < MaxIndex And a > -1 Then |
| ReDim Preserve NewList(a, 1) as String |
| End If |
| If a > -1 Then |
| AddListtoFilesList(FilesList(), NewList(), NewContentList()) |
| End If |
| End If |
| Else |
| MaxIndex = Ubound(NewList()) |
| ReDim Preserve NewContentList(MaxIndex) as String |
| For s = 0 To MaxIndex |
| CurExtension = NewList(s,1) |
| NewContentList(s) = GetApplicationIndex(CurExtension, sFiltername()) |
| Next s |
| AddListtoFilesList(FilesList(), NewList(), NewContentList()) |
| End If |
| End If |
| Next i |
| ReadCollectionPaths() = Ubound(FilesList()) > -1 |
| End Function |
| |
| |
| Function GetApplicationIndex(CurFileContent as String, sFilterName() as String) as Integer |
| Dim Index as Integer |
| Dim i as Integer |
| Index = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0) |
| If Index >= MaxApplCount Then |
| Index = Index - MaxApplCount |
| End If |
| For i = 0 To MaxApplCount - 1 |
| If Applications(i, SBAPPLKEY) = Index Then |
| GetApplicationIndex() = i |
| Exit Function |
| End If |
| Next i |
| GetApplicationIndex() = - 1 |
| End Function |
| |
| |
| Function InterruptProcess() as Boolean |
| If bCancelTask Or RetValue = 0 Then |
| bConversionIsRunning = False |
| InterruptProcess() = True |
| Exit Function |
| End if |
| InterruptProcess() = False |
| End Function |
| |
| |
| Sub AddCollectionPath(ApplIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer) |
| MaxCollectIndex = MaxCollectIndex + 1 |
| PathCollection(MaxCollectIndex, 0) = Applications(ApplIndex, DocIndex) |
| PathCollection(MaxCollectIndex, 1) = Applications(ApplIndex, RecursiveIndex) |
| AddFilterNameToPathItem(ApplIndex, MaxCollectIndex, sFiltername(), DistIndex) |
| End Sub |
| |
| |
| Function SetExtension(LocExtension) as String |
| if (Instr(LocExtension, "vnd.sun.xml.impress")) > 0 then |
| SetExtension() = "vor|sti|std" |
| elseif (Instr(LocExtension, "vnd.sun.xml.writer")) > 0 then |
| SetExtension() = "vor|stw" |
| elseif (Instr(LocExtension, "vnd.sun.xml.calc")) > 0 then |
| SetExtension() = "vor|stc" |
| elseif (Instr(LocExtension, "vnd.sun.xml.draw")) > 0 then |
| SetExtension() = "vor|std|sti" |
| endif |
| End Function |
| |
| Sub AddFilterNameToPathItem(ApplIndex as Integer, CollectIndex as Integer, sFiltername() as String, DistIndex as Integer) |
| Dim iKey as Integer |
| Dim CurListString as String |
| Dim LocExtension as String |
| Dim LocContentString as String |
| Dim LocXMLTemplateContent as String |
| iKey = Applications(ApplIndex, SBAPPLKEY) |
| CurListString = PathCollection(CollectIndex, 2) |
| LocExtension = sFilterName(iKey +DistIndex, 0) |
| If Len(LocExtension) > SBMAXEXTENSIONLENGTH Then ' 7 == Length of two extensions like 'sda|sdd |
| LocExtension = SetExtension(LocExtension) |
| LocContentString = sFilterName(iKey +DistIndex, 0) |
| LocContentString = ReplaceString(LocContentString, "|", ";") |
| LocXMLTemplateContent = PathCollection(CollectIndex, 3) |
| If LocXMLTemplateContent = "" Then |
| LocXMLTemplateContent = LocContentString |
| Else |
| LocXMLTemplateContent = LocXMLTemplateContent & "|" & LocContentString |
| End If |
| PathCollection(CollectIndex, 3) = LocXMLTemplateContent |
| End If |
| If CurListString = "" Then |
| PathCollection(CollectIndex, 2) = LocExtension |
| Else |
| If Instr(CurListString, LocExtension) = 0 Then |
| PathCollection(CollectIndex, 2) = CurListString & "|" & LocExtension |
| End If |
| End If |
| End Sub |
| |
| |
| Sub CheckIfToAddPathToCollection(ApplIndex as Integer, bDoConvertIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer) |
| Dim CollectIndex as Integer |
| Dim bCheckDocuType as Boolean |
| bCheckDocuType = Applications(ApplIndex, bDoConvertIndex) |
| If bCheckDocuType Then |
| CollectIndex = GetIndexInMultiArray(PathCollection(), Applications(ApplIndex,DocIndex), 0) |
| If (CollectIndex >-1) Then |
| If Applications(ApplIndex, RecursiveIndex) <> PathCollection(CollectIndex, 1) Then |
| AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex) |
| Else |
| AddFilterNameToPathItem(ApplIndex, CollectIndex, sFilterName(), DistIndex) |
| End If |
| Else |
| AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex) |
| End If |
| End If |
| End Sub |
| |
| |
| Sub CollectPaths(sFiltername() as String) |
| Dim i as Integer |
| Dim XMLTemplateContentString as String |
| MaxCollectIndex = -1 |
| For i = 0 To ApplCount-1 |
| CheckIfToAddPathToCollection(i, SBDOCCONVERT, SBDOCSOURCE, SBDOCRECURSIVE, sFilterName(), 0) |
| Next i |
| XMLTemplateCount = 0 |
| XMLTemplateContentString = "" |
| For i = 0 To ApplCount-1 |
| If WizardMode = SBXMLMODE Then |
| XMLTemplateCount = XMLTemplateCount + 1 |
| End If |
| CheckIfToAddPathToCollection(i, SBTEMPLCONVERT, SBTEMPLSOURCE, SBTEMPLRECURSIVE, sFilterName(), MaxApplCount) |
| Next i |
| End Sub |
| |
| |
| Sub ConvertAllDocuments(sFilterName() as String) |
| Dim FileProperties(1) as new com.sun.star.beans.PropertyValue |
| Dim PWFileProperties(2) as New com.sun.star.beans.PropertyValue |
| Dim WriterWebProperties(0) as new com.sun.star.beans.PropertyValue |
| Dim OpenProperties(4) as new com.sun.star.beans.PropertyValue |
| Dim oInteractionHandler as Object |
| Dim InteractionTypes(0) as Long |
| Dim FilesList(0,2) as String |
| Dim sViewPath as String |
| Dim i as Integer |
| Dim FilterIndex as Integer |
| Dim sSourceUrl as String |
| Dim CurFilename as String |
| Dim oDocument as Object |
| Dim sExtension as String |
| Dim OldExtension as String |
| Dim CurFound as Integer |
| Dim TotFound as Integer |
| Dim TargetStemDir as String |
| Dim SourceStemDir as String |
| Dim TargetDir as String |
| Dim sTargetUrl as String |
| Dim CurFilterName as String |
| Dim ApplIndex as Integer |
| Dim Index as Integer |
| Dim bIsDocument as Boolean |
| Dim bDoSave as Boolean |
| Dim sCurFileExists as String |
| Dim MaxFileIndex as Integer |
| Dim bContainsBasicMacro as Boolean |
| Dim bIsPassWordProtected as Boolean |
| Dim iOverwrite as Integer |
| Dim sMimeTypeorExtension as String |
| Dim sPrevMimeTypeorExtension as String |
| bConversionisrunning = True |
| InteractionTypes(0) = com.sun.star.task.PasswordRequestMode.PASSWORD_REENTER |
| oInteractionHandler = createUnoService("com.sun.star.task.InteractionHandler") |
| oInteractionHandler.initialize(InteractionTypes()) |
| iGeneralOverwrite = SBOVERWRITEUNDEFINED |
| bConversionIsRunning = True |
| bLogExists = false |
| AbsTemplateFound = 0 |
| AbsDocuFound = 0 |
| CollectPaths(sFiltername()) |
| If Not ReadCollectionPaths(FilesList(), sFilterName()) Then |
| TotFound = 0 |
| SetProgressDisplay(0) |
| bConversionisrunning = false |
| FinalizeDialogButtons() |
| Exit Sub |
| End If |
| TotFound = Ubound(FilesList()) + 1 |
| If FilesList(0,0) = "" Then ' Querying the number of fields in a multidimensionl Array is unsecure |
| TotFound = 0 ' because it will return the value 0 (and not -1) even when the Array is empty |
| SetProgressDisplay(0) |
| End If |
| BubbleSortList(FilesList(), true) |
| If TotFound > 0 Then |
| CreateLogDocument(OpenProperties()) |
| InitializeProgressPage(ImportDialog) |
| OpenProperties(0).Name = "Hidden" |
| OpenProperties(0).Value = True |
| OpenProperties(1).Name = "AsTemplate" |
| OpenProperties(1).Value = False |
| OpenProperties(2).Name = "MacroExecutionMode" |
| OpenProperties(2).Value = com.sun.star.document.MacroExecMode.NEVER_EXECUTE |
| OpenProperties(3).Name = "UpdateDocMode" |
| OpenProperties(3).Value = com.sun.star.document.UpdateDocMode.NO_UPDATE |
| OpenProperties(4).Name = "InteractionHandler" |
| OpenProperties(4).Value = oInteractionHandler |
| MaxFileIndex = Ubound(FilesList(),1) |
| FileCount = 0 |
| For i = 0 To MaxFileIndex |
| sComment = "" |
| If InterruptProcess() Then |
| Exit For |
| End If |
| bDoSave = True |
| sSourceUrl = FilesList(i,0) |
| sPrevMimeTypeorExtension = sMimeTypeorExtension |
| sMimeTypeorExtension = FilesList(i,1) |
| CurFiltername = GetFilterName(sMimeTypeorExtension, sFilterName(), sExtension, FilterIndex) |
| ApplIndex = FilesList(i,2) |
| If sMimeTypeorExtension <> sPrevMimeTypeorExtension Then |
| CreateLogTable(ApplIndex, sMimeTypeOrExtension, sFiltername() |
| End If |
| If ApplIndex > Ubound(Applications) or (ApplIndex < 0) Then |
| Msgbox "Applicationindex out of bounds:" & sSourcUrl |
| End If |
| sViewPath = ConvertFromUrl(sSourceUrl) ' CutPathView(sSourceUrl, 70) |
| ImportDialog.LabelCurDocument.Label = Str(i+1) & "/" & MaxFileIndex + 1 & " (" & sViewPath & ")" |
| Select Case lcase(sExtension) |
| Case "odt", "ods", "odp", "odg", "odm", "odf" |
| SourceStemDir = RTrimStr(Applications(ApplIndex,SBDOCSOURCE), "/") |
| TargetStemDir = RTrimStr(Applications(ApplIndex,SBDOCTARGET), "/") |
| Case Else ' Templates and Helper-Applications remain |
| SourceStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLSOURCE), "/") |
| TargetStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLTARGET), "/") |
| End Select |
| sTargetUrl = ReplaceString(sSourceUrl, TargetStemDir, SourceStemDir) |
| CurFilename = GetFileNameWithoutExtension(sTargetUrl, "/") |
| OldExtension = GetFileNameExtension(sTargetUrl) |
| sTargetUrl = RTrimStr(sTargetUrl, OldExtension) |
| sTargetUrl = sTargetUrl & sExtension |
| TargetDir = RTrimStr(sTargetUrl, CurFilename & "." & sExtension) |
| If (oUcb.Exists(sTargetUrl)) Then |
| If (iGeneralOverwrite <> SBOVERWRITEALWAYS) Then |
| If (iGeneralOverwrite = SBOVERWRITEUNDEFINED) Then |
| ShowOverwriteAllDialog(sTargetUrl, sTitle) |
| bDoSave = (iGeneralOverwrite = SBOVERWRITEQUERY) Or (iGeneralOverwrite = SBOVERWRITEALWAYS) |
| Elseif iGeneralOverwrite = SBOVERWRITENEVER Then |
| bDoSave = False |
| ElseIf ((iGeneralOverWrite = SBOVERWRITEQUERY) OR (iGeneralOverwrite = SBOVERWRITECANCEL)) Then |
| ' Todo: According to AS there might come a new feature that storeasUrl could possibly rise a UI dialog. |
| ' In this case my own UI becomes obsolete |
| sCurFileExists = ReplaceString(sFileExists, ConvertFromUrl(sTargetUrl), "<1>") |
| sCurFileExists = ReplaceString(sCurFileExists, chr(13), "<CR>") |
| iOverWrite = Msgbox (sCurFileExists, 32 + 3, sTitle) |
| Select Case iOverWrite |
| Case 1 ' OK |
| ' In the FileProperty-Bean this is already default |
| bDoSave = True |
| Case 2 ' Abort |
| CancelTask(False) |
| bDoSave = False |
| Case 7 ' No |
| bDoSave = False |
| End Select |
| End If |
| End If |
| End If |
| If bDoSave Then |
| If Not oUcb.Exists(TargetDir) Then |
| bDoSave = CreateFolder(TargetDir) |
| End If |
| If bDoSave Then |
| oDocument = StarDesktop.LoadComponentFromURL(sSourceUrl, "_default", 0, OpenProperties()) |
| If Not IsNull(oDocument) Then |
| InsertSourceUrlToLogDocument(sSourceUrl, "") |
| bIsPassWordProtected = CheckPassWordProtection(oDocument) |
| CheckIfMacroExists(oDocument.BasicLibraries, sComment) |
| On Local Error Goto NOSAVING |
| If bIsPassWordProtected Then |
| PWFileProperties(0).Name = "FilterName" |
| PWFileProperties(0).Value = CurFilterName |
| PWFileProperties(1).Name = "Overwrite" |
| PWFileProperties(1).Value = True |
| PWFileProperties(2).Name = "Password" |
| PWFileProperties(2).Value = sCurPassWord |
| oDocument.StoreAsUrl(sTargetUrl, PWFileProperties()) |
| Else |
| FileProperties(0).Name = "FilterName" |
| FileProperties(0).Value = CurFilterName |
| FileProperties(1).Name = "Overwrite" |
| FileProperties(1).Value = True |
| oDocument.StoreAsUrl(sTargetUrl,FileProperties()) |
| End If |
| ' Todo: Make sure that an errorbox pops up when saving fails |
| NOSAVING: |
| If Err <> 0 Then |
| sCurcouldnotsaveDocument = ReplaceString(scouldnotsaveDocument, ConvertFromUrl(sTargetUrl), "<1>") |
| sComment = ConcatComment(sComment, sCurCouldnotsaveDocument) |
| Resume LETSGO |
| LETSGO: |
| Else |
| FileCount = FileCount + 1 |
| End If |
| oDocument.Dispose() |
| InsertTargetUrlToLogDocument(sTargetUrl, sComment, ApplIndex) |
| Else |
| sCurcouldnotopenDocument = ReplaceString(scouldnotopenDocument, ConvertFromUrl(sSourceUrl), "<1>") |
| sComment = ConcatComment(sComment, sCurCouldnotopenDocument) |
| InsertSourceUrlToLogDocument(sSourceUrl, sComment) |
| End If |
| End If |
| End If |
| Next i |
| End If |
| AddLogStatistics() |
| FinalizeDialogButtons() |
| bConversionIsRunning = False |
| Exit Sub |
| RTError: |
| Msgbox sRTErrorDesc, 16, sRTErrorHeader |
| End Sub |
| |
| |
| |
| Sub AddListtoFilesList(FirstList(), SecList(), NewContentList() as String) |
| Dim sLocExtension as String |
| Dim FirstStart as Integer |
| Dim FirstEnd as Integer |
| Dim i as Integer |
| Dim s as Integer |
| If FirstList(0,0) = "" Then |
| FirstStart = Ubound(FirstList(),1) |
| Else |
| FirstStart = Ubound(FirstList(),1) + 1 |
| End If |
| FirstEnd = FirstStart + Ubound(SecList(),1) |
| ReDim Preserve FirstList(FirstEnd,2) |
| s = 0 |
| For i = FirstStart To FirstEnd |
| FirstList(i,0) = SecList(s,0) |
| FirstList(i,1) = SecList(s,1) |
| sLocExtension = lcase(FirstList(i,1)) |
| Select Case sLocExtension |
| Case "sdw", "sdc", "sda", "sdd", "smf", "sgl", "doc", "xls", "ppt", "sxi" , "sxw" , "sxd" , "sxg" , "sxm" , "sxc" , "pps" , "docx" , "docm" , "xlsx" , "xlsm" , "xlsb" , "pptx" , "pptm" |
| AbsDocuFound = AbsDocuFound + 1 |
| Case else |
| AbsTemplateFound = AbsTemplateFound + 1 |
| End Select |
| FirstList(i,2) = CStr(NewContentList(s)) |
| s = s + 1 |
| Next i |
| SetProgressDisplay(Ubound(FirstList()) + 1) |
| End Sub |
| |
| |
| |
| Function GetTargetTemplatePath(Index as Integer) |
| Select Case WizardMode |
| Case SBMICROSOFTMODE |
| GetTargetTemplatePath() = SOTemplatePath & "/" & sTemplateGroupName |
| Case SBXMLMODE |
| If Index = 3 Then |
| ' Helper Application |
| GetTargetTemplatePath = SOWorkPath |
| Else |
| GetTargetTemplatePath = SOTemplatePath |
| End If |
| End Select |
| End Function |
| |
| |
| ' Retrieves the second value for a next to 'SearchString' in |
| ' a two-dimensional string-Array |
| Function GetFilterName(sMimetypeorExtension as String, sFilterName(), sExtension as string, FilterIndex as Integer) as String |
| Dim i as Integer |
| Dim MaxIndex as Integer |
| Dim sLocFilterlist() as String |
| For i = 0 To Ubound(sFiltername(),1) |
| If Instr(1,sFilterName(i,0),sMimeTypeOrExtension) <> 0 Then |
| sLocFilterList() = ArrayoutofString(sFiltername(i,0),"|", MaxIndex) |
| If MaxIndex = 0 Then |
| sExtension = sFiltername(i,2) |
| GetFilterName = sFilterName(i,1) |
| Else |
| Dim b as Integer |
| Dim sLocExtensionList() as String |
| b = SearchArrayForPartString(sMimetypeOrExtension, sLocFilterList()) |
| sLocFilterList() = ArrayoutofString(sFiltername(i,1),"|", MaxIndex) |
| GetFilterName = sLocFilterList(b) |
| sLocExtensionList() = ArrayoutofString(sFilterName(i,2), "|", MaxIndex) |
| sExtension = sLocExtensionList(b) |
| End If |
| Exit For |
| End If |
| Next |
| FilterIndex = i |
| End Function |
| |
| |
| Function SearchArrayforPartString(SearchString as String, LocList()) as Integer |
| Dim i as Integer |
| Dim a as Integer |
| Dim StringList() as String |
| For i = Lbound(LocList(),1) to Ubound(LocList(),1) |
| StringList() = ArrayoutofString(LocList(i), "|") |
| For a = 0 To Ubound(StringList()) |
| If (Instr(1, SearchString, StringList(a)) <> 0) Then |
| SearchArrayForPartString() = i |
| Exit Function |
| End If |
| Next a |
| Next i |
| SearchArrayForPartString() = -1 |
| End Function |
| |
| |
| Sub CreateLogTable(ApplIndex as Integer, CurFileContent as String, sFilterName() as String) |
| Dim oLogCursor as Object |
| Dim oLogRows as Object |
| Dim FilterIndex as Integer |
| Dim sDocumentType as String |
| Dim oTextCursor |
| Dim oCell |
| If Not bLogExists Then |
| Exit Sub |
| End If |
| bFilterTracerIsinsideTable = False |
| FilterIndex = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0) |
| sDocumentType = sFiltername(FilterIndex,3) |
| oLogCursor = oLogDocument.Text.createTextCursor() |
| oLogCursor.GotoEnd(False) |
| If Not bIsFirstLogTable Then |
| oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) |
| Else |
| bisFirstLogTable = False |
| End If |
| oLogCursor.HyperLinkURL = "" |
| oLogCursor.HyperLinkName = "" |
| oLogCursor.HyperLinkTarget = "" |
| oLogCursor.ParaStyleName = "Heading 1" |
| oLogCursor.setString(sDocumentType) |
| If WizardMode = SBMICROSOFTMODE Then |
| If bFilterTracingAvailable Then |
| If bMSApplFilterTracingAvailable(ApplIndex) Then |
| Dim CurFilterTracingPath as String |
| CurFilterTracingPath = FilterTracingLogPath(ApplIndex) |
| bFilterTracerIsinsideTable = (bTakeOverTargetName(ApplIndex) Or bTakeOverPathName(ApplIndex)) |
| If Not bFilterTracerIsinsideTable Then |
| oLogCursor.CollapseToEnd() |
| oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) |
| InsertCommandButtonatViewCursor(oLogDocument, oLogCursor, CurFilterTracingPath) |
| End If |
| End If |
| End If |
| End If |
| oLogCursor.CollapsetoEnd() |
| oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) |
| oLogTable = oLogDocument.CreateInstance("com.sun.star.text.TextTable") |
| oLogTable.RepeatHeadline = true |
| If bFilterTracerIsinsideTable Then |
| oLogTable.initialize(2,3) |
| End If |
| oLogCursor.Text.InsertTextContent(oLogCursor, oLogTable, True) |
| oTextCursor = oLogTable.GetCellbyPosition(0,0).createTextCursor() |
| oTextCursor.SetString(sSourceDocuments) |
| oTextCursor = oLogTable.GetCellbyPosition(1,0).createTextCursor() |
| oTextCursor.SetString(sTargetDocuments) |
| If bFilterTracerIsinsideTable Then |
| oTextCursor = oLogTable.GetCellbyPosition(2,0).createTextCursor() |
| oTextCursor.SetString("FilterTracer") |
| End If |
| bInsertRow = False |
| End Sub |
| |
| |
| Function GetSize(iWidth, iHeight) As New com.sun.star.awt.Size |
| Dim aSize As New com.sun.star.awt.Size |
| aSize.Width = iWidth |
| aSize.Height = iHeight |
| GetSize() = aSize |
| End Function |
| |
| |
| Sub InsertCommandButtonatViewCursor(oLocDocument, oLocCursor, TargetUrl as String, Optional aSize) |
| Dim oDocument |
| Dim oController |
| Dim oCommandButton |
| Dim oShape |
| Dim oDrawPage |
| Dim oCommandControl |
| Dim oEvent |
| Dim oCell |
| oCommandButton = oLocDocument.createInstance("com.sun.star.form.component.CommandButton") |
| oShape = oLocDocument.CreateInstance ("com.sun.star.drawing.ControlShape") |
| If IsMissing(aSize) Then |
| oShape.Size = GetSize(4000, 600) |
| End If |
| oCommandButton.Label = FileNameoutofPath(Targeturl) |
| oCommandButton.TargetFrame = "_default" |
| oCommandButton.ButtonType = com.sun.star.form.FormButtonType.URL |
| oCommandbutton.DispatchUrlInternal = True |
| oCommandButton.TargetURL = ConverttoUrl(TargetUrl) |
| oShape.Control = oCommandbutton |
| oLocCursor.Text.InsertTextContent(oLocCursor, oShape, True) |
| End Sub |
| |
| |
| |
| Sub CreateLogDocument(HiddenProperties()) |
| Dim OpenProperties(0) as new com.sun.star.beans.PropertyValue |
| Dim NoArgs() |
| Dim i as Integer |
| Dim bLogIsThere as Boolean |
| If ImportDialog.chkLogfile.State = 1 Then |
| i = 2 |
| OpenProperties(0).Name = "Hidden" |
| OpenProperties(0).Value = True |
| oLogDocument = StarDesktop.LoadComponentFromURL("private:factory/swriter", "_default", 4, OpenProperties()) |
| SOWorkPath = RTrimStr(SOWorkPath,"/") |
| sLogUrl = SOWorkPath & "/Logfile.odt" |
| Do |
| bLogIsThere = oUcb.Exists(sLogUrl) |
| If bLogIsThere Then |
| If i = 2 Then |
| sLogUrl = ReplaceString(sLogUrl, "/Logfile_2.odt", "/Logfile.odt") |
| Else |
| sLogUrl = ReplaceString(sLogUrl, "/Logfile_" & cStr(i) & ".odt", "/Logfile_" & cStr(i-1) & ".odt") |
| End If |
| i = i + 1 |
| End If |
| Loop Until Not bLogIsThere |
| bLogExists = True |
| oLogDocument.StoreAsUrl(sLogUrl, NoArgs()) |
| End If |
| End Sub |
| |
| |
| Function GetFilterTracingLogPath(sTargetUrl as String, ApplIndex) as String |
| Dim TargetFileName as String |
| Dim sTargetFolder as String |
| Dim CurFilterTracingPath as String |
| Dim CurFilterTracingname as String |
| Dim CurFilterFolder as String |
| CurFilterTracingPath = FilterTracingLogPath(ApplIndex) |
| If bTakeOverTargetName(ApplIndex) Then |
| TargetFilename = GetFileNameWithoutextension(sTargetUrl, "/") |
| CurFilterFolder = DirectoryNameoutofPath(FilterTracingLogPath(ApplIndex), "/") |
| CurFilterTracingpath = CurFilterFolder & "/" & TargetFilename & ".log" |
| End If |
| If bTakeOverPathName(ApplIndex) Then 'Replace the Folder in the FilterTracerpath by the Folder of the targetUrl |
| sTargetFolder = DirectoryNameoutofPath(sTargetUrl,"/") |
| CurFilterTracingPath = sTargetFolder & "/" & FileNameoutofPath(CurFilterTracingPath, "/") |
| End If |
| GetFilterTracingLogPath() = CurFilterTracingPath |
| End Function |
| |
| |
| Sub InsertTargetUrlToLogDocument(sTargetUrl as String, sComment as String, ApplIndex as Integer) |
| Dim oCell |
| Dim oTextCursor |
| Dim CurFilterTracingpath as String |
| If (bLogExists) And (sTargetUrl <> "") Then |
| If sTargetUrl <> "" Then |
| oCell = oLogTable.GetCellbyPosition(1,oLogTable.Rows.Count-1) |
| InsertCommentToLogCell(sComment, oCell) |
| InsertHyperLinkToLogCell(sTargetUrl, oCell) |
| If bFilterTracerIsinsideTable Then |
| oCell = oLogTable.getCellByPosition(2, oLogTable.Rows.Count-1) |
| oTextCursor = oCell.Text.CreateTextCursor() |
| CurFilterTracingpath = GetFilterTracingLogPath(sTargetUrl, ApplIndex) |
| InsertCommandButtonatViewCursor(oLogDocument, oTextCursor, CurFilterTracingPath) |
| End If |
| oLogDocument.Store() |
| End If |
| End If |
| End Sub |
| |
| |
| Sub InsertSourceUrlToLogDocument(SourceUrl as String, sComment) ' |
| Dim oCell as Object |
| If bLogExists Then |
| If bInsertRow Then |
| oLogTable.Rows.InsertByIndex(oLogTable.Rows.Count,1) |
| Else |
| bInsertRow = True |
| End If |
| oCell = oLogTable.GetCellbyPosition(0,oLogTable.Rows.Count-1) |
| InsertCommentToLogCell(sComment, oCell) |
| InsertHyperLinkToLogCell(SourceUrl, oCell) |
| oLogDocument.Store() |
| End If |
| End Sub |
| |
| |
| Sub InsertHyperLinkToLogCell(sUrl as String, oCell as Object) |
| Dim oLogCursor as Object |
| Dim LocFileName as String |
| oLogCursor = oCell.createTextCursor() |
| oLogCursor.CollapseToStart() |
| oLogCursor.HyperLinkURL = sUrl |
| oLogCursor.HyperLinkName = sUrl |
| oLogCursor.HyperLinkTarget = sUrl |
| LocFileName = FileNameOutOfPath(sUrl) |
| oCell.InsertString(oLogCursor, LocFileName,False) |
| End Sub |
| |
| |
| Sub InsertCommentToLogCell(sComment as string, oCell as Object) |
| Dim oCommentCursor as Object |
| If sComment <> "" Then |
| oCommentCursor = oCell.createTextCursor() |
| oCell.insertControlCharacter(oCommentCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False) |
| oCell.insertString(oCommentCursor, sComment, false) |
| End If |
| End Sub |
| |
| |
| Sub AddLogStatistics() |
| Dim oCell as Object |
| Dim oLogCursor as Object |
| Dim MaxRowIndex as Integer |
| If bLogExists Then |
| MaxRowIndex = oLogTable.Rows.Count |
| sLogSummary = ReplaceString(sLogSummary, FileCount, "<COUNT>") |
| ' oLogTable.Rows.InsertByIndex(MaxRowIndex, 1) |
| ' oCell = oLogTable.GetCellbyPosition(0, MaxRowIndex) |
| ' oLogCursor = oCell.createTextCursor() |
| ' oCell.InsertString(oLogCursor, sLogSummary,False) |
| ' MergeRange(oLogTable, oCell, 1) |
| |
| oLogCursor = oLogDocument.Text.CreateTextCursor |
| oLogCursor.gotoEnd(False) |
| oLogCursor.HyperLinkURL = "" |
| oLogCursor.HyperLinkName = "" |
| oLogCursor.HyperLinkTarget = "" |
| oLogCursor.SetString(sLogSummary) |
| oLogDocument.Store() |
| oLogDocument.Dispose() |
| bLogExists = False |
| End If |
| End Sub |
| |
| |
| |
| Function CheckIfMacroExists(oBasicLibraries as Object, sComment as String) as Boolean |
| Dim ModuleNames() as String |
| Dim ModuleName as String |
| Dim MaxLibIndex as Integer |
| Dim MaxModuleIndex as Integer |
| Dim bMacroExists as Boolean |
| Dim n as Integer |
| Dim m as Integer |
| Dim LibName as String |
| Dim sBasicCode as String |
| Dim oLibrary as Object |
| bMacroExists = False |
| bMacroExists = oBasicLibraries.hasElements |
| If bMacroExists Then |
| MaxLibIndex = Ubound(oBasicLibraries.ElementNames()) |
| For n = 0 To MaxLibIndex |
| LibName = oBasicLibraries.ElementNames(n) |
| If oBasicLibraries.isLibraryLoaded(LibName) Then |
| oLibrary = oBasicLibraries.getbyName(LibName) |
| If oLibrary.hasElements() Then |
| MaxModuleIndex = Ubound(oLibrary.ElementNames()) |
| For m = 0 To MaxModuleIndex |
| ModuleName = oLibrary.ElementNames(m) |
| sBasicCode = oLibrary.getbyName(ModuleName) |
| If sBasicCode <> "" Then |
| ConcatComment(sComment, sReeditMacro) |
| CheckIfMacroExists() = True |
| Exit Function |
| End If |
| Next m |
| End If |
| End If |
| Next n |
| End If |
| CheckIfMacroExists() = False |
| End Function |
| |
| |
| |
| Function CheckPassWordProtection(oDocument as Object) |
| Dim bIsPassWordProtected as Boolean |
| Dim i as Integer |
| Dim oArgs() |
| Dim MaxIndex as Integer |
| Dim sblabla as String |
| bIsPassWordProtected = false |
| oArgs() = oDocument.getArgs() |
| MaxIndex = Ubound(oArgs()) |
| For i = 0 To MaxIndex |
| sblabla = oArgs(i).Name |
| If oArgs(i).Name = "Password" Then |
| bIsPassWordProtected = True |
| sCurPassWord = oArgs(i).Value |
| Exit For |
| End If |
| Next i |
| CheckPassWordProtection() = bIsPassWordProtected |
| End Function |
| |
| |
| Sub OpenLogDocument() |
| |
| bShowLogFile = True |
| ImportDialogArea.endexecute() |
| |
| End Sub |
| |
| |
| Sub MergeRange(oTable as Object, oCell as Object, MergeCount as Integer) |
| Dim oTableCursor as Object |
| oTableCursor = oTable.createCursorByCellName(oCell.CellName) |
| oTableCursor.goRight(MergeCount, True) |
| oTableCursor.mergeRange() |
| End Sub |
| |
| |
| Function ConcatComment(sComment as String, AdditionalComment as String) |
| If sComment = "" Then |
| sComment = AdditionalComment |
| Else |
| sComment = sComment & chr(13) + AdditionalComment |
| End If |
| ConcatComment = sComment |
| End Function |
| </script:module> |