1cdf0e10cSrcweir<?xml version="1.0" encoding="UTF-8"?> 2cdf0e10cSrcweir<!DOCTYPE script:module PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "module.dtd"> 3*3e02b54dSAndrew Rist<!--*********************************************************** 4*3e02b54dSAndrew Rist * 5*3e02b54dSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 6*3e02b54dSAndrew Rist * or more contributor license agreements. See the NOTICE file 7*3e02b54dSAndrew Rist * distributed with this work for additional information 8*3e02b54dSAndrew Rist * regarding copyright ownership. The ASF licenses this file 9*3e02b54dSAndrew Rist * to you under the Apache License, Version 2.0 (the 10*3e02b54dSAndrew Rist * "License"); you may not use this file except in compliance 11*3e02b54dSAndrew Rist * with the License. You may obtain a copy of the License at 12*3e02b54dSAndrew Rist * 13*3e02b54dSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 14*3e02b54dSAndrew Rist * 15*3e02b54dSAndrew Rist * Unless required by applicable law or agreed to in writing, 16*3e02b54dSAndrew Rist * software distributed under the License is distributed on an 17*3e02b54dSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18*3e02b54dSAndrew Rist * KIND, either express or implied. See the License for the 19*3e02b54dSAndrew Rist * specific language governing permissions and limitations 20*3e02b54dSAndrew Rist * under the License. 21*3e02b54dSAndrew Rist * 22*3e02b54dSAndrew Rist ***********************************************************--> 23cdf0e10cSrcweir<script:module xmlns:script="http://openoffice.org/2000/script" script:name="UCB" script:language="StarBasic">'Option explicit 24cdf0e10cSrcweirPublic oDocument 25cdf0e10cSrcweirPublic oDocInfo as object 26cdf0e10cSrcweirConst SBMAXDIRCOUNT = 10 27cdf0e10cSrcweirDim CurDirMaxCount as Integer 28cdf0e10cSrcweirDim sDirArray(SBMAXDIRCOUNT-1) as String 29cdf0e10cSrcweirDim DirIndex As Integer 30cdf0e10cSrcweirDim iDirCount as Integer 31cdf0e10cSrcweirPublic bInterruptSearch as Boolean 32cdf0e10cSrcweirPublic NoArgs()as New com.sun.star.beans.PropertyValue 33cdf0e10cSrcweir 34cdf0e10cSrcweirSub Main() 35cdf0e10cSrcweirDim LocsfileContent(0) as String 36cdf0e10cSrcweir LocsfileContent(0) = "*" 37cdf0e10cSrcweir ReadDirectories("file:///space", LocsfileContent(), True, False, false) 38cdf0e10cSrcweirEnd Sub 39cdf0e10cSrcweir 40cdf0e10cSrcweir' ReadDirectories( sSourceDir, bRecursive, bCheckRealType, False, sFileContent(), sLocExtension) 41cdf0e10cSrcweir 42cdf0e10cSrcweirFunction ReadDirectories(ByVal AnchorDir As String, bRecursive as Boolean, bcheckFileType as Boolean, bGetByTitle as Boolean, Optional sFileContent(), Optional sExtension as String) 43cdf0e10cSrcweirDim i as integer 44cdf0e10cSrcweirDim Status as Object 45cdf0e10cSrcweirDim FileCountinDir as Integer 46cdf0e10cSrcweirDim RealFileContent as String 47cdf0e10cSrcweirDim FileName as string 48cdf0e10cSrcweirDim oUcbObject as Object 49cdf0e10cSrcweirDim DirContent() 50cdf0e10cSrcweirDim CurIndex as Integer 51cdf0e10cSrcweirDim MaxIndex as Integer 52cdf0e10cSrcweirDim StartUbound as Integer 53cdf0e10cSrcweirDim FileExtension as String 54cdf0e10cSrcweir StartUbound = 5 55cdf0e10cSrcweir MaxIndex = StartUBound 56cdf0e10cSrcweir CurDirMaxCount = SBMAXDIRCOUNT 57cdf0e10cSrcweirDim sFileArray(StartUbound,1) as String 58cdf0e10cSrcweir On Local Error Goto FILESYSTEMPROBLEM: 59cdf0e10cSrcweir CurIndex = -1 60cdf0e10cSrcweir ' Todo: Is the last separator valid? 61cdf0e10cSrcweir DirIndex = 0 62cdf0e10cSrcweir sDirArray(iDirIndex) = AnchorDir 63cdf0e10cSrcweir iDirCount = 1 64cdf0e10cSrcweir oDocInfo = CreateUnoService("com.sun.star.document.DocumentProperties") 65cdf0e10cSrcweir oUcbObject = createUnoService("com.sun.star.ucb.SimpleFileAccess") 66cdf0e10cSrcweir If oUcbObject.Exists(AnchorDir) Then 67cdf0e10cSrcweir Do 68cdf0e10cSrcweir AnchorDir = sDirArray(DirIndex) 69cdf0e10cSrcweir On Local Error Resume Next 70cdf0e10cSrcweir DirContent() = oUcbObject.GetFolderContents(AnchorDir,True) 71cdf0e10cSrcweir DirIndex = DirIndex + 1 72cdf0e10cSrcweir On Local Error Goto 0 73cdf0e10cSrcweir On Local Error Goto FILESYSTEMPROBLEM: 74cdf0e10cSrcweir If Ubound(DirContent()) <> -1 Then 75cdf0e10cSrcweir FileCountinDir = Ubound(DirContent())+ 1 76cdf0e10cSrcweir For i = 0 to FilecountinDir -1 77cdf0e10cSrcweir If bInterruptSearch = True Then 78cdf0e10cSrcweir Exit Do 79cdf0e10cSrcweir End If 80cdf0e10cSrcweir 81cdf0e10cSrcweir Filename = DirContent(i) 82cdf0e10cSrcweir If oUcbObject.IsFolder(FileName) Then 83cdf0e10cSrcweir If brecursive Then 84cdf0e10cSrcweir AddFoldertoList(FileName, DirIndex) 85cdf0e10cSrcweir End If 86cdf0e10cSrcweir Else 87cdf0e10cSrcweir If bcheckFileType Then 88cdf0e10cSrcweir RealFileContent = GetRealFileContent(FileName) 89cdf0e10cSrcweir Else 90cdf0e10cSrcweir RealFileContent = GetFileNameExtension(FileName) 91cdf0e10cSrcweir End If 92cdf0e10cSrcweir If RealFileContent <> "" Then 93cdf0e10cSrcweir ' Retrieve the Index in the Array, where a Filename is positioned 94cdf0e10cSrcweir If Not IsMissing(sFileContent()) Then 95cdf0e10cSrcweir If (FieldinArray(sFileContent(), Ubound(sFileContent), RealFileContent)) Then 96cdf0e10cSrcweir ' The extension of the current file passes the filter and is therefor admitted to the 97cdf0e10cSrcweir ' fileList 98cdf0e10cSrcweir If Not IsMissing(sExtension) Then 99cdf0e10cSrcweir If sExtension <> "" Then 100cdf0e10cSrcweir ' Consider that some Formats like old StarOffice Templates with the extension ".vor" can only be 101cdf0e10cSrcweir ' precisely identified by their mimetype and their extension 102cdf0e10cSrcweir FileExtension = GetFileNameExtension(FileName) 103cdf0e10cSrcweir If FileExtension = sExtension Then 104cdf0e10cSrcweir AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex) 105cdf0e10cSrcweir End If 106cdf0e10cSrcweir Else 107cdf0e10cSrcweir AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex) 108cdf0e10cSrcweir End If 109cdf0e10cSrcweir Else 110cdf0e10cSrcweir AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex) 111cdf0e10cSrcweir End If 112cdf0e10cSrcweir End If 113cdf0e10cSrcweir Else 114cdf0e10cSrcweir AddFileNameToList(sFileArray(), FileName, RealFileContent, bGetByTitle, CurIndex) 115cdf0e10cSrcweir End If 116cdf0e10cSrcweir If CurIndex = MaxIndex Then 117cdf0e10cSrcweir MaxIndex = MaxIndex + StartUbound 118cdf0e10cSrcweir ReDim Preserve sFileArray(MaxIndex,1) as String 119cdf0e10cSrcweir End If 120cdf0e10cSrcweir End If 121cdf0e10cSrcweir End If 122cdf0e10cSrcweir Next i 123cdf0e10cSrcweir End If 124cdf0e10cSrcweir Loop Until DirIndex >= iDirCount 125cdf0e10cSrcweir If CurIndex > -1 Then 126cdf0e10cSrcweir ReDim Preserve sFileArray(CurIndex,1) as String 127cdf0e10cSrcweir Else 128cdf0e10cSrcweir ReDim sFileArray() as String 129cdf0e10cSrcweir End If 130cdf0e10cSrcweir Else 131cdf0e10cSrcweir Msgbox("Directory '" & ConvertFromUrl(AnchorDir) & "' does not exist!", 16, GetProductName()) 132cdf0e10cSrcweir End If 133cdf0e10cSrcweir ReadDirectories() = sFileArray() 134cdf0e10cSrcweir Exit Function 135cdf0e10cSrcweir 136cdf0e10cSrcweir FILESYSTEMPROBLEM: 137cdf0e10cSrcweir Msgbox("Sorry, Filesystem Problem") 138cdf0e10cSrcweir ReadDirectories() = sFileArray() 139cdf0e10cSrcweir Resume LEAVEPROC 140cdf0e10cSrcweir LEAVEPROC: 141cdf0e10cSrcweirEnd Function 142cdf0e10cSrcweir 143cdf0e10cSrcweir 144cdf0e10cSrcweirSub AddFoldertoList(sDirURL as String, iDirIndex) 145cdf0e10cSrcweir iDirCount = iDirCount + 1 146cdf0e10cSrcweir If iDirCount = CurDirMaxCount Then 147cdf0e10cSrcweir CurDirMaxCount = CurDirMaxCount + SBMAXDIRCOUNT 148cdf0e10cSrcweir ReDim Preserve sDirArray(CurDirMaxCount) as String 149cdf0e10cSrcweir End If 150cdf0e10cSrcweir sDirArray(iDirCount-1) = sDirURL 151cdf0e10cSrcweirEnd Sub 152cdf0e10cSrcweir 153cdf0e10cSrcweir 154cdf0e10cSrcweirSub AddFileNameToList(sFileArray(), FileName as String, FileContent as String, bGetByTitle as Boolean, CurIndex) 155cdf0e10cSrcweirDim FileCount As Integer 156cdf0e10cSrcweir CurIndex = CurIndex + 1 157cdf0e10cSrcweir sFileArray(CurIndex,0) = FileName 158cdf0e10cSrcweir If bGetByTitle Then 159cdf0e10cSrcweir sFileArray(CurIndex,1) = RetrieveDocTitle(oDocInfo, FileName) 160cdf0e10cSrcweir ' Add the documenttitles to the Filearray 161cdf0e10cSrcweir Else 162cdf0e10cSrcweir sFileArray(CurIndex,1) = FileContent 163cdf0e10cSrcweir End If 164cdf0e10cSrcweirEnd Sub 165cdf0e10cSrcweir 166cdf0e10cSrcweir 167cdf0e10cSrcweirFunction RetrieveDocTitle(oDocProps as Object, sFileName as String) As String 168cdf0e10cSrcweirDim sDocTitle as String 169cdf0e10cSrcweir On Local Error Goto NOFILE 170cdf0e10cSrcweir oDocProps.loadFromMedium(sFileName, NoArgs()) 171cdf0e10cSrcweir sDocTitle = oDocProps.Title 172cdf0e10cSrcweir NOFILE: 173cdf0e10cSrcweir If Err <> 0 Then 174cdf0e10cSrcweir RetrieveDocTitle = "" 175cdf0e10cSrcweir RESUME CLR_ERROR 176cdf0e10cSrcweir End If 177cdf0e10cSrcweir CLR_ERROR: 178cdf0e10cSrcweir If sDocTitle = "" Then 179cdf0e10cSrcweir sDocTitle = GetFileNameWithoutExtension(sFilename, "/") 180cdf0e10cSrcweir End If 181cdf0e10cSrcweir RetrieveDocTitle = sDocTitle 182cdf0e10cSrcweirEnd Function 183cdf0e10cSrcweir 184cdf0e10cSrcweir 185cdf0e10cSrcweir' Retrieves The Filecontent of a Document by extracting the content 186cdf0e10cSrcweir' from the Header of the document 187cdf0e10cSrcweirFunction GetRealFileContent(FileName as String) As String 188cdf0e10cSrcweir On Local Error Goto NOFILE 189cdf0e10cSrcweir oTypeDetect = createUnoService("com.sun.star.document.TypeDetection") 190cdf0e10cSrcweir GetRealFileContent = oTypeDetect.queryTypeByURL(FileName) 191cdf0e10cSrcweir NOFILE: 192cdf0e10cSrcweir If Err <> 0 Then 193cdf0e10cSrcweir GetRealFileContent = "" 194cdf0e10cSrcweir resume CLR_ERROR 195cdf0e10cSrcweir End If 196cdf0e10cSrcweir CLR_ERROR: 197cdf0e10cSrcweirEnd Function 198cdf0e10cSrcweir 199cdf0e10cSrcweir 200cdf0e10cSrcweirFunction CopyRecursively(SourceFilePath as String, SourceStemDir as String, TargetStemDir as String) 201cdf0e10cSrcweirDim TargetDir as String 202cdf0e10cSrcweirDim TargetFile as String 203cdf0e10cSrcweir 204cdf0e10cSrcweir TargetFile= ReplaceString(SourceFilePath, TargetStemDir, SourceStemDir) 205cdf0e10cSrcweir TargetFileName = FileNameoutofPath(TargetFile,"/") 206cdf0e10cSrcweir TargetDir = DeleteStr(TargetFile, TargetFileName) 207cdf0e10cSrcweir CreateFolder(TargetDir) 208cdf0e10cSrcweir CopyRecursively() = TargetFile 209cdf0e10cSrcweirEnd Function 210cdf0e10cSrcweir 211cdf0e10cSrcweir 212cdf0e10cSrcweir' Opens a help url referenced by a Help ID that is retrieved from the calling button tag 213cdf0e10cSrcweirSub ShowHelperDialog(aEvent) 214cdf0e10cSrcweirDim oSystemNode as Object 215cdf0e10cSrcweirDim sSystem as String 216cdf0e10cSrcweirDim oLanguageNode as Object 217cdf0e10cSrcweirDim sLocale as String 218cdf0e10cSrcweirDim sLocaleList() as String 219cdf0e10cSrcweirDim sLanguage as String 220cdf0e10cSrcweirDim sHelpUrl as String 221cdf0e10cSrcweirDim sDocType as String 222cdf0e10cSrcweir HelpID = aEvent.Source.Model.Tag 223cdf0e10cSrcweir oLocDocument = StarDesktop.ActiveFrame.Controller.Model 224cdf0e10cSrcweir sDocType = GetDocumentType(oLocDocument) 225cdf0e10cSrcweir oSystemNode = GetRegistryKeyContent("org.openoffice.Office.Common/Help") 226cdf0e10cSrcweir sSystem = oSystemNode.GetByName("System") 227cdf0e10cSrcweir oLanguageNode = GetRegistryKeyContent("org.openoffice.Setup/L10N/") 228cdf0e10cSrcweir sLocale = oLanguageNode.getByName("ooLocale") 229cdf0e10cSrcweir sLocaleList() = ArrayoutofString(sLocale, "-") 230cdf0e10cSrcweir sLanguage = sLocaleList(0) 231cdf0e10cSrcweir sHelpUrl = "vnd.sun.star.help://" & sDocType & "/" & HelpID & "?Language=" & sLanguage & "&System=" & sSystem 232cdf0e10cSrcweir StarDesktop.LoadComponentfromUrl(sHelpUrl, "OFFICE_HELP", 63, NoArgs()) 233cdf0e10cSrcweirEnd Sub 234cdf0e10cSrcweir 235cdf0e10cSrcweir 236cdf0e10cSrcweirSub SaveDataToFile(FilePath as String, DataList()) 237cdf0e10cSrcweirDim FileChannel as Integer 238cdf0e10cSrcweirDim i as Integer 239cdf0e10cSrcweirDim oFile as Object 240cdf0e10cSrcweirDim oOutputStream as Object 241cdf0e10cSrcweirDim oStreamString as Object 242cdf0e10cSrcweirDim oUcb as Object 243cdf0e10cSrcweirDim sCRLF as String 244cdf0e10cSrcweir 245cdf0e10cSrcweir sCRLF = CHR(13) & CHR(10) 246cdf0e10cSrcweir oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess") 247cdf0e10cSrcweir oOutputStream = createUnoService("com.sun.star.io.TextOutputStream") 248cdf0e10cSrcweir If oUcb.Exists(FilePath) Then 249cdf0e10cSrcweir oUcb.Kill(FilePath) 250cdf0e10cSrcweir End If 251cdf0e10cSrcweir oFile = oUcb.OpenFileReadWrite(FilePath) 252cdf0e10cSrcweir oOutputStream.SetOutputStream(oFile.GetOutputStream) 253cdf0e10cSrcweir For i = 0 To Ubound(DataList()) 254cdf0e10cSrcweir oOutputStream.WriteString(DataList(i) & sCRLF) 255cdf0e10cSrcweir Next i 256cdf0e10cSrcweir oOutputStream.CloseOutput() 257cdf0e10cSrcweirEnd Sub 258cdf0e10cSrcweir 259cdf0e10cSrcweir 260cdf0e10cSrcweirFunction LoadDataFromFile(FilePath as String, DataList()) as Boolean 261cdf0e10cSrcweirDim oInputStream as Object 262cdf0e10cSrcweirDim i as Integer 263cdf0e10cSrcweirDim oUcb as Object 264cdf0e10cSrcweirDim oFile as Object 265cdf0e10cSrcweirDim MaxIndex as Integer 266cdf0e10cSrcweir oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess") 267cdf0e10cSrcweir If oUcb.Exists(FilePath) Then 268cdf0e10cSrcweir MaxIndex = 10 269cdf0e10cSrcweir oInputStream = createUnoService("com.sun.star.io.TextInputStream") 270cdf0e10cSrcweir oFile = oUcb.OpenFileReadWrite(FilePath) 271cdf0e10cSrcweir oInputStream.SetInputStream(oFile.GetInputStream) 272cdf0e10cSrcweir i = -1 273cdf0e10cSrcweir Redim Preserve DataList(MaxIndex) 274cdf0e10cSrcweir While Not oInputStream.IsEOF 275cdf0e10cSrcweir i = i + 1 276cdf0e10cSrcweir If i > MaxIndex Then 277cdf0e10cSrcweir MaxIndex = MaxIndex + 10 278cdf0e10cSrcweir Redim Preserve DataList(MaxIndex) 279cdf0e10cSrcweir End If 280cdf0e10cSrcweir DataList(i) = oInputStream.ReadLine 281cdf0e10cSrcweir Wend 282cdf0e10cSrcweir If i > -1 And i <> MaxIndex Then 283cdf0e10cSrcweir Redim Preserve DataList(i) 284cdf0e10cSrcweir End If 285cdf0e10cSrcweir LoadDataFromFile() = True 286cdf0e10cSrcweir oInputStream.CloseInput() 287cdf0e10cSrcweir Else 288cdf0e10cSrcweir LoadDataFromFile() = False 289cdf0e10cSrcweir End If 290cdf0e10cSrcweirEnd Function 291cdf0e10cSrcweir 292cdf0e10cSrcweir 293cdf0e10cSrcweirFunction CreateFolder(sNewFolder) as Boolean 294cdf0e10cSrcweirDim oUcb as Object 295cdf0e10cSrcweir oUcb = createUnoService("com.sun.star.ucb.SimpleFileAccess") 296cdf0e10cSrcweir On Local Error Goto NOSPACEONDRIVE 297cdf0e10cSrcweir If Not oUcb.Exists(sNewFolder) Then 298cdf0e10cSrcweir oUcb.CreateFolder(sNewFolder) 299cdf0e10cSrcweir End If 300cdf0e10cSrcweir CreateFolder = True 301cdf0e10cSrcweirNOSPACEONDRIVE: 302cdf0e10cSrcweir If Err <> 0 Then 303cdf0e10cSrcweir If InitResources("", "dbw") Then 304cdf0e10cSrcweir ErrMsg = GetResText(500) 305cdf0e10cSrcweir ErrMsg = ReplaceString(ErrMsg, chr(13), "<BR>") 306cdf0e10cSrcweir ErrMsg = ReplaceString(ErrMsg, sNewFolder, "%1") 307cdf0e10cSrcweir Msgbox(ErrMsg, 48, GetProductName()) 308cdf0e10cSrcweir End If 309cdf0e10cSrcweir CreateFolder = False 310cdf0e10cSrcweir Resume GOON 311cdf0e10cSrcweir End If 312cdf0e10cSrcweirGOON: 313cdf0e10cSrcweirEnd Function 314cdf0e10cSrcweir</script:module> 315