summaryrefslogtreecommitdiffstats
path: root/wizards
diff options
context:
space:
mode:
authorJavier Fernandez <jfernandez@igalia.com>2013-03-19 18:04:02 +0000
committerMichael Meeks <michael.meeks@suse.com>2013-03-25 13:23:15 +0000
commit7ccc1d024426260588fecce2fd5563b34c6514f5 (patch)
treebb6f2df80ddf528d46b8ecf119bf52e541709b75 /wizards
parentInit: Added new file XMLHelper.py (diff)
downloadcore-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.py194
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
+