diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/common/UCB.py')
-rw-r--r-- | wizards/com/sun/star/wizards/common/UCB.py | 148 |
1 files changed, 148 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/common/UCB.py b/wizards/com/sun/star/wizards/common/UCB.py new file mode 100644 index 000000000..1e52e4861 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/UCB.py @@ -0,0 +1,148 @@ +# +# 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 uno +import traceback + +from abc import abstractmethod + +from ..common.FileAccess import FileAccess + +from com.sun.star.beans import Property + +from com.sun.star.ucb import Command +from com.sun.star.ucb import GlobalTransferCommandArgument +from com.sun.star.ucb.NameClash import OVERWRITE +from com.sun.star.ucb import OpenCommandArgument2 +from com.sun.star.ucb.OpenMode import ALL +from com.sun.star.ucb.TransferCommandOperation import COPY + + +# This class is used to copy the content of a folder to +# another folder. +# There is an inconsistency with argument order. +# It should be always: dir,filename. +class UCB(object): + + ucb = None + fa = None + xmsf = None + + def __init__(self, xmsf): + self.ucb = xmsf.createInstanceWithArguments("com.sun.star.ucb.UniversalContentBroker", ()) + self.fa = FileAccess(xmsf) + self.xmsf = xmsf + + def delete(self, filename): + # System.out.println("UCB.delete(" + filename) + self.executeCommand(self.getContent(filename),"delete", True) + + def copy(self, sourceDir, targetDir): + self.copy1(sourceDir,targetDir, None) + + def copy1(self, sourceDir, targetDir, verifier): + files = self.listFiles(sourceDir, verifier) + for i in range(len(files)): + self.copy2(sourceDir, files[i], targetDir, "") + + def copy2(self, sourceDir, filename, targetDir, targetName): + if (not self.fa.exists(targetDir, True)): + self.fa.xInterface.createFolder(targetDir) + self.executeCommand(self.ucb, "globalTransfer", self.copyArg(sourceDir, filename, targetDir, targetName)) + + # target name can be PropertyNames.EMPTY_STRING, in which case the name stays lige the source name + # @param sourceDir + # @param sourceFilename + # @param targetDir + # @param targetFilename + # @return + def copyArg(self, sourceDir, sourceFilename, targetDir, targetFilename): + aArg = GlobalTransferCommandArgument() + aArg.Operation = COPY + aArg.SourceURL = self.fa.getURL(sourceDir, sourceFilename) + aArg.TargetURL = targetDir + aArg.NewTitle = targetFilename + # fail, if object with same name exists in target folder + aArg.NameClash = OVERWRITE + return aArg + + def executeCommand(self, xContent, aCommandName, aArgument): + aCommand = Command() + aCommand.Name = aCommandName + aCommand.Handle = -1 # not available + aCommand.Argument = aArgument + return xContent.execute(aCommand, 0, None) + + def listFiles(self, path, verifier): + xContent = self.getContent(path) + + aArg = OpenCommandArgument2() + aArg.Mode = ALL + aArg.Priority = 32768 + + # Fill info for the properties wanted. + aArg.Properties = (Property(),) + + aArg.Properties[0].Name = "Title" + aArg.Properties[0].Handle = -1 + + xSet = self.executeCommand(xContent, "open", aArg) + + xResultSet = xSet.getStaticResultSet() + + files = [] + + if (xResultSet.first()): + # obtain XContentAccess interface for child content access and XRow for properties + while (True): + # Obtain URL of child. + if (hasattr(xResultSet, "queryContentIdentifierString")): + aId = xResultSet.queryContentIdentifierString() + aTitle = FileAccess.getFilename(aId) + elif (hasattr(xResultSet, "getString")): + # First column: Title (column numbers are 1-based!) + aTitle = xResultSet.getString(1) + else: + aTitle = "" + #if (len(aTitle) == 0 and xResultSet.wasNull()): + if (len(aTitle) == 0): + # ignore + pass + else: + files.append(aTitle) + if (not xResultSet.next()): + break + # next child + if (verifier is not None): + for i in range(len(files)): + if (not verifier.verify(files[i])): + files.pop(i) # FIXME !!! dangerous + return files + + def getContent(self, path): + try: + ident = self.ucb.createContentIdentifier(path) + return self.ucb.queryContent(ident) + except Exception: + traceback.print_exc() + return None + + class Verifier: + @abstractmethod + def verify(object): + pass + |