1cdf0e10cSrcweir<?xml version="1.0" encoding="UTF-8"?>
2cdf0e10cSrcweir<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd">
33e02b54dSAndrew Rist<!--***********************************************************
43e02b54dSAndrew Rist *
53e02b54dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
63e02b54dSAndrew Rist * or more contributor license agreements.  See the NOTICE file
73e02b54dSAndrew Rist * distributed with this work for additional information
83e02b54dSAndrew Rist * regarding copyright ownership.  The ASF licenses this file
93e02b54dSAndrew Rist * to you under the Apache License, Version 2.0 (the
103e02b54dSAndrew Rist * "License"); you may not use this file except in compliance
113e02b54dSAndrew Rist * with the License.  You may obtain a copy of the License at
123e02b54dSAndrew Rist *
133e02b54dSAndrew Rist *   http://www.apache.org/licenses/LICENSE-2.0
143e02b54dSAndrew Rist *
153e02b54dSAndrew Rist * Unless required by applicable law or agreed to in writing,
163e02b54dSAndrew Rist * software distributed under the License is distributed on an
173e02b54dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
183e02b54dSAndrew Rist * KIND, either express or implied.  See the License for the
193e02b54dSAndrew Rist * specific language governing permissions and limitations
203e02b54dSAndrew Rist * under the License.
213e02b54dSAndrew Rist *
223e02b54dSAndrew Rist ***********************************************************-->
23cdf0e10cSrcweir<script:module xmlns:script="http://openoffice.org/2000/script" script:name="FilesModul" script:language="StarBasic">Option Explicit
24cdf0e10cSrcweir
25cdf0e10cSrcweirPublic AbsTemplateFound as Integer
26cdf0e10cSrcweirPublic AbsDocuFound as Integer
27cdf0e10cSrcweirPublic oLogDocument as Object
28cdf0e10cSrcweirPublic oLogTable as Object
29cdf0e10cSrcweirPublic bLogExists as Boolean
30cdf0e10cSrcweirPublic sComment as String
31cdf0e10cSrcweirPublic MaxCollectIndex as Integer
32cdf0e10cSrcweirPublic bInsertRow as Boolean
33cdf0e10cSrcweirPublic sLogUrl as String
34cdf0e10cSrcweirPublic sCurPassWord as String
35cdf0e10cSrcweirPublic FileCount as Integer
36cdf0e10cSrcweirPublic XMLTemplateCount as Integer
37cdf0e10cSrcweirPublic PathCollection(7,3) as String
38cdf0e10cSrcweirPublic bIsFirstLogTable as Boolean
39cdf0e10cSrcweirPublic bFilterTracerIsinsideTable as Boolean
40cdf0e10cSrcweir
41cdf0e10cSrcweir
42cdf0e10cSrcweirFunction ReadCollectionPaths(FilesList() as String, sFilterName() as String)
43cdf0e10cSrcweirDim FilterIndex as Integer
44cdf0e10cSrcweirDim bRecursive as Boolean
45cdf0e10cSrcweirDim SearchDir as String
46cdf0e10cSrcweirDim i as Integer
47cdf0e10cSrcweirDim n as Integer
48cdf0e10cSrcweirDim a as Integer
49cdf0e10cSrcweirDim s as Integer
50cdf0e10cSrcweirDim t as Integer
51cdf0e10cSrcweirDim sFileContent() as String
52cdf0e10cSrcweirDim NewList(0,1) as String
53cdf0e10cSrcweirDim Index as Integer
54cdf0e10cSrcweirDim CurFileName as String
55cdf0e10cSrcweirDim CurExtension as String
56cdf0e10cSrcweirDim CurFileContent as String
57cdf0e10cSrcweirDim XMLTemplateContentList() as String
58cdf0e10cSrcweirDim bIsTemplatePath as Boolean
59cdf0e10cSrcweirDim MaxIndex as Integer
60cdf0e10cSrcweirDim NewContentList() as String
61cdf0e10cSrcweirDim XMLTemplateContentString as String
62cdf0e10cSrcweirDim ApplIndex as Integer
63cdf0e10cSrcweirDim bAssignFileName as Boolean
64cdf0e10cSrcweir	bInterruptSearch = False
65cdf0e10cSrcweir	For i = 0 To MaxCollectIndex
66cdf0e10cSrcweir		SearchDir = PathCollection(i,0)
67cdf0e10cSrcweir		bRecursive = PathCollection(i,1)
68cdf0e10cSrcweir		sFileContent() = ArrayoutofString(PathCollection(i,2), &quot;|&quot;)
69cdf0e10cSrcweir		NewList() = ReadDirectories(SearchDir, bRecursive, False, False, sFileContent(), &quot;&quot;)
70cdf0e10cSrcweir		If InterruptProcess Then
71cdf0e10cSrcweir			ReadCollectionPaths() = False
72cdf0e10cSrcweir			Exit Function
73cdf0e10cSrcweir		End If
74cdf0e10cSrcweir		If Ubound(NewList()) &gt; -1 Then
75cdf0e10cSrcweir			bIsTemplatePath = FieldInList(&quot;vor&quot;, sFileContent)
76cdf0e10cSrcweir			If bIsTemplatePath Then
77cdf0e10cSrcweir				XMLTemplateContentString = PathCollection(i,3)
78cdf0e10cSrcweir				XMLTemplateContentList() = ArrayoutofString(XMLTemplateContentString, &quot;|&quot;)
79cdf0e10cSrcweir				If Ubound(XMLTemplateContentList()) &gt; -1 Then
80cdf0e10cSrcweir					MaxIndex = Ubound(NewList())
81cdf0e10cSrcweir					ReDim Preserve NewList(MaxIndex, 1) as String
82cdf0e10cSrcweir					ReDim Preserve NewContentList(MaxIndex) as String
83cdf0e10cSrcweir					a = -1
84cdf0e10cSrcweir					For n = 0 To MaxIndex
85cdf0e10cSrcweir						bAssignFileName = True
86cdf0e10cSrcweir						If InterruptProcess() Then
87cdf0e10cSrcweir							ReadCollectionPaths() = False
88cdf0e10cSrcweir							Exit Function
89cdf0e10cSrcweir						End If
90cdf0e10cSrcweir						CurFileContent = &quot;&quot;
91cdf0e10cSrcweir						CurFileName = NewList(n,0)
92cdf0e10cSrcweir						If (FieldInList(NewList(n,1), XMLTemplateList())) Then
93cdf0e10cSrcweir							CurFileContent = GetRealFileContent(CurFileName)
94cdf0e10cSrcweir							t = SearchArrayforPartString(CurFileContent, XMLTemplateContentList())
95cdf0e10cSrcweir						 	bAssignFileName = (t &gt; -1)
96cdf0e10cSrcweir						 	If bAssignFileName Then
97cdf0e10cSrcweir						 		CurFileContent = XMLTemplateContentList(t)
98cdf0e10cSrcweir						 	End If
99cdf0e10cSrcweir							NewList(n,1) = CurFileContent
100cdf0e10cSrcweir						End If
101cdf0e10cSrcweir						CurExtension = NewList(n,1)
102cdf0e10cSrcweir						If bAssignFileName Then
103cdf0e10cSrcweir							If a &lt; n Then
104cdf0e10cSrcweir								a = a + 1
105cdf0e10cSrcweir								NewList(a,0) = CurFileName
106cdf0e10cSrcweir								NewList(a,1) = CurExtension
107cdf0e10cSrcweir								If CurFileContent = &quot;&quot; Then
108cdf0e10cSrcweir									CurFileContent = CurExtension
109cdf0e10cSrcweir								End If
110cdf0e10cSrcweir								ApplIndex = GetApplicationIndex(CurFileContent, sFiltername())
111cdf0e10cSrcweir								NewContentList(a) = ApplIndex
112cdf0e10cSrcweir							End If
113cdf0e10cSrcweir						End If
114cdf0e10cSrcweir					Next n
115cdf0e10cSrcweir					If a &lt; MaxIndex And a &gt; -1 Then
116cdf0e10cSrcweir						ReDim Preserve NewList(a, 1) as String
117cdf0e10cSrcweir					End If
118cdf0e10cSrcweir					If a &gt; -1 Then
119cdf0e10cSrcweir						AddListtoFilesList(FilesList(), NewList(), NewContentList())
120cdf0e10cSrcweir					End If
121cdf0e10cSrcweir				End If
122cdf0e10cSrcweir			Else
123cdf0e10cSrcweir				MaxIndex = Ubound(NewList())
124cdf0e10cSrcweir				ReDim Preserve NewContentList(MaxIndex) as String
125cdf0e10cSrcweir				For s = 0 To MaxIndex
126cdf0e10cSrcweir					CurExtension = NewList(s,1)
127cdf0e10cSrcweir					NewContentList(s) = GetApplicationIndex(CurExtension, sFiltername())
128cdf0e10cSrcweir				Next s
129cdf0e10cSrcweir				AddListtoFilesList(FilesList(), NewList(), NewContentList())
130cdf0e10cSrcweir			End If
131cdf0e10cSrcweir		End If
132cdf0e10cSrcweir	Next i
133cdf0e10cSrcweir	ReadCollectionPaths() = Ubound(FilesList()) &gt; -1
134cdf0e10cSrcweirEnd Function
135cdf0e10cSrcweir
136cdf0e10cSrcweir
137cdf0e10cSrcweirFunction GetApplicationIndex(CurFileContent as String, sFilterName() as String) as Integer
138cdf0e10cSrcweirDim Index as Integer
139cdf0e10cSrcweirDim i as Integer
140cdf0e10cSrcweir	Index = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0)
141cdf0e10cSrcweir	If Index &gt;= MaxApplCount Then
142cdf0e10cSrcweir		Index = Index - MaxApplCount
143cdf0e10cSrcweir	End If
144cdf0e10cSrcweir	For i = 0 To MaxApplCount - 1
145cdf0e10cSrcweir		If Applications(i, SBAPPLKEY) = Index Then
146cdf0e10cSrcweir			GetApplicationIndex() = i
147cdf0e10cSrcweir			Exit Function
148cdf0e10cSrcweir		End If
149cdf0e10cSrcweir	Next i
150cdf0e10cSrcweir	GetApplicationIndex() = - 1
151cdf0e10cSrcweirEnd Function
152cdf0e10cSrcweir
153cdf0e10cSrcweir
154cdf0e10cSrcweirFunction InterruptProcess() as Boolean
155cdf0e10cSrcweir	If bCancelTask Or RetValue = 0 Then
156cdf0e10cSrcweir		bConversionIsRunning = False
157cdf0e10cSrcweir		InterruptProcess() = True
158cdf0e10cSrcweir		Exit Function
159cdf0e10cSrcweir	End if
160cdf0e10cSrcweir	InterruptProcess() = False
161cdf0e10cSrcweirEnd Function
162cdf0e10cSrcweir
163cdf0e10cSrcweir
164cdf0e10cSrcweirSub AddCollectionPath(ApplIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer)
165cdf0e10cSrcweir	MaxCollectIndex = MaxCollectIndex + 1
166cdf0e10cSrcweir	PathCollection(MaxCollectIndex, 0) = Applications(ApplIndex, DocIndex)
167cdf0e10cSrcweir	PathCollection(MaxCollectIndex, 1) = Applications(ApplIndex, RecursiveIndex)
168cdf0e10cSrcweir	AddFilterNameToPathItem(ApplIndex, MaxCollectIndex, sFiltername(), DistIndex)
169cdf0e10cSrcweirEnd Sub
170cdf0e10cSrcweir
171cdf0e10cSrcweir
172cdf0e10cSrcweirFunction SetExtension(LocExtension) as String
173cdf0e10cSrcweir	if (Instr(LocExtension, &quot;vnd.sun.xml.impress&quot;)) &gt; 0 then
174cdf0e10cSrcweir		SetExtension() = &quot;vor|sti|std&quot;
175cdf0e10cSrcweir	elseif (Instr(LocExtension, &quot;vnd.sun.xml.writer&quot;)) &gt; 0 then
176cdf0e10cSrcweir		SetExtension() = &quot;vor|stw&quot;
177cdf0e10cSrcweir	elseif (Instr(LocExtension, &quot;vnd.sun.xml.calc&quot;)) &gt; 0 then
178cdf0e10cSrcweir		SetExtension() = &quot;vor|stc&quot;
179cdf0e10cSrcweir	elseif (Instr(LocExtension, &quot;vnd.sun.xml.draw&quot;)) &gt; 0 then
180cdf0e10cSrcweir		SetExtension() = &quot;vor|std|sti&quot;
181cdf0e10cSrcweir	endif
182cdf0e10cSrcweirEnd Function
183cdf0e10cSrcweir
184cdf0e10cSrcweirSub AddFilterNameToPathItem(ApplIndex as Integer, CollectIndex as Integer, sFiltername() as String, DistIndex as Integer)
185cdf0e10cSrcweirDim iKey as Integer
186cdf0e10cSrcweirDim CurListString as String
187cdf0e10cSrcweirDim LocExtension as String
188cdf0e10cSrcweirDim LocContentString as String
189cdf0e10cSrcweirDim LocXMLTemplateContent as String
190cdf0e10cSrcweir	iKey = Applications(ApplIndex, SBAPPLKEY)
191cdf0e10cSrcweir	CurListString = PathCollection(CollectIndex, 2)
192cdf0e10cSrcweir	LocExtension = sFilterName(iKey +DistIndex, 0)
193cdf0e10cSrcweir	If Len(LocExtension) &gt; SBMAXEXTENSIONLENGTH Then 			&apos; 7 == Length of two extensions like &apos;sda|sdd
194cdf0e10cSrcweir		LocExtension = SetExtension(LocExtension)
195cdf0e10cSrcweir		LocContentString = sFilterName(iKey +DistIndex, 0)
196cdf0e10cSrcweir		LocContentString = ReplaceString(LocContentString, &quot;|&quot;, &quot;;&quot;)
197cdf0e10cSrcweir		LocXMLTemplateContent = PathCollection(CollectIndex, 3)
198cdf0e10cSrcweir		If LocXMLTemplateContent = &quot;&quot; Then
199cdf0e10cSrcweir			LocXMLTemplateContent = LocContentString
200cdf0e10cSrcweir		Else
201cdf0e10cSrcweir			LocXMLTemplateContent = LocXMLTemplateContent &amp; &quot;|&quot; &amp; LocContentString
202cdf0e10cSrcweir		End If
203cdf0e10cSrcweir		PathCollection(CollectIndex, 3) = LocXMLTemplateContent
204cdf0e10cSrcweir	End If
205cdf0e10cSrcweir	If CurListString = &quot;&quot; Then
206cdf0e10cSrcweir		PathCollection(CollectIndex, 2) = LocExtension
207cdf0e10cSrcweir	Else
208cdf0e10cSrcweir		If Instr(CurListString, LocExtension) = 0 Then
209cdf0e10cSrcweir			PathCollection(CollectIndex, 2) = CurListString &amp; &quot;|&quot; &amp; LocExtension
210cdf0e10cSrcweir		End If
211cdf0e10cSrcweir	End If
212cdf0e10cSrcweirEnd Sub
213cdf0e10cSrcweir
214cdf0e10cSrcweir
215cdf0e10cSrcweirSub CheckIfToAddPathToCollection(ApplIndex as Integer, bDoConvertIndex as Integer, DocIndex as Integer, RecursiveIndex as Integer, sFiltername() as String, DistIndex as Integer)
216cdf0e10cSrcweirDim CollectIndex as Integer
217cdf0e10cSrcweirDim bCheckDocuType as Boolean
218cdf0e10cSrcweir	bCheckDocuType = Applications(ApplIndex, bDoConvertIndex)
219cdf0e10cSrcweir	If bCheckDocuType Then
220cdf0e10cSrcweir		CollectIndex = GetIndexInMultiArray(PathCollection(), Applications(ApplIndex,DocIndex), 0)
221cdf0e10cSrcweir		If (CollectIndex &gt;-1) Then
222cdf0e10cSrcweir			If Applications(ApplIndex, RecursiveIndex) &lt;&gt; PathCollection(CollectIndex, 1) Then
223cdf0e10cSrcweir				AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex)
224cdf0e10cSrcweir			Else
225cdf0e10cSrcweir				AddFilterNameToPathItem(ApplIndex, CollectIndex, sFilterName(), DistIndex)
226cdf0e10cSrcweir			End If
227cdf0e10cSrcweir		Else
228cdf0e10cSrcweir			AddCollectionPath(ApplIndex, DocIndex, RecursiveIndex, sFilterName(), DistIndex)
229cdf0e10cSrcweir		End If
230cdf0e10cSrcweir	End If
231cdf0e10cSrcweirEnd Sub
232cdf0e10cSrcweir
233cdf0e10cSrcweir
234cdf0e10cSrcweirSub CollectPaths(sFiltername() as String)
235cdf0e10cSrcweirDim i as Integer
236cdf0e10cSrcweirDim	XMLTemplateContentString as String
237cdf0e10cSrcweir	MaxCollectIndex = -1
238cdf0e10cSrcweir	For i = 0 To ApplCount-1
239cdf0e10cSrcweir		CheckIfToAddPathToCollection(i, SBDOCCONVERT, SBDOCSOURCE, SBDOCRECURSIVE, sFilterName(), 0)
240cdf0e10cSrcweir	Next i
241cdf0e10cSrcweir	XMLTemplateCount = 0
242cdf0e10cSrcweir	XMLTemplateContentString = &quot;&quot;
243cdf0e10cSrcweir	For i = 0 To ApplCount-1
244cdf0e10cSrcweir		If WizardMode = SBXMLMODE Then
245cdf0e10cSrcweir			XMLTemplateCount = XMLTemplateCount + 1
246cdf0e10cSrcweir		End If
247cdf0e10cSrcweir		CheckIfToAddPathToCollection(i, SBTEMPLCONVERT, SBTEMPLSOURCE, SBTEMPLRECURSIVE, sFilterName(), MaxApplCount)
248cdf0e10cSrcweir	Next i
249cdf0e10cSrcweirEnd Sub
250cdf0e10cSrcweir
251cdf0e10cSrcweir
252cdf0e10cSrcweirSub ConvertAllDocuments(sFilterName() as String)
253cdf0e10cSrcweirDim FileProperties(1) as new com.sun.star.beans.PropertyValue
254cdf0e10cSrcweirDim PWFileProperties(2) as New com.sun.star.beans.PropertyValue
255cdf0e10cSrcweirDim WriterWebProperties(0) as new com.sun.star.beans.PropertyValue
256cdf0e10cSrcweirDim OpenProperties(4) as new com.sun.star.beans.PropertyValue
257cdf0e10cSrcweirDim	oInteractionHandler as Object
258cdf0e10cSrcweirDim InteractionTypes(0) as Long
259cdf0e10cSrcweirDim FilesList(0,2) as String
260cdf0e10cSrcweirDim sViewPath as String
261cdf0e10cSrcweirDim i as Integer
262cdf0e10cSrcweirDim FilterIndex as Integer
263cdf0e10cSrcweirDim sSourceUrl as String
264cdf0e10cSrcweirDim CurFilename as String
265cdf0e10cSrcweirDim oDocument as Object
266cdf0e10cSrcweirDim sExtension as String
267cdf0e10cSrcweirDim OldExtension as String
268cdf0e10cSrcweirDim CurFound as Integer
269cdf0e10cSrcweirDim TotFound as Integer
270cdf0e10cSrcweirDim TargetStemDir as String
271cdf0e10cSrcweirDim SourceStemDir as String
272cdf0e10cSrcweirDim TargetDir as String
273cdf0e10cSrcweirDim sTargetUrl as String
274cdf0e10cSrcweirDim CurFilterName as String
275cdf0e10cSrcweirDim ApplIndex as Integer
276cdf0e10cSrcweirDim Index as Integer
277cdf0e10cSrcweirDim bIsDocument as Boolean
278cdf0e10cSrcweirDim bDoSave as Boolean
279cdf0e10cSrcweirDim sCurFileExists as String
280cdf0e10cSrcweirDim MaxFileIndex as Integer
281cdf0e10cSrcweirDim bContainsBasicMacro as Boolean
282cdf0e10cSrcweirDim bIsPassWordProtected as Boolean
283cdf0e10cSrcweirDim iOverwrite as Integer
284cdf0e10cSrcweirDim sMimeTypeorExtension as String
285cdf0e10cSrcweirDim sPrevMimeTypeorExtension as String
286cdf0e10cSrcweir	bConversionisrunning = True
287cdf0e10cSrcweir	InteractionTypes(0) = com.sun.star.task.PasswordRequestMode.PASSWORD_REENTER
288cdf0e10cSrcweir	oInteractionHandler = createUnoService(&quot;com.sun.star.task.InteractionHandler&quot;)
289cdf0e10cSrcweir	oInteractionHandler.initialize(InteractionTypes())
290cdf0e10cSrcweir	iGeneralOverwrite = SBOVERWRITEUNDEFINED
291cdf0e10cSrcweir	bConversionIsRunning = True
292cdf0e10cSrcweir	bLogExists = false
293cdf0e10cSrcweir	AbsTemplateFound = 0
294cdf0e10cSrcweir	AbsDocuFound = 0
295cdf0e10cSrcweir	CollectPaths(sFiltername())
296cdf0e10cSrcweir	If Not ReadCollectionPaths(FilesList(), sFilterName()) Then
297cdf0e10cSrcweir		TotFound = 0
298cdf0e10cSrcweir		SetProgressDisplay(0)
299cdf0e10cSrcweir		bConversionisrunning = false
300cdf0e10cSrcweir		FinalizeDialogButtons()
301cdf0e10cSrcweir		Exit Sub
302cdf0e10cSrcweir	End If
303cdf0e10cSrcweir	TotFound = Ubound(FilesList()) + 1
304cdf0e10cSrcweir	If FilesList(0,0) = &quot;&quot; Then					&apos; Querying the number of fields in a multidimensionl Array is unsecure
305cdf0e10cSrcweir		TotFound = 0							&apos; because it will return the value 0 (and not -1) even when the Array is empty
306cdf0e10cSrcweir		SetProgressDisplay(0)
307cdf0e10cSrcweir	End If
308cdf0e10cSrcweir	BubbleSortList(FilesList(), true)
309cdf0e10cSrcweir	If TotFound &gt; 0 Then
310cdf0e10cSrcweir		CreateLogDocument(OpenProperties())
311cdf0e10cSrcweir		InitializeProgressPage(ImportDialog)
312cdf0e10cSrcweir		OpenProperties(0).Name = &quot;Hidden&quot;
313cdf0e10cSrcweir		OpenProperties(0).Value = True
314cdf0e10cSrcweir		OpenProperties(1).Name = &quot;AsTemplate&quot;
315cdf0e10cSrcweir		OpenProperties(1).Value = False
316cdf0e10cSrcweir		OpenProperties(2).Name = &quot;MacroExecutionMode&quot;
317cdf0e10cSrcweir		OpenProperties(2).Value = com.sun.star.document.MacroExecMode.NEVER_EXECUTE
318cdf0e10cSrcweir		OpenProperties(3).Name = &quot;UpdateDocMode&quot;
319cdf0e10cSrcweir		OpenProperties(3).Value = com.sun.star.document.UpdateDocMode.NO_UPDATE
320cdf0e10cSrcweir		OpenProperties(4).Name = &quot;InteractionHandler&quot;
321cdf0e10cSrcweir		OpenProperties(4).Value = oInteractionHandler
322cdf0e10cSrcweir		MaxFileIndex = Ubound(FilesList(),1)
323cdf0e10cSrcweir		FileCount = 0
324cdf0e10cSrcweir		For i = 0 To MaxFileIndex
325cdf0e10cSrcweir			sComment = &quot;&quot;
326cdf0e10cSrcweir			If InterruptProcess() Then
327cdf0e10cSrcweir				Exit For
328cdf0e10cSrcweir			End If
329cdf0e10cSrcweir			bDoSave = True
330cdf0e10cSrcweir			sSourceUrl = FilesList(i,0)
331cdf0e10cSrcweir			sPrevMimeTypeorExtension = sMimeTypeorExtension
332cdf0e10cSrcweir			sMimeTypeorExtension = FilesList(i,1)
333cdf0e10cSrcweir			CurFiltername =	GetFilterName(sMimeTypeorExtension, sFilterName(), sExtension, FilterIndex)
334cdf0e10cSrcweir			ApplIndex = FilesList(i,2)
335cdf0e10cSrcweir			If sMimeTypeorExtension &lt;&gt; sPrevMimeTypeorExtension Then
336cdf0e10cSrcweir				CreateLogTable(ApplIndex, sMimeTypeOrExtension, sFiltername()
337cdf0e10cSrcweir			End If
338cdf0e10cSrcweir			If ApplIndex &gt; Ubound(Applications) or (ApplIndex &lt; 0) Then
339cdf0e10cSrcweir				Msgbox &quot;Applicationindex out of bounds:&quot; &amp; sSourcUrl
340cdf0e10cSrcweir			End If
341cdf0e10cSrcweir			sViewPath = ConvertFromUrl(sSourceUrl) 	&apos; CutPathView(sSourceUrl, 70)
342cdf0e10cSrcweir			ImportDialog.LabelCurDocument.Label = Str(i+1) &amp; &quot;/&quot; &amp; MaxFileIndex + 1 &amp; &quot;  (&quot; &amp; sViewPath &amp; &quot;)&quot;
343cdf0e10cSrcweir			Select Case lcase(sExtension)
344cdf0e10cSrcweir				Case &quot;odt&quot;, &quot;ods&quot;, &quot;odp&quot;, &quot;odg&quot;, &quot;odm&quot;, &quot;odf&quot;
345cdf0e10cSrcweir					SourceStemDir = RTrimStr(Applications(ApplIndex,SBDOCSOURCE), &quot;/&quot;)
346cdf0e10cSrcweir					TargetStemDir = RTrimStr(Applications(ApplIndex,SBDOCTARGET), &quot;/&quot;)
347cdf0e10cSrcweir				Case Else 								&apos; Templates and Helper-Applications remain
348cdf0e10cSrcweir					SourceStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLSOURCE), &quot;/&quot;)
349cdf0e10cSrcweir					TargetStemDir = RTrimStr(Applications(ApplIndex,SBTEMPLTARGET), &quot;/&quot;)
350cdf0e10cSrcweir			End Select
351cdf0e10cSrcweir			sTargetUrl = ReplaceString(sSourceUrl, TargetStemDir, SourceStemDir)
352cdf0e10cSrcweir			CurFilename = GetFileNameWithoutExtension(sTargetUrl, &quot;/&quot;)
353cdf0e10cSrcweir			OldExtension = GetFileNameExtension(sTargetUrl)
354cdf0e10cSrcweir			sTargetUrl = RTrimStr(sTargetUrl, OldExtension)
355cdf0e10cSrcweir			sTargetUrl = sTargetUrl &amp; sExtension
356cdf0e10cSrcweir			TargetDir = RTrimStr(sTargetUrl, CurFilename &amp; &quot;.&quot; &amp; sExtension)
357cdf0e10cSrcweir			If (oUcb.Exists(sTargetUrl)) Then
358cdf0e10cSrcweir				If (iGeneralOverwrite &lt;&gt; SBOVERWRITEALWAYS) Then
359cdf0e10cSrcweir					If (iGeneralOverwrite = SBOVERWRITEUNDEFINED) Then
360cdf0e10cSrcweir						ShowOverwriteAllDialog(sTargetUrl, sTitle)
361cdf0e10cSrcweir						bDoSave = (iGeneralOverwrite = SBOVERWRITEQUERY) Or (iGeneralOverwrite = SBOVERWRITEALWAYS)
362cdf0e10cSrcweir					Elseif iGeneralOverwrite = SBOVERWRITENEVER Then
363cdf0e10cSrcweir						bDoSave = False
364cdf0e10cSrcweir					ElseIf ((iGeneralOverWrite = SBOVERWRITEQUERY) OR (iGeneralOverwrite = SBOVERWRITECANCEL)) Then
365cdf0e10cSrcweir						&apos; Todo: According to AS there might come a new feature that storeasUrl could possibly rise a UI dialog.
366cdf0e10cSrcweir						&apos; In this case my own UI becomes obsolete
367cdf0e10cSrcweir						sCurFileExists = ReplaceString(sFileExists, ConvertFromUrl(sTargetUrl), &quot;&lt;1&gt;&quot;)
368cdf0e10cSrcweir						sCurFileExists = ReplaceString(sCurFileExists, chr(13), &quot;&lt;CR&gt;&quot;)
369cdf0e10cSrcweir						iOverWrite = Msgbox (sCurFileExists, 32 + 3, sTitle)
370cdf0e10cSrcweir						Select Case iOverWrite
371cdf0e10cSrcweir							Case 1	&apos; OK
372cdf0e10cSrcweir								&apos; In the FileProperty-Bean this is already default
373cdf0e10cSrcweir								bDoSave = True
374cdf0e10cSrcweir							Case 2 	&apos; Abort
375cdf0e10cSrcweir								CancelTask(False)
376cdf0e10cSrcweir								bDoSave = False
377cdf0e10cSrcweir							Case 7 	&apos; No
378cdf0e10cSrcweir								bDoSave = False
379cdf0e10cSrcweir						End Select
380cdf0e10cSrcweir					End If
381cdf0e10cSrcweir				End If
382cdf0e10cSrcweir			End If
383cdf0e10cSrcweir			If bDoSave Then
384cdf0e10cSrcweir				If Not oUcb.Exists(TargetDir) Then
385cdf0e10cSrcweir					bDoSave = CreateFolder(TargetDir)
386cdf0e10cSrcweir				End If
387cdf0e10cSrcweir				If bDoSave Then
388cdf0e10cSrcweir					oDocument = StarDesktop.LoadComponentFromURL(sSourceUrl, &quot;_default&quot;, 0, OpenProperties())
389cdf0e10cSrcweir					If Not IsNull(oDocument) Then
390cdf0e10cSrcweir						InsertSourceUrlToLogDocument(sSourceUrl, &quot;&quot;)
391cdf0e10cSrcweir						bIsPassWordProtected = CheckPassWordProtection(oDocument)
392cdf0e10cSrcweir						CheckIfMacroExists(oDocument.BasicLibraries, sComment)
393cdf0e10cSrcweir						On Local Error Goto NOSAVING
394cdf0e10cSrcweir						If bIsPassWordProtected Then
395cdf0e10cSrcweir							PWFileProperties(0).Name = &quot;FilterName&quot;
396cdf0e10cSrcweir							PWFileProperties(0).Value = CurFilterName
397cdf0e10cSrcweir							PWFileProperties(1).Name = &quot;Overwrite&quot;
398cdf0e10cSrcweir							PWFileProperties(1).Value = True
399cdf0e10cSrcweir							PWFileProperties(2).Name = &quot;Password&quot;
400cdf0e10cSrcweir							PWFileProperties(2).Value = sCurPassWord
401cdf0e10cSrcweir							oDocument.StoreAsUrl(sTargetUrl, PWFileProperties())
402cdf0e10cSrcweir						Else
403cdf0e10cSrcweir							FileProperties(0).Name = &quot;FilterName&quot;
404cdf0e10cSrcweir							FileProperties(0).Value = CurFilterName
405cdf0e10cSrcweir							FileProperties(1).Name = &quot;Overwrite&quot;
406cdf0e10cSrcweir							FileProperties(1).Value = True
407cdf0e10cSrcweir							oDocument.StoreAsUrl(sTargetUrl,FileProperties())
408cdf0e10cSrcweir						End If
409cdf0e10cSrcweir						&apos; Todo: Make sure that an errorbox pops up when saving fails
410cdf0e10cSrcweir						NOSAVING:
411cdf0e10cSrcweir						If Err &lt;&gt; 0 Then
412cdf0e10cSrcweir							sCurcouldnotsaveDocument = ReplaceString(scouldnotsaveDocument, ConvertFromUrl(sTargetUrl), &quot;&lt;1&gt;&quot;)
413cdf0e10cSrcweir							sComment = ConcatComment(sComment, sCurCouldnotsaveDocument)
414cdf0e10cSrcweir							Resume LETSGO
415cdf0e10cSrcweir							LETSGO:
416cdf0e10cSrcweir						Else
417cdf0e10cSrcweir							FileCount = FileCount + 1
418cdf0e10cSrcweir						End If
419cdf0e10cSrcweir						oDocument.Dispose()
420cdf0e10cSrcweir						InsertTargetUrlToLogDocument(sTargetUrl, sComment, ApplIndex)
421cdf0e10cSrcweir					Else
422cdf0e10cSrcweir						sCurcouldnotopenDocument = ReplaceString(scouldnotopenDocument, ConvertFromUrl(sSourceUrl), &quot;&lt;1&gt;&quot;)
423cdf0e10cSrcweir						sComment = ConcatComment(sComment, sCurCouldnotopenDocument)
424cdf0e10cSrcweir						InsertSourceUrlToLogDocument(sSourceUrl, sComment)
425cdf0e10cSrcweir					End If
426cdf0e10cSrcweir				End If
427cdf0e10cSrcweir			End If
428cdf0e10cSrcweir		Next i
429cdf0e10cSrcweir	End If
430cdf0e10cSrcweir	AddLogStatistics()
431cdf0e10cSrcweir	FinalizeDialogButtons()
432cdf0e10cSrcweir	bConversionIsRunning = False
433cdf0e10cSrcweir	Exit Sub
434cdf0e10cSrcweirRTError:
435cdf0e10cSrcweir	Msgbox sRTErrorDesc, 16, sRTErrorHeader
436cdf0e10cSrcweirEnd Sub
437cdf0e10cSrcweir
438cdf0e10cSrcweir
439cdf0e10cSrcweir
440cdf0e10cSrcweirSub AddListtoFilesList(FirstList(), SecList(), NewContentList() as String)
441cdf0e10cSrcweirDim sLocExtension as String
442cdf0e10cSrcweirDim FirstStart as Integer
443cdf0e10cSrcweirDim FirstEnd as Integer
444cdf0e10cSrcweirDim i as Integer
445cdf0e10cSrcweirDim s as Integer
446cdf0e10cSrcweir	If FirstList(0,0) = &quot;&quot; Then
447cdf0e10cSrcweir		FirstStart = Ubound(FirstList(),1)
448cdf0e10cSrcweir	Else
449cdf0e10cSrcweir		FirstStart = Ubound(FirstList(),1) + 1
450cdf0e10cSrcweir	End If
451cdf0e10cSrcweir	FirstEnd = FirstStart + Ubound(SecList(),1)
452cdf0e10cSrcweir	ReDim Preserve FirstList(FirstEnd,2)
453cdf0e10cSrcweir	s = 0
454cdf0e10cSrcweir	For i = FirstStart To FirstEnd
455cdf0e10cSrcweir		FirstList(i,0) = SecList(s,0)
456cdf0e10cSrcweir		FirstList(i,1) = SecList(s,1)
457cdf0e10cSrcweir		sLocExtension = lcase(FirstList(i,1))
458cdf0e10cSrcweir		Select Case sLocExtension
459*bc0b50ddSTsutomu Uchino			Case &quot;sdw&quot;, &quot;sdc&quot;, &quot;sda&quot;, &quot;sdd&quot;, &quot;smf&quot;, &quot;sgl&quot;, &quot;doc&quot;, &quot;xls&quot;, &quot;ppt&quot;, &quot;sxi&quot; , &quot;sxw&quot; , &quot;sxd&quot; , &quot;sxg&quot; , &quot;sxm&quot; , &quot;sxc&quot; , &quot;pps&quot; , &quot;docx&quot; , &quot;docm&quot; , &quot;xlsx&quot; , &quot;xlsm&quot; , &quot;xlsb&quot; , &quot;pptx&quot; , &quot;pptm&quot;
460cdf0e10cSrcweir				AbsDocuFound = AbsDocuFound + 1
461cdf0e10cSrcweir			Case else
462cdf0e10cSrcweir				AbsTemplateFound = AbsTemplateFound + 1
463cdf0e10cSrcweir		End Select
464cdf0e10cSrcweir		FirstList(i,2) = CStr(NewContentList(s))
465cdf0e10cSrcweir		s = s + 1
466cdf0e10cSrcweir	Next i
467cdf0e10cSrcweir	SetProgressDisplay(Ubound(FirstList()) + 1)
468cdf0e10cSrcweirEnd Sub
469cdf0e10cSrcweir
470cdf0e10cSrcweir
471cdf0e10cSrcweir
472cdf0e10cSrcweirFunction GetTargetTemplatePath(Index as Integer)
473cdf0e10cSrcweir	Select Case WizardMode
474cdf0e10cSrcweir		Case SBMICROSOFTMODE
475cdf0e10cSrcweir			GetTargetTemplatePath() = SOTemplatePath &amp; &quot;/&quot; &amp; sTemplateGroupName
476cdf0e10cSrcweir		Case SBXMLMODE
477cdf0e10cSrcweir			If Index = 3 Then
478cdf0e10cSrcweir				&apos; Helper Application
479cdf0e10cSrcweir				GetTargetTemplatePath = SOWorkPath
480cdf0e10cSrcweir			Else
481cdf0e10cSrcweir				GetTargetTemplatePath = SOTemplatePath
482cdf0e10cSrcweir			End If
483cdf0e10cSrcweir	End Select
484cdf0e10cSrcweirEnd Function
485cdf0e10cSrcweir
486cdf0e10cSrcweir
487cdf0e10cSrcweir&apos; Retrieves the second value for a next to &apos;SearchString&apos; in
488cdf0e10cSrcweir&apos; a two-dimensional string-Array
489cdf0e10cSrcweirFunction GetFilterName(sMimetypeorExtension as String, sFilterName(), sExtension as string, FilterIndex as Integer) as String
490cdf0e10cSrcweirDim i as Integer
491cdf0e10cSrcweirDim MaxIndex as Integer
492cdf0e10cSrcweirDim sLocFilterlist() as String
493cdf0e10cSrcweir	For i = 0 To Ubound(sFiltername(),1)
494cdf0e10cSrcweir		If Instr(1,sFilterName(i,0),sMimeTypeOrExtension) &lt;&gt; 0 Then
495cdf0e10cSrcweir			sLocFilterList() = ArrayoutofString(sFiltername(i,0),&quot;|&quot;, MaxIndex)
496cdf0e10cSrcweir			If MaxIndex = 0 Then
497cdf0e10cSrcweir				sExtension = sFiltername(i,2)
498cdf0e10cSrcweir				GetFilterName = sFilterName(i,1)
499cdf0e10cSrcweir			Else
500cdf0e10cSrcweir				Dim b as Integer
501cdf0e10cSrcweir				Dim sLocExtensionList() as String
502cdf0e10cSrcweir				b =	SearchArrayForPartString(sMimetypeOrExtension, sLocFilterList())
503cdf0e10cSrcweir				sLocFilterList() = ArrayoutofString(sFiltername(i,1),&quot;|&quot;, MaxIndex)
504cdf0e10cSrcweir				GetFilterName = sLocFilterList(b)
505cdf0e10cSrcweir				sLocExtensionList() = ArrayoutofString(sFilterName(i,2), &quot;|&quot;, MaxIndex)
506cdf0e10cSrcweir				sExtension = sLocExtensionList(b)
507cdf0e10cSrcweir			End If
508cdf0e10cSrcweir			Exit For
509cdf0e10cSrcweir		End If
510cdf0e10cSrcweir	Next
511cdf0e10cSrcweir	FilterIndex = i
512cdf0e10cSrcweirEnd Function
513cdf0e10cSrcweir
514cdf0e10cSrcweir
515cdf0e10cSrcweirFunction SearchArrayforPartString(SearchString as String, LocList()) as Integer
516cdf0e10cSrcweirDim i as Integer
517cdf0e10cSrcweirDim a as Integer
518cdf0e10cSrcweirDim StringList() as String
519cdf0e10cSrcweir	For i = Lbound(LocList(),1) to Ubound(LocList(),1)
520cdf0e10cSrcweir		StringList() = ArrayoutofString(LocList(i), &quot;|&quot;)
521cdf0e10cSrcweir		For a = 0 To Ubound(StringList())
522cdf0e10cSrcweir			If (Instr(1, SearchString, StringList(a)) &lt;&gt; 0) Then
523cdf0e10cSrcweir				SearchArrayForPartString() = i
524cdf0e10cSrcweir				Exit Function
525cdf0e10cSrcweir			End If
526cdf0e10cSrcweir		Next a
527cdf0e10cSrcweir	Next i
528cdf0e10cSrcweir	SearchArrayForPartString() = -1
529cdf0e10cSrcweirEnd Function
530cdf0e10cSrcweir
531cdf0e10cSrcweir
532cdf0e10cSrcweirSub CreateLogTable(ApplIndex as Integer, CurFileContent as String, sFilterName() as String)
533cdf0e10cSrcweirDim oLogCursor as Object
534cdf0e10cSrcweirDim oLogRows as Object
535cdf0e10cSrcweirDim FilterIndex as Integer
536cdf0e10cSrcweirDim sDocumentType as String
537cdf0e10cSrcweirDim oTextCursor
538cdf0e10cSrcweirDim oCell
539cdf0e10cSrcweir	If Not bLogExists Then
540cdf0e10cSrcweir        Exit Sub
541cdf0e10cSrcweir    End If
542cdf0e10cSrcweir	bFilterTracerIsinsideTable = False
543cdf0e10cSrcweir	FilterIndex = GetIndexForPartStringinMultiArray(sFilterName(), CurFileContent, 0)
544cdf0e10cSrcweir	sDocumentType = sFiltername(FilterIndex,3)
545cdf0e10cSrcweir	oLogCursor = oLogDocument.Text.createTextCursor()
546cdf0e10cSrcweir	oLogCursor.GotoEnd(False)
547cdf0e10cSrcweir	If Not bIsFirstLogTable Then
548cdf0e10cSrcweir		oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
549cdf0e10cSrcweir	Else
550cdf0e10cSrcweir		bisFirstLogTable = False
551cdf0e10cSrcweir	End If
552cdf0e10cSrcweir	oLogCursor.HyperLinkURL = &quot;&quot;
553cdf0e10cSrcweir	oLogCursor.HyperLinkName = &quot;&quot;
554cdf0e10cSrcweir	oLogCursor.HyperLinkTarget = &quot;&quot;
555cdf0e10cSrcweir	oLogCursor.ParaStyleName = &quot;Heading 1&quot;
556cdf0e10cSrcweir	oLogCursor.setString(sDocumentType)
557cdf0e10cSrcweir	If WizardMode = SBMICROSOFTMODE Then
558cdf0e10cSrcweir		If bFilterTracingAvailable Then
559cdf0e10cSrcweir			If bMSApplFilterTracingAvailable(ApplIndex) Then
560cdf0e10cSrcweir				Dim CurFilterTracingPath as String
561cdf0e10cSrcweir				CurFilterTracingPath = FilterTracingLogPath(ApplIndex)
562cdf0e10cSrcweir				bFilterTracerIsinsideTable = (bTakeOverTargetName(ApplIndex) Or bTakeOverPathName(ApplIndex))
563cdf0e10cSrcweir				If Not bFilterTracerIsinsideTable Then
564cdf0e10cSrcweir					oLogCursor.CollapseToEnd()
565cdf0e10cSrcweir					oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
566cdf0e10cSrcweir					InsertCommandButtonatViewCursor(oLogDocument, oLogCursor, CurFilterTracingPath)
567cdf0e10cSrcweir				End If
568cdf0e10cSrcweir			End If
569cdf0e10cSrcweir		End If
570cdf0e10cSrcweir	End If
571cdf0e10cSrcweir	oLogCursor.CollapsetoEnd()
572cdf0e10cSrcweir	oLogDocument.Text.insertControlCharacter(oLogCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
573cdf0e10cSrcweir	oLogTable =  oLogDocument.CreateInstance(&quot;com.sun.star.text.TextTable&quot;)
574cdf0e10cSrcweir	oLogTable.RepeatHeadline = true
575cdf0e10cSrcweir	If bFilterTracerIsinsideTable Then
576cdf0e10cSrcweir		oLogTable.initialize(2,3)
577cdf0e10cSrcweir	End If
578cdf0e10cSrcweir	oLogCursor.Text.InsertTextContent(oLogCursor, oLogTable, True)
579cdf0e10cSrcweir	oTextCursor = oLogTable.GetCellbyPosition(0,0).createTextCursor()
580cdf0e10cSrcweir	oTextCursor.SetString(sSourceDocuments)
581cdf0e10cSrcweir	oTextCursor = oLogTable.GetCellbyPosition(1,0).createTextCursor()
582cdf0e10cSrcweir	oTextCursor.SetString(sTargetDocuments)
583cdf0e10cSrcweir	If bFilterTracerIsinsideTable Then
584cdf0e10cSrcweir		oTextCursor = oLogTable.GetCellbyPosition(2,0).createTextCursor()
585cdf0e10cSrcweir		oTextCursor.SetString(&quot;FilterTracer&quot;)
586cdf0e10cSrcweir	End If
587cdf0e10cSrcweir	bInsertRow = False
588cdf0e10cSrcweirEnd Sub
589cdf0e10cSrcweir
590cdf0e10cSrcweir
591cdf0e10cSrcweirFunction GetSize(iWidth, iHeight) As New com.sun.star.awt.Size
592cdf0e10cSrcweirDim aSize As New com.sun.star.awt.Size
593cdf0e10cSrcweir	aSize.Width = iWidth
594cdf0e10cSrcweir	aSize.Height = iHeight
595cdf0e10cSrcweir	GetSize() = aSize
596cdf0e10cSrcweirEnd Function
597cdf0e10cSrcweir
598cdf0e10cSrcweir
599cdf0e10cSrcweirSub InsertCommandButtonatViewCursor(oLocDocument, oLocCursor, TargetUrl as String, Optional aSize)
600cdf0e10cSrcweirDim oDocument
601cdf0e10cSrcweirDim oController
602cdf0e10cSrcweirDim oCommandButton
603cdf0e10cSrcweirDim oShape
604cdf0e10cSrcweirDim oDrawPage
605cdf0e10cSrcweirDim oCommandControl
606cdf0e10cSrcweirDim oEvent
607cdf0e10cSrcweirDim oCell
608cdf0e10cSrcweir	oCommandButton = oLocDocument.createInstance(&quot;com.sun.star.form.component.CommandButton&quot;)
609cdf0e10cSrcweir	oShape = oLocDocument.CreateInstance (&quot;com.sun.star.drawing.ControlShape&quot;)
610cdf0e10cSrcweir	If IsMissing(aSize) Then
611cdf0e10cSrcweir		oShape.Size = GetSize(4000, 600)
612cdf0e10cSrcweir	End If
613cdf0e10cSrcweir	oCommandButton.Label = FileNameoutofPath(Targeturl)
614cdf0e10cSrcweir	oCommandButton.TargetFrame = &quot;_default&quot;
615cdf0e10cSrcweir	oCommandButton.ButtonType = com.sun.star.form.FormButtonType.URL
616cdf0e10cSrcweir	oCommandbutton.DispatchUrlInternal = True
617cdf0e10cSrcweir	oCommandButton.TargetURL = ConverttoUrl(TargetUrl)
618cdf0e10cSrcweir	oShape.Control = oCommandbutton
619cdf0e10cSrcweir	oLocCursor.Text.InsertTextContent(oLocCursor, oShape, True)
620cdf0e10cSrcweirEnd Sub
621cdf0e10cSrcweir
622cdf0e10cSrcweir
623cdf0e10cSrcweir
624cdf0e10cSrcweirSub CreateLogDocument(HiddenProperties())
625cdf0e10cSrcweirDim OpenProperties(0) as new com.sun.star.beans.PropertyValue
626cdf0e10cSrcweirDim NoArgs()
627cdf0e10cSrcweirDim i as Integer
628cdf0e10cSrcweirDim bLogIsThere as Boolean
629cdf0e10cSrcweir	If ImportDialog.chkLogfile.State = 1 Then
630cdf0e10cSrcweir		i = 2
631cdf0e10cSrcweir		OpenProperties(0).Name = &quot;Hidden&quot;
632cdf0e10cSrcweir		OpenProperties(0).Value = True
633cdf0e10cSrcweir		oLogDocument = StarDesktop.LoadComponentFromURL(&quot;private:factory/swriter&quot;, &quot;_default&quot;, 4, OpenProperties())
634cdf0e10cSrcweir		SOWorkPath = RTrimStr(SOWorkPath,&quot;/&quot;)
635cdf0e10cSrcweir		sLogUrl = SOWorkPath &amp; &quot;/Logfile.odt&quot;
636cdf0e10cSrcweir		Do
637cdf0e10cSrcweir			bLogIsThere = oUcb.Exists(sLogUrl)
638cdf0e10cSrcweir			If bLogIsThere Then
639cdf0e10cSrcweir				If i = 2 Then
640cdf0e10cSrcweir					sLogUrl = ReplaceString(sLogUrl, &quot;/Logfile_2.odt&quot;, &quot;/Logfile.odt&quot;)
641cdf0e10cSrcweir				Else
642cdf0e10cSrcweir					sLogUrl = ReplaceString(sLogUrl, &quot;/Logfile_&quot; &amp; cStr(i) &amp; &quot;.odt&quot;, &quot;/Logfile_&quot; &amp; cStr(i-1) &amp; &quot;.odt&quot;)
643cdf0e10cSrcweir				End If
644cdf0e10cSrcweir				i = i + 1
645cdf0e10cSrcweir			End If
646cdf0e10cSrcweir		Loop Until Not bLogIsThere
647cdf0e10cSrcweir		bLogExists = True
648cdf0e10cSrcweir		oLogDocument.StoreAsUrl(sLogUrl, NoArgs())
649cdf0e10cSrcweir	End If
650cdf0e10cSrcweirEnd Sub
651cdf0e10cSrcweir
652cdf0e10cSrcweir
653cdf0e10cSrcweirFunction GetFilterTracingLogPath(sTargetUrl as String, ApplIndex) as String
654cdf0e10cSrcweirDim TargetFileName as String
655cdf0e10cSrcweirDim sTargetFolder as String
656cdf0e10cSrcweirDim CurFilterTracingPath as String
657cdf0e10cSrcweirDim CurFilterTracingname as String
658cdf0e10cSrcweirDim CurFilterFolder as String
659cdf0e10cSrcweir		CurFilterTracingPath = FilterTracingLogPath(ApplIndex)
660cdf0e10cSrcweir		If bTakeOverTargetName(ApplIndex) Then
661cdf0e10cSrcweir			TargetFilename = GetFileNameWithoutextension(sTargetUrl, &quot;/&quot;)
662cdf0e10cSrcweir			CurFilterFolder = DirectoryNameoutofPath(FilterTracingLogPath(ApplIndex), &quot;/&quot;)
663cdf0e10cSrcweir			CurFilterTracingpath = CurFilterFolder &amp; &quot;/&quot; &amp; TargetFilename &amp; &quot;.log&quot;
664cdf0e10cSrcweir		End If
665cdf0e10cSrcweir		If bTakeOverPathName(ApplIndex) Then  &apos;Replace the Folder in the FilterTracerpath by the Folder of the targetUrl
666cdf0e10cSrcweir			sTargetFolder = DirectoryNameoutofPath(sTargetUrl,&quot;/&quot;)
667cdf0e10cSrcweir			CurFilterTracingPath = sTargetFolder &amp; &quot;/&quot; &amp; FileNameoutofPath(CurFilterTracingPath, &quot;/&quot;)
668cdf0e10cSrcweir		End If
669cdf0e10cSrcweir		GetFilterTracingLogPath() = CurFilterTracingPath
670cdf0e10cSrcweirEnd Function
671cdf0e10cSrcweir
672cdf0e10cSrcweir
673cdf0e10cSrcweirSub InsertTargetUrlToLogDocument(sTargetUrl as String, sComment as String, ApplIndex as Integer)
674cdf0e10cSrcweirDim oCell
675cdf0e10cSrcweirDim oTextCursor
676cdf0e10cSrcweirDim CurFilterTracingpath as String
677cdf0e10cSrcweir	If (bLogExists) And (sTargetUrl &lt;&gt; &quot;&quot;) Then
678cdf0e10cSrcweir		If sTargetUrl &lt;&gt; &quot;&quot; Then
679cdf0e10cSrcweir			oCell = oLogTable.GetCellbyPosition(1,oLogTable.Rows.Count-1)
680cdf0e10cSrcweir			InsertCommentToLogCell(sComment, oCell)
681cdf0e10cSrcweir			InsertHyperLinkToLogCell(sTargetUrl, oCell)
682cdf0e10cSrcweir			If bFilterTracerIsinsideTable Then
683cdf0e10cSrcweir				oCell = oLogTable.getCellByPosition(2, oLogTable.Rows.Count-1)
684cdf0e10cSrcweir				oTextCursor = oCell.Text.CreateTextCursor()
685cdf0e10cSrcweir				CurFilterTracingpath = GetFilterTracingLogPath(sTargetUrl, ApplIndex)
686cdf0e10cSrcweir				InsertCommandButtonatViewCursor(oLogDocument, oTextCursor, CurFilterTracingPath)
687cdf0e10cSrcweir			End If
688cdf0e10cSrcweir			oLogDocument.Store()
689cdf0e10cSrcweir		End If
690cdf0e10cSrcweir	End If
691cdf0e10cSrcweirEnd Sub
692cdf0e10cSrcweir
693cdf0e10cSrcweir
694cdf0e10cSrcweirSub InsertSourceUrlToLogDocument(SourceUrl as String, sComment)		&apos;
695cdf0e10cSrcweirDim oCell as Object
696cdf0e10cSrcweir	If bLogExists Then
697cdf0e10cSrcweir		If bInsertRow Then
698cdf0e10cSrcweir			oLogTable.Rows.InsertByIndex(oLogTable.Rows.Count,1)
699cdf0e10cSrcweir		Else
700cdf0e10cSrcweir			bInsertRow = True
701cdf0e10cSrcweir		End If
702cdf0e10cSrcweir		oCell = oLogTable.GetCellbyPosition(0,oLogTable.Rows.Count-1)
703cdf0e10cSrcweir		InsertCommentToLogCell(sComment, oCell)
704cdf0e10cSrcweir		InsertHyperLinkToLogCell(SourceUrl, oCell)
705cdf0e10cSrcweir		oLogDocument.Store()
706cdf0e10cSrcweir	End If
707cdf0e10cSrcweirEnd Sub
708cdf0e10cSrcweir
709cdf0e10cSrcweir
710cdf0e10cSrcweirSub InsertHyperLinkToLogCell(sUrl as String, oCell as Object)
711cdf0e10cSrcweirDim oLogCursor as Object
712cdf0e10cSrcweirDim LocFileName as String
713cdf0e10cSrcweir	oLogCursor = oCell.createTextCursor()
714cdf0e10cSrcweir	oLogCursor.CollapseToStart()
715cdf0e10cSrcweir	oLogCursor.HyperLinkURL = sUrl
716cdf0e10cSrcweir	oLogCursor.HyperLinkName = sUrl
717cdf0e10cSrcweir	oLogCursor.HyperLinkTarget = sUrl
718cdf0e10cSrcweir	LocFileName = FileNameOutOfPath(sUrl)
719cdf0e10cSrcweir	oCell.InsertString(oLogCursor, LocFileName,False)
720cdf0e10cSrcweirEnd Sub
721cdf0e10cSrcweir
722cdf0e10cSrcweir
723cdf0e10cSrcweirSub InsertCommentToLogCell(sComment as string, oCell as Object)
724cdf0e10cSrcweirDim oCommentCursor as Object
725cdf0e10cSrcweir	If sComment &lt;&gt; &quot;&quot; Then
726cdf0e10cSrcweir		oCommentCursor = oCell.createTextCursor()
727cdf0e10cSrcweir		oCell.insertControlCharacter(oCommentCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False)
728cdf0e10cSrcweir		oCell.insertString(oCommentCursor, sComment, false)
729cdf0e10cSrcweir	End If
730cdf0e10cSrcweirEnd Sub
731cdf0e10cSrcweir
732cdf0e10cSrcweir
733cdf0e10cSrcweirSub AddLogStatistics()
734cdf0e10cSrcweirDim oCell as Object
735cdf0e10cSrcweirDim oLogCursor as Object
736cdf0e10cSrcweirDim MaxRowIndex as Integer
737cdf0e10cSrcweir	If bLogExists Then
738cdf0e10cSrcweir		MaxRowIndex = oLogTable.Rows.Count
739cdf0e10cSrcweir		sLogSummary = ReplaceString(sLogSummary, FileCount, &quot;&lt;COUNT&gt;&quot;)
740cdf0e10cSrcweir&apos;		oLogTable.Rows.InsertByIndex(MaxRowIndex, 1)
741cdf0e10cSrcweir&apos;		oCell = oLogTable.GetCellbyPosition(0, MaxRowIndex)
742cdf0e10cSrcweir&apos;		oLogCursor = oCell.createTextCursor()
743cdf0e10cSrcweir&apos;		oCell.InsertString(oLogCursor, sLogSummary,False)
744cdf0e10cSrcweir&apos;		MergeRange(oLogTable, oCell, 1)
745cdf0e10cSrcweir
746cdf0e10cSrcweir		oLogCursor = oLogDocument.Text.CreateTextCursor
747cdf0e10cSrcweir		oLogCursor.gotoEnd(False)
748cdf0e10cSrcweir		oLogCursor.HyperLinkURL = &quot;&quot;
749cdf0e10cSrcweir		oLogCursor.HyperLinkName = &quot;&quot;
750cdf0e10cSrcweir		oLogCursor.HyperLinkTarget = &quot;&quot;
751cdf0e10cSrcweir		oLogCursor.SetString(sLogSummary)
752cdf0e10cSrcweir		oLogDocument.Store()
753cdf0e10cSrcweir		oLogDocument.Dispose()
754cdf0e10cSrcweir		bLogExists = False
755cdf0e10cSrcweir	End If
756cdf0e10cSrcweirEnd Sub
757cdf0e10cSrcweir
758cdf0e10cSrcweir
759cdf0e10cSrcweir
760cdf0e10cSrcweirFunction CheckIfMacroExists(oBasicLibraries as Object, sComment as String) as Boolean
761cdf0e10cSrcweirDim ModuleNames() as String
762cdf0e10cSrcweirDim ModuleName as String
763cdf0e10cSrcweirDim MaxLibIndex as Integer
764cdf0e10cSrcweirDim MaxModuleIndex as Integer
765cdf0e10cSrcweirDim bMacroExists as Boolean
766cdf0e10cSrcweirDim n as Integer
767cdf0e10cSrcweirDim m as Integer
768cdf0e10cSrcweirDim LibName as String
769cdf0e10cSrcweirDim sBasicCode as String
770cdf0e10cSrcweirDim oLibrary as Object
771cdf0e10cSrcweir	bMacroExists = False
772cdf0e10cSrcweir	bMacroExists = oBasicLibraries.hasElements
773cdf0e10cSrcweir	If bMacroExists Then
774cdf0e10cSrcweir		MaxLibIndex = Ubound(oBasicLibraries.ElementNames())
775cdf0e10cSrcweir		For n = 0 To MaxLibIndex
776cdf0e10cSrcweir			LibName = oBasicLibraries.ElementNames(n)
777cdf0e10cSrcweir            If oBasicLibraries.isLibraryLoaded(LibName) Then
778cdf0e10cSrcweir    			oLibrary = oBasicLibraries.getbyName(LibName)
779cdf0e10cSrcweir    			If oLibrary.hasElements() Then
780cdf0e10cSrcweir    				MaxModuleIndex = Ubound(oLibrary.ElementNames())
781cdf0e10cSrcweir    				For m = 0 To MaxModuleIndex
782cdf0e10cSrcweir    					ModuleName = oLibrary.ElementNames(m)
783cdf0e10cSrcweir    					sBasicCode = oLibrary.getbyName(ModuleName)
784cdf0e10cSrcweir    					If sBasicCode &lt;&gt; &quot;&quot; Then
785cdf0e10cSrcweir    						ConcatComment(sComment, sReeditMacro)
786cdf0e10cSrcweir    						CheckIfMacroExists() = True
787cdf0e10cSrcweir    						Exit Function
788cdf0e10cSrcweir    					End If
789cdf0e10cSrcweir    				Next m
790cdf0e10cSrcweir                End If
791cdf0e10cSrcweir			End If
792cdf0e10cSrcweir		Next n
793cdf0e10cSrcweir	End If
794cdf0e10cSrcweir	CheckIfMacroExists() = False
795cdf0e10cSrcweirEnd Function
796cdf0e10cSrcweir
797cdf0e10cSrcweir
798cdf0e10cSrcweir
799cdf0e10cSrcweirFunction CheckPassWordProtection(oDocument as Object)
800cdf0e10cSrcweirDim bIsPassWordProtected as Boolean
801cdf0e10cSrcweirDim i as Integer
802cdf0e10cSrcweirDim oArgs()
803cdf0e10cSrcweirDim MaxIndex as Integer
804cdf0e10cSrcweirDim sblabla as String
805cdf0e10cSrcweir	bIsPassWordProtected = false
806cdf0e10cSrcweir 	oArgs() = oDocument.getArgs()
807cdf0e10cSrcweir 	MaxIndex = Ubound(oArgs())
808cdf0e10cSrcweir	For i = 0 To MaxIndex
809cdf0e10cSrcweir		sblabla = oArgs(i).Name
810cdf0e10cSrcweir		If oArgs(i).Name = &quot;Password&quot; Then
811cdf0e10cSrcweir			bIsPassWordProtected = True
812cdf0e10cSrcweir			sCurPassWord = oArgs(i).Value
813cdf0e10cSrcweir			Exit For
814cdf0e10cSrcweir		End If
815cdf0e10cSrcweir	Next i
816cdf0e10cSrcweir	CheckPassWordProtection() = bIsPassWordProtected
817cdf0e10cSrcweirEnd Function
818cdf0e10cSrcweir
819cdf0e10cSrcweir
820cdf0e10cSrcweirSub OpenLogDocument()
821cdf0e10cSrcweir
822cdf0e10cSrcweir	bShowLogFile = True
823cdf0e10cSrcweir	ImportDialogArea.endexecute()
824cdf0e10cSrcweir
825cdf0e10cSrcweirEnd Sub
826cdf0e10cSrcweir
827cdf0e10cSrcweir
828cdf0e10cSrcweirSub MergeRange(oTable as Object, oCell as Object, MergeCount as Integer)
829cdf0e10cSrcweirDim oTableCursor as Object
830cdf0e10cSrcweir	oTableCursor = oTable.createCursorByCellName(oCell.CellName)
831cdf0e10cSrcweir	oTableCursor.goRight(MergeCount, True)
832cdf0e10cSrcweir	oTableCursor.mergeRange()
833cdf0e10cSrcweirEnd Sub
834cdf0e10cSrcweir
835cdf0e10cSrcweir
836cdf0e10cSrcweirFunction ConcatComment(sComment as String, AdditionalComment as String)
837cdf0e10cSrcweir	If sComment = &quot;&quot; Then
838cdf0e10cSrcweir		sComment = AdditionalComment
839cdf0e10cSrcweir	Else
840cdf0e10cSrcweir		sComment = sComment &amp; chr(13) + AdditionalComment
841cdf0e10cSrcweir	End If
842cdf0e10cSrcweir	ConcatComment = sComment
843cdf0e10cSrcweirEnd Function
844cdf0e10cSrcweir</script:module>
845