PyWebWizard: Fixing bugs and implementation of mising features.

Implemented the FTP Publishing capabilities.

Change-Id: I3dbd2639947a219a494ae219153fcc7f3e30785e
This commit is contained in:
Javier Fernandez
2013-05-03 14:58:19 +00:00
parent 4ed7466f74
commit d3cc742d28
4 changed files with 67 additions and 126 deletions

View File

@@ -31,16 +31,16 @@ from ..common.UCB import UCB
from .data.CGPublish import CGPublish from .data.CGPublish import CGPublish
from .data.CGSettings import CGSettings from .data.CGSettings import CGSettings
#from com.sun.star.ucb import AuthenticationRequest from com.sun.star.ucb import AuthenticationRequest
#from com.sun.star.ucb import InteractiveAugmentedIOException from com.sun.star.ucb import InteractiveAugmentedIOException
#from com.sun.star.ucb import InteractiveNetworkConnectException from com.sun.star.ucb import InteractiveNetworkConnectException
#from com.sun.star.ucb import InteractiveNetworkResolveNameException from com.sun.star.ucb import InteractiveNetworkResolveNameException
#from com.sun.star.ucb import OpenCommandArgument2 from com.sun.star.ucb import OpenCommandArgument2
#from com.sun.star.ucb import OpenMode from com.sun.star.ucb.OpenMode import FOLDERS
PushButtonType_OK_value = uno.getConstantByName( "com.sun.star.awt.PushButtonType.OK" ) #PushButtonType_OK_value = uno.getConstantByName( "com.sun.star.awt.PushButtonType.OK" )
PushButtonType_CANCEL_value = uno.getConstantByName( "com.sun.star.awt.PushButtonType.CANCEL" ) #PushButtonType_CANCEL_value = uno.getConstantByName( "com.sun.star.awt.PushButtonType.CANCEL" )
PushButtonType_HELP_value = uno.getConstantByName( "com.sun.star.awt.PushButtonType.HELP" ) #PushButtonType_HELP_value = uno.getConstantByName( "com.sun.star.awt.PushButtonType.HELP" )
# This is the FTP Dialog. <br/> # This is the FTP Dialog. <br/>
@@ -90,44 +90,6 @@ class FTPDialog(UnoDialog2, UIConsts):
ICON_UNKNOWN = "ftpunknown.gif" ICON_UNKNOWN = "ftpunknown.gif"
# The icon url for an icon representing the "connecting" state. # The icon url for an icon representing the "connecting" state.
ICON_CONNECTING = "ftpconnecting.gif" # GUI Components as Class members. ICON_CONNECTING = "ftpconnecting.gif" # GUI Components as Class members.
# Fixed Line
ln1 = None
lblFTPAddress = None
txtHost = None
lblUsername = None
txtUsername = None
lblPassword = None
txtPassword = None
# Fixed Line
ln2 = None
btnTestConnection = None
imgStatus = None
lblStatus = None
# Fixed Line
ln3 = None
txtDir = None
btnDir = None
btnOK = None
btnCancel = None
btnHelp = None
# Font Descriptors as Class members.
# Resources Object
resources = None
dataAware = []
username = ""
password = ""
#The ftp host name
host = ""
#The ftp directory.
folder = ""
#the ftp publish object which contains the
#data for this dialog.
publish = None
ucb = None
#used for the status images url.
imagesDirectory = ""
# constructor. # constructor.
# constructs the UI. # constructs the UI.
@@ -136,13 +98,18 @@ class FTPDialog(UnoDialog2, UIConsts):
# for this dialog # for this dialog
# @throws Exception # @throws Exception
def __init__(self, xmsf, p): def __init__(self, xmsf, p):
super(FTPDialog, self).__init__(xmsf) super(FTPDialog, self).__init__(xmsf)
self.publish = p self.publish = p
#templateDir = p.root.soTemplateDir templateDir = p.root.soTemplateDir
templateDir = ""
self.imagesDirectory = FileAccess.connectURLs(templateDir, "../wizard/bitmap/") self.imagesDirectory = FileAccess.connectURLs(templateDir, "../wizard/bitmap/")
self.dataAware = []
self.host = ""
self.username = ""
self.password = ""
# Load Resources # Load Resources
self.resources = FTPDialogResources(xmsf) self.resources = FTPDialogResources(xmsf)
self.ucb = UCB(xmsf) self.ucb = UCB(xmsf)
@@ -181,10 +148,10 @@ class FTPDialog(UnoDialog2, UIConsts):
PROPNAMES_BUTTON = (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH) PROPNAMES_BUTTON = (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH)
PROPNAMES_BUTTON2 = (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "PushButtonType", PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH) PROPNAMES_BUTTON2 = (PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "PushButtonType", PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH)
ln1 = self.insertFixedLine("ln1", self.ln1 = self.insertFixedLine("ln1",
PROPNAMES_LABEL, PROPNAMES_LABEL,
(8, self.resources.resln1_value, "ln1", 6, 6, 0, 210)) (8, self.resources.resln1_value, "ln1", 6, 6, 0, 210))
lblFTPAddress = self.insertLabel("lblFTPAddress", self.lblFTPAddress = self.insertLabel("lblFTPAddress",
PROPNAMES_LABEL, PROPNAMES_LABEL,
(8, self.resources.reslblFTPAddress_value, "lblFTPAddress", 12, 20, 1, 95)) (8, self.resources.reslblFTPAddress_value, "lblFTPAddress", 12, 20, 1, 95))
self.txtHost = self.insertTextField("txtHost", "disconnect", self.txtHost = self.insertTextField("txtHost", "disconnect",
@@ -258,7 +225,7 @@ class FTPDialog(UnoDialog2, UIConsts):
result = self.executeDialogFromParent(parent) result = self.executeDialogFromParent(parent)
# change the CGPublish properties # change the CGPublish properties
if (result == 1): if (result == 1):
self.publish.cp_URL = "ftp://" + self.host() + self.getDir() self.publish.cp_URL = "ftp://" + self.getHost() + self.getDir()
self.publish.cp_Username = self.username self.publish.cp_Username = self.username
self.publish.password = self.password self.publish.password = self.password
@@ -278,12 +245,12 @@ class FTPDialog(UnoDialog2, UIConsts):
def extractHost(self, ftpUrl): def extractHost(self, ftpUrl):
if (ftpUrl is None or len(ftpUrl) < 6): if (ftpUrl is None or len(ftpUrl) < 6):
return "" return ""
url = ftpUrl.substring(6) url = ftpUrl[6:]
i = url.indexOf("/") i = url.find("/")
if (i == -1): if (i == -1):
return url return url
else: else:
return url.substring(0, i) return url[:i]
# used to get data from the CGPublish object. # used to get data from the CGPublish object.
# @param ftpUrl # @param ftpUrl
@@ -291,12 +258,12 @@ class FTPDialog(UnoDialog2, UIConsts):
def extractDir(self, ftpUrl): def extractDir(self, ftpUrl):
if (ftpUrl is None or len(ftpUrl) < 6): if (ftpUrl is None or len(ftpUrl) < 6):
return "/" return "/"
url = ftpUrl.substring(6) url = ftpUrl[6:]
i = url.indexOf("/") i = url.find("/")
if (i == -1): if (i == -1):
return "/" return "/"
else: else:
return url.substring(i) return url[i:]
# enables/disables the "test" button # enables/disables the "test" button
# according to the status of the hostname, username, password text fields. # according to the status of the hostname, username, password text fields.
@@ -311,21 +278,21 @@ class FTPDialog(UnoDialog2, UIConsts):
# @return the ftp url with username and password, # @return the ftp url with username and password,
# but without the directory portion. # but without the directory portion.
def getAcountUrl(self): def getAccountUrl(self):
return "ftp://" + self.username + ":" + self.password + "@" + self.host() return "ftp://" + self.username + ":" + self.password + "@" + self.getHost()
# return the host name without the "ftp://" # return the host name without the "ftp://"
# @return # @return
def host(self): def getHost(self):
return self.host(self.host) return self.getHost1(self.host)
@classmethod @classmethod
def host1(self, s): def getHost1(self, s):
return s.substring(6) if s.startswith("ftp://") else s return s[6:] if s.startswith("ftp://") else s
# @return the full ftp url including username, password and directory portion. # @return the full ftp url including username, password and directory portion.
def getFullUrl(self): def getFullUrl(self):
return self.getAcountUrl() + self.folder return self.getAccountUrl() + self.folder
# First I try to connect to the full url, including directory. # First I try to connect to the full url, including directory.
# If an InteractiveAugmentedIOException accures, I try again, # If an InteractiveAugmentedIOException accures, I try again,
@@ -340,7 +307,7 @@ class FTPDialog(UnoDialog2, UIConsts):
success = True success = True
except InteractiveAugmentedIOException as iaioex: except InteractiveAugmentedIOException as iaioex:
try: try:
self.connect1(self.getAcountUrl()) self.connect1(self.getAccountUrl())
self.setDir("/") self.setDir("/")
success = True success = True
except Exception: except Exception:
@@ -372,20 +339,20 @@ class FTPDialog(UnoDialog2, UIConsts):
# @param acountUrl # @param acountUrl
# @throws Exception # @throws Exception
def connect1(self, acountUrl): def connect1(self, acountUrl):
content = self.ucb.getContent(self.acountUrl) content = self.ucb.getContent(self.getAccountUrl())
# list files in the content. # list files in the content.
l = self.ucb.listFiles(self.acountUrl, None) l = self.ucb.listFiles(self.getAccountUrl(), None)
# open the content # open the content
aArg = OpenCommandArgument2() aArg = OpenCommandArgument2()
aArg.Mode = OpenMode.FOLDERS # FOLDER, DOCUMENTS -> simple filter aArg.Mode = FOLDERS # FOLDER, DOCUMENTS -> simple filter
aArg.Priority = 32768 # Ignored by most implementations aArg.Priority = 32768 # Ignored by most implementations
self.ucb.executeCommand(content, "open", aArg) self.ucb.executeCommand(content, "open", aArg)
# get the title property of the content. # get the title property of the content.
obj = self.ucb.getContentProperty(content, PropertyNames.PROPERTY_TITLE, str()) obj = self.ucb.getContentProperty(content, "Title", str)
# changes the ftp subdirectory, in both # changes the ftp subdirectory, in both
# the UI and the data. # the UI and the data.
@@ -459,7 +426,7 @@ class FTPDialog(UnoDialog2, UIConsts):
# if the user chose a local directory, # if the user chose a local directory,
# sI do not accept it. # sI do not accept it.
if (newUrl.startswith("ftp://")): if (newUrl.startswith("ftp://")):
self.setDir(extractDir(newUrl)) self.setDir(self.extractDir(newUrl))
else: else:
AbstractErrorHandler.showMessage(self.xMSF, self.xUnoDialog.getPeer(), self.resources.resIllegalFolder, ErrorHandler.ERROR_PROCESS_FATAL) AbstractErrorHandler.showMessage(self.xMSF, self.xUnoDialog.getPeer(), self.resources.resIllegalFolder, ErrorHandler.ERROR_PROCESS_FATAL)
@@ -468,5 +435,4 @@ class FTPDialog(UnoDialog2, UIConsts):
# @return the full ftp url with username password and everything one needs. # @return the full ftp url with username password and everything one needs.
@classmethod @classmethod
def getFullURL1(self, p): def getFullURL1(self, p):
#return "ftp://" + p.Username + ":" + p.password + "@" + self.host(p.URL) return "ftp://" + p.cp_Username + ":" + p.password + "@" + self.getHost1(p.cp_URL)
return "ftp://" + p.cp_Username + ":" + "" + "@" + self.host1(p.cp_URL)

View File

@@ -23,57 +23,33 @@ class FTPDialogResources(Resource):
MODULE_NAME = "dbw" MODULE_NAME = "dbw"
RID_FTPDIALOG_START = 4200 RID_FTPDIALOG_START = 4200
RID_COMMON_START = 500 RID_COMMON_START = 500
resFTPDialog_title = ""
reslblUsername_value = ""
reslblPassword_value = ""
resbtnConnect_value = ""
resbtnOK_value = ""
resbtnHelp_value = ""
resbtnCancel_value = ""
resln1_value = ""
reslblFTPAddress_value = ""
resln2_value = ""
resln3_value = ""
esln3_value = ""
restxtDir_value = ""
resbtnDir_value = ""
resFTPDisconnected = ""
resFTPConnected = ""
resFTPUserPwdWrong = ""
resFTPServerNotFound = ""
resFTPRights = ""
resFTPHostUnreachable = ""
resFTPUnknownError = ""
resFTPDirectory = ""
resIllegalFolder = ""
resConnecting = ""
def __init__(self, xmsf): def __init__(self, xmsf):
super(FTPDialogResources, self).__init__(xmsf, self.MODULE_NAME) super(FTPDialogResources, self).__init__(xmsf, self.MODULE_NAME)
# Delete the String, uncomment the getResText method # Delete the String, uncomment the getResText method
resFTPDialog_title = self.getResText(self.RID_FTPDIALOG_START + 0) self.resFTPDialog_title = self.getResText(self.RID_FTPDIALOG_START + 0)
reslblUsername_value = self.getResText(self.RID_FTPDIALOG_START + 1) self.reslblUsername_value = self.getResText(self.RID_FTPDIALOG_START + 1)
reslblPassword_value = self.getResText(self.RID_FTPDIALOG_START + 2) self.reslblPassword_value = self.getResText(self.RID_FTPDIALOG_START + 2)
resbtnConnect_value = self.getResText(self.RID_FTPDIALOG_START + 3) self.resbtnConnect_value = self.getResText(self.RID_FTPDIALOG_START + 3)
resln1_value = self.getResText(self.RID_FTPDIALOG_START + 4) self.resln1_value = self.getResText(self.RID_FTPDIALOG_START + 4)
reslblFTPAddress_value = self.getResText(self.RID_FTPDIALOG_START + 5) self.reslblFTPAddress_value = self.getResText(self.RID_FTPDIALOG_START + 5)
resln2_value = self.getResText(self.RID_FTPDIALOG_START + 6) self.resln2_value = self.getResText(self.RID_FTPDIALOG_START + 6)
resln3_value = self.getResText(self.RID_FTPDIALOG_START + 7) self.resln3_value = self.getResText(self.RID_FTPDIALOG_START + 7)
resbtnDir_value = self.getResText(self.RID_FTPDIALOG_START + 8) self.resbtnDir_value = self.getResText(self.RID_FTPDIALOG_START + 8)
resFTPDisconnected = self.getResText(self.RID_FTPDIALOG_START + 9) self.resFTPDisconnected = self.getResText(self.RID_FTPDIALOG_START + 9)
resFTPConnected = self.getResText(self.RID_FTPDIALOG_START + 10) self.resFTPConnected = self.getResText(self.RID_FTPDIALOG_START + 10)
resFTPUserPwdWrong = self.getResText(self.RID_FTPDIALOG_START + 11) self.resFTPUserPwdWrong = self.getResText(self.RID_FTPDIALOG_START + 11)
resFTPServerNotFound = self.getResText(self.RID_FTPDIALOG_START + 12) self.resFTPServerNotFound = self.getResText(self.RID_FTPDIALOG_START + 12)
resFTPRights = self.getResText(self.RID_FTPDIALOG_START + 13) self.resFTPRights = self.getResText(self.RID_FTPDIALOG_START + 13)
resFTPHostUnreachable = self.getResText(self.RID_FTPDIALOG_START + 14) self.resFTPHostUnreachable = self.getResText(self.RID_FTPDIALOG_START + 14)
resFTPUnknownError = self.getResText(self.RID_FTPDIALOG_START + 15) self.resFTPUnknownError = self.getResText(self.RID_FTPDIALOG_START + 15)
resFTPDirectory = self.getResText(self.RID_FTPDIALOG_START + 16) self.resFTPDirectory = self.getResText(self.RID_FTPDIALOG_START + 16)
resIllegalFolder = self.getResText(self.RID_FTPDIALOG_START + 17) self.resIllegalFolder = self.getResText(self.RID_FTPDIALOG_START + 17)
resConnecting = self.getResText(self.RID_FTPDIALOG_START + 18) self.resConnecting = self.getResText(self.RID_FTPDIALOG_START + 18)
resbtnCancel_value = self.getResText(self.RID_COMMON_START + 11) self.resbtnCancel_value = self.getResText(self.RID_COMMON_START + 11)
resbtnOK_value = self.getResText(self.RID_COMMON_START + 18) self.resbtnOK_value = self.getResText(self.RID_COMMON_START + 18)
resbtnHelp_value = self.getResText(self.RID_COMMON_START + 15) self.resbtnHelp_value = self.getResText(self.RID_COMMON_START + 15)
restxtDir_value = "/" self.restxtDir_value = "/"

View File

@@ -783,9 +783,7 @@ class WWD_Events(WWD_Startup):
''' '''
p = self.getPublisher(FTP_PUBLISHER) p = self.getPublisher(FTP_PUBLISHER)
# if ftp is checked, and no proxies are set, and password is empty... # if ftp is checked, and no proxies are set, and password is empty...
password = getattr(p, "password", "") if p.cp_Publish and not self.proxies and (p.password is None or p.password == ""):
print ("FTP checked: ", p.cp_Publish)
if p.cp_Publish and not proxies and (password is None or password == ""):
if self.showFTPDialog(p): if self.showFTPDialog(p):
self.updatePublishUI(2) self.updatePublishUI(2)
#now continue... #now continue...
@@ -819,7 +817,7 @@ class WWD_Events(WWD_Startup):
and now ftp... and now ftp...
''' '''
p = self.getPublisher(FTP_PUBLISHER) p = self.getPublisher(FTP_PUBLISHER)
p.url = FTPDialog.getFullURL1(p); p.url = FTPDialog.getFullURL1(p)
''' first we check the publishing targets. If they exist we warn and ''' first we check the publishing targets. If they exist we warn and
ask what to do. a False here means the user said "cancel" ask what to do. a False here means the user said "cancel"
@@ -832,8 +830,9 @@ class WWD_Events(WWD_Startup):
I return the value of the ftp publisher cp_Publish I return the value of the ftp publisher cp_Publish
property to its original value... property to its original value...
''' '''
if self.proxies:
p.cp_Publish = self.ftp
p.cp_Publish = self.ftp
#if the "save settings" checkbox is on... #if the "save settings" checkbox is on...
if self.isSaveSession(): if self.isSaveSession():

View File

@@ -297,7 +297,7 @@ class WWD_Startup(WWD_General):
#WWD_General.settings.cp_Styles.sort(None) #WWD_General.settings.cp_Styles.sort(None)
self.prepareSessionLists() self.prepareSessionLists()
if self.proxies: if self.proxies:
self.__ftp = self.getPublisher(FTP_PUBLISHER).cp_Publish self.ftp = self.getPublisher(FTP_PUBLISHER).cp_Publish
self.getPublisher(FTP_PUBLISHER).cp_Publish = False self.getPublisher(FTP_PUBLISHER).cp_Publish = False
except Exception: except Exception: