diff options
author | Javier Fernandez <jfernandez@igalia.com> | 2013-03-19 18:04:02 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-03-25 13:23:15 +0000 |
commit | 7ccc1d024426260588fecce2fd5563b34c6514f5 (patch) | |
tree | bb6f2df80ddf528d46b8ecf119bf52e541709b75 /wizards | |
parent | Init: Added new file XMLHelper.py (diff) | |
download | core-7ccc1d024426260588fecce2fd5563b34c6514f5.tar.gz core-7ccc1d024426260588fecce2fd5563b34c6514f5.zip |
Init: Added new file UCB.py
Change-Id: I4f25ee62a1f090dd6f494108849f038656b5e9fa
Diffstat (limited to 'wizards')
-rw-r--r-- | wizards/com/sun/star/wizards/common/UCB.py | 194 |
1 files changed, 194 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 000000000000..a7c3ff13a9b2 --- /dev/null +++ b/wizards/com/sun/star/wizards/common/UCB.py @@ -0,0 +1,194 @@ +# +# 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 +#from com.sun.star.ucb import XCommandProcessor +#from com.sun.star.ucb import XContentAccess +#from com.sun.star.ucb import XContentIdentifier +from com.sun.star.ucb import XContentIdentifierFactory +from com.sun.star.ucb import XContentProvider +#from com.sun.star.ucb import XDynamicResultSet +#from com.sun.star.uno import UnoRuntime + + +# This class is used to copy the content of a folder to +# another folder. +# There is an incosistency 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 deleteDirContent(self, folder): + if (not self.fa.exists(folder, True)): + return + l = self.listFiles(folder, None) + for i in range(len(l)): + self.delete(FileAccess.connectURLs(folder, l[i])) + + 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): + #sourceDir = "file:///home/javi/intel-libreoffice/install/share/config/" + sourceDir[7:] + print ("WARNING !!! copy2 - sourcedir, filenName :", sourceDir, filename) + print ("WARNING !!! copy2 - targetDir, targetName :", 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)) + + # @deprecated + # @param sourceDir + # @param filename + # @param targetDir + # @throws Exception + def copy3(self, sourceDir, filename, targetDir): + self.copy2(sourceDir, filename, targetDir, "") + + # 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. + aId = xResultSet.queryContentIdentifierString() + # First column: Title (column numbers are 1-based!) + aTitle = xResultSet.getString(1) + if (len(aTitle) == 0 and xResultSet.wasNull()): + # 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 getContentProperty(self, content, propName, classType): + pv = [] + pv[0] = Property() + pv[0].Name = propName + pv[0].Handle = -1 + + row = self.executeCommand(content, "getPropertyValues", pv) + if (isinstance(classType, str)): + return row.getString(1) + elif (isinstance(classType, bool)): + return True if (row.getBoolean(1)) else False + elif (isinstance(classType, int)): + return row.getInt(1) + elif (isinstance(classType, int)): + return row.getShort(1) + else: + return None + + def getContent(self, path): + try: + print ("WARNING !!! getContent - path: ", path) + #if (path.startswith("/")): + # s = "file://" + path + #elif (path.startswith("file://")): + # s = path + #else: + # s = "file:///home/javi/intel-libreoffice/install/share/config/" + path[7:] + #ident = self.ucb.createContentIdentifier(s) + ident = self.ucb.createContentIdentifier(path) + print ("WARNING !!! getContent - ident: ", ident.getContentIdentifier()) + return self.ucb.queryContent(ident) + except Exception: + traceback.print_exc() + return None + + class Verifier: + @abstractmethod + def verify(object): + pass + |