#
# This file is part of the LibreOffice project.
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This file incorporates work covered by the following license notice:
#
# 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 .
#
import traceback
'''
This class delivers static convenience methods
to use with ucb SimpleFileAccess service.
You can also instantiate the class, to encapsulate
some functionality of SimpleFileAccess. The instance
keeps a reference to an XSimpleFileAccess and an
XFileIdentifierConverter, saves the permanent
overhead of querying for those interfaces, and delivers
convenience methods for using them.
These Convenience methods include mainly Exception-handling.
'''
class FileAccess(object):
def __init__(self, xmsf):
#get the file identifier converter
self.filenameConverter = xmsf.createInstance(
"com.sun.star.ucb.FileContentProvider")
self.xInterface = xmsf.createInstance(
"com.sun.star.ucb.SimpleFileAccess")
@classmethod
def deleteLastSlashfromUrl(self, _sPath):
if _sPath.endswith("/"):
return _sPath[:-1]
else:
return _sPath
'''
Further information on arguments value see in OO Developer Guide,
chapter 6.2.7
@param xMSF
@param sPath
@param xSimpleFileAccess
@return the respective path of the office application.
A probable following "/" at the end is trimmed.
'''
@classmethod
def getOfficePath(self, xMSF, sPath, xSimpleFileAccess):
try:
ResultPath = ""
xInterface = xMSF.createInstance("com.sun.star.util.PathSettings")
ResultPath = str(getattr(xInterface, sPath))
ResultPath = self.deleteLastSlashfromUrl(ResultPath)
return ResultPath
except Exception:
traceback.print_exc()
return ""
@classmethod
def getFolderTitles(self, xMSF, FilterName, FolderName, resDict=None):
#Returns and ordered dict containing the template's name and path
locLayoutFiles = []
try:
xDocInterface = xMSF.createInstance(
"com.sun.star.document.DocumentProperties")
xInterface = xMSF.createInstance(
"com.sun.star.ucb.SimpleFileAccess")
nameList = xInterface.getFolderContents(FolderName, False)
if FilterName is None or FilterName == "":
FilterName = None
else:
FilterName += "-"
locLayoutDict = {}
for i in nameList:
fileName = self.getFilename(i)
if FilterName is None or fileName.startswith(FilterName):
xDocInterface.loadFromMedium(i, tuple())
if resDict is None:
title = xDocInterface.Title
else:
if xDocInterface.Title in resDict:
# localise string at runtime
title = resDict[xDocInterface.Title]
else:
title = xDocInterface.Title
locLayoutDict[title] = i
#sort the dictionary and create a list containing the
#keys list and the values list
keysList = sorted(locLayoutDict.keys())
valuesList= []
for i in keysList:
valuesList.append(locLayoutDict[i])
locLayoutFiles.append(keysList)
locLayoutFiles.append(valuesList)
except Exception:
traceback.print_exc()
return locLayoutFiles
@classmethod
def getTitle(self, xMSF, _sFile):
sTitle = ""
try:
xDocInterface = xMSF.createInstance(
"com.sun.star.document.DocumentProperties")
noArgs = []
xDocInterface.loadFromMedium(_sFile, noArgs)
sTitle = xDocInterface.getTitle()
except Exception:
traceback.print_exc()
return sTitle
def getPath(self, parentURL, childURL):
string = ""
if childURL is not None and childURL != "":
string = "/" + childURL
return self.filenameConverter.getSystemPathFromFileURL(
parentURL + string)
def copy(self, source, target):
try:
self.xInterface.copy(source, target)
return True
except Exception:
traceback.print_exc()
return False
def exists(self, filename, default):
try:
return self.xInterface.exists(filename)
except Exception:
traceback.print_exc()
return default
def delete(self, filename):
try:
self.xInterface.kill(filename)
return True
except Exception:
traceback.print_exc()
return False
# lists the files in a given directory
# @param dir
# @param includeFolders
# @return
def listFiles(self, folder, includeFolders):
try:
return self.xInterface.getFolderContents(folder, includeFolders)
except Exception:
traceback.print_exc()
return [""]
def getSize(self, url):
try:
return self.xInterface.getSize(url)
except Exception:
traceback.print_exc()
return -1
def getURL(self, parentURL, childPath):
if len(childPath) > 0 and childPath[0] == "/":
path = parentURL + childPath
else:
path = parentURL + "/" + childPath
return path
@classmethod
def getFilename(self, path, pathSeparator = "/"):
return path.split(pathSeparator)[-1]
'''
if the path points to file, gives the directory in which the file is.
'''
@classmethod
def getParentDir(self, url):
while url[-1] == "/":
url = url[:-1]
return url[:url.rfind("/")]
@classmethod
def connectURLs(self, urlFolder, urlFilename):
stringFolder = ""
stringFileName = urlFilename
if not urlFolder.endswith("/"):
stringFolder = "/"
if urlFilename.startswith("/"):
stringFileName = urlFilename[1:]
return urlFolder + stringFolder + stringFileName
# @param filename
# @return the extension of the given filename.
@classmethod
def getExtension(self, filename):
p = filename.find(".")
if (p == -1):
return ""
else:
while (True):
filename = filename[(p+1):]
p = filename.find(".")
if (p == -1):
break
return filename
@classmethod
def filename(self, name, ext, i):
return name + ("" if (i == 0) else str(i)) + ("" if (ext == "") else ("." + ext))