Package com.sun.star.wizards.web

Source Code of com.sun.star.wizards.web.FTPDialog

/**************************************************************
*
* 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
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/


package com.sun.star.wizards.web;

import java.util.List;
import java.util.Vector;

import com.sun.star.awt.PushButtonType;
import com.sun.star.awt.XButton;
import com.sun.star.awt.XControl;
import com.sun.star.awt.XFixedText;
import com.sun.star.awt.XTextComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.ucb.AuthenticationRequest;
import com.sun.star.ucb.InteractiveAugmentedIOException;
import com.sun.star.ucb.InteractiveNetworkConnectException;
import com.sun.star.ucb.InteractiveNetworkResolveNameException;
import com.sun.star.ucb.OpenCommandArgument2;
import com.sun.star.ucb.OpenMode;
import com.sun.star.wizards.common.Desktop;
import com.sun.star.wizards.common.FileAccess;
import com.sun.star.wizards.common.Helper;
import com.sun.star.wizards.common.SystemDialog;
import com.sun.star.wizards.common.PropertyNames;
import com.sun.star.wizards.common.UCB;
import com.sun.star.wizards.ui.UIConsts;
import com.sun.star.wizards.ui.UnoDialog;
import com.sun.star.wizards.ui.UnoDialog2;
import com.sun.star.wizards.ui.event.DataAware;
import com.sun.star.wizards.ui.event.UnoDataAware;
import com.sun.star.wizards.web.data.CGPublish;
import com.sun.star.wizards.web.data.CGSettings;
import com.sun.star.wizards.common.HelpIds;

/**
* This is the FTP Dialog. <br/>
* The Dialog enables the user:
* (*) entering FTP server and user information.
* (*) testing the connection.
* (*) choosing a directory on the server.
* If a connection was established succesfully, the user may
* press OK, which will change
* the CGPublish object propertiers according the user's input.
* If no connection was established. the OK and Choose-Dir button are disabled.
* See the method "disconnect()" which disables them.
*
* I use here the DataAware concept to automatically update
* the members ip, username, and password (via the methods setXXX(...))
* for details see the ui.events.DataAware classes. <br/>
*/
public class FTPDialog extends UnoDialog2 implements UIConsts, WWHID
{

    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display. "unknown" is the status when the user first
     * opens the dialog, or changes the servername/username/password.
     */
    private final static int STATUS_UNKONWN = 0;
    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display. (connection established)
     */
    private final static int STATUS_OK = 1;
    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display.
     */
    private final static int STATUS_USER_PWD_WRONG = 2;
    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display.
     */
    private final static int STATUS_SERVER_NOT_FOUND = 3;
    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display.
     */
    private final static int STATUS_NO_RIGHTS = 4;
    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display.
     */
    private final static int STATUS_HOST_UNREACHABLE = 5;
    /**
     * A Constant used for the setLabel(int) method to change the
     * status-display.
     */
    private final static int STATUS_CONNECTING = 6;
    /**
     * The icon url for error
     */
    private final static String ICON_ERROR = "ftperror.gif";
    /**
     * The icon url for ok (connection ok)
     */
    private final static String ICON_OK = "ftpconnected.gif";
    /**
     * The icon url for unknown - this is the status when
     * the user first opens the dialog
     */
    private final static String ICON_UNKNOWN = "ftpunknown.gif";
    /**
     * The icon url for an icon representing the "connecting" state.
     */
    private final static String ICON_CONNECTING = "ftpconnecting.gif";    //GUI Components as Class members.
    //Fixed Line
    private XControl ln1;
    private XFixedText lblFTPAddress;
    private XTextComponent txtHost;
    private XFixedText lblUsername;
    private XTextComponent txtUsername;
    private XFixedText lblPassword;
    private XTextComponent txtPassword;
    //Fixed Line
    private XControl ln2;
    private XButton btnTestConnection;
    private XControl imgStatus;
    private XFixedText lblStatus;
    //Fixed Line
    private XControl ln3;
    private XTextComponent txtDir;
    private XButton btnDir;
    private XButton btnOK;
    private XButton btnCancel;
    private XButton btnHelp;
    //Font Descriptors as Class members.

    //Resources Object
    private FTPDialogResources resources;
    private List dataAware = new Vector();
    public String username = PropertyNames.EMPTY_STRING;
    public String password = PropertyNames.EMPTY_STRING;
    /**
     * The ftp host name
     */
    public String host = PropertyNames.EMPTY_STRING;
    /**
     * The ftp directory.
     */
    private String dir = PropertyNames.EMPTY_STRING;
    /**
     * the ftp publish object which contains the
     * data for this dialog.
     */
    private CGPublish publish;
    private UCB ucb;
    /**
     * used for the status images url.
     */
    private String imagesDirectory;

    /**
     * constructor.
     * constructs the UI.
     * @param xmsf
     * @param p the publishert object that contains the data
     * for this dialog
     * @throws Exception
     */
    public FTPDialog(XMultiServiceFactory xmsf, CGPublish p) throws Exception
    {
        super(xmsf);
        publish = p;


        imagesDirectory = FileAccess.connectURLs(((CGSettings) (publish.root)).soTemplateDir, "../wizard/bitmap/");

        //Load Resources
        resources = new FTPDialogResources(xmsf);
        ucb = new UCB(xmsf);

        //set dialog properties...
        Helper.setUnoPropertyValues(xDialogModel,
                new String[]
                {
                    PropertyNames.PROPERTY_CLOSEABLE, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_MOVEABLE, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TITLE, PropertyNames.PROPERTY_WIDTH
                },
                new Object[]
                {
                    Boolean.TRUE, 160, HelpIds.getHelpIdString(HID_FTP), Boolean.TRUE, "FTPDialog", 167, 82, resources.resFTPDialog_title, 222
                });

        //add controls to dialog
        build();
        //make the hostname, username and password textfield data-aware.
        configure();
        //make sure we display a disconnected status.
        disconnect();
    }

    /**
     * Add controls to dialog.
     */
    public void build()
    {
        final String[] PROPNAMES_LABEL = new String[]
        {
            PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
        };
        final String[] PROPNAMES_BUTTON = new String[]
        {
            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
        };
        final String[] PROPNAMES_BUTTON2 = new String[]
        {
            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 = insertFixedLine("ln1",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.resln1_value, "ln1", INTEGERS[6], INTEGERS[6], new Short((short) 0), 210
                });
        lblFTPAddress = insertLabel("lblFTPAddress",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.reslblFTPAddress_value, "lblFTPAddress", INTEGER_12, 20, new Short((short) 1), 95
                });
        txtHost = insertTextField("txtHost", "disconnect",
                new String[]
                {
                    PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
                },
                new Object[]
                {
                    INTEGER_12, HelpIds.getHelpIdString(HID_FTP_SERVER), "txtIP", 110, 18, new Short((short) 2), 106
                });
        lblUsername = insertLabel("lblUsername",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.reslblUsername_value, "lblUsername", INTEGER_12, 36, new Short((short) 3), 85
                });
        txtUsername = insertTextField("txtUsername", "disconnect",
                new String[]
                {
                    PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
                },
                new Object[]
                {
                    INTEGER_12, HelpIds.getHelpIdString(HID_FTP_USERNAME), "txtUsername", 110, 34, new Short((short) 4), 106
                });
        lblPassword = insertLabel("lblPassword",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.reslblPassword_value, "lblPassword", INTEGER_12, 52, new Short((short) 5), 85
                });
        txtPassword = insertTextField("txtPassword", "disconnect",
                new String[]
                {
                    "EchoChar", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH
                },
                new Object[]
                {
                    new Short((short) 42), INTEGER_12, HelpIds.getHelpIdString(HID_FTP_PASS), "txtPassword", 110, 50, new Short((short) 6), 106
                });
        ln2 = insertFixedLine("ln2",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.resln2_value, "ln2", INTEGERS[6], 68, new Short((short) 7), 210
                });
        btnTestConnection = insertButton("btnConnect", "connect",
                PROPNAMES_BUTTON,
                new Object[]
                {
                    INTEGER_14, HelpIds.getHelpIdString(HID_FTP_TEST), resources.resbtnConnect_value, "btnConnect", INTEGER_12, 80, new Short((short) 8), INTEGER_50
                });

        imgStatus = insertImage("imgStatus",
                new String[]
                {
                    PropertyNames.PROPERTY_BORDER, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "ScaleImage", "Tabstop", PropertyNames.PROPERTY_WIDTH
                },
                new Object[]
                {
                    new Short((short) 0), INTEGER_14, 68, 80, Boolean.FALSE, Boolean.FALSE, INTEGER_14
                });

        lblStatus = insertLabel("lblStatus",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.resFTPDisconnected, "lblStatus", 86, 82, new Short((short) 9), 99
                });

        ln3 = insertFixedLine("ln3",
                PROPNAMES_LABEL,
                new Object[]
                {
                    INTEGERS[8], resources.resln3_value, "ln3", INTEGERS[6], 100, new Short((short) 10), 210
                });

        txtDir = insertTextField("txtDir",
                null, new String[]
                {
                    PropertyNames.PROPERTY_ENABLED, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, "Text", PropertyNames.PROPERTY_WIDTH
                },
                new Object[]
                {
                        Boolean.FALSE, INTEGER_12, HelpIds.getHelpIdString(HID_FTP_TXT_PATH), "txtDir", INTEGER_12, 113, new Short((short) 11), resources.restxtDir_value, 184
                });
        btnDir = insertButton("btnDir", "chooseDirectory",
                PROPNAMES_BUTTON,
                new Object[]
                {
                    INTEGER_14, HelpIds.getHelpIdString(HID_FTP_BTN_PATH), resources.resbtnDir_value, "btnDir", 199, 112, new Short((short) 12), INTEGER_16
                });

        btnOK = insertButton("btnOK", null,
                PROPNAMES_BUTTON2,
                new Object[]
                {
                    INTEGER_14, HelpIds.getHelpIdString(HID_FTP_OK), resources.resbtnOK_value, "btnOK", 165, 142, new Short((short) PushButtonType.OK_value), new Short((short) 13), INTEGER_50
                });

        btnCancel = insertButton("btnCancel",
                null, PROPNAMES_BUTTON2,
                new Object[]
                {
                    INTEGER_14, HelpIds.getHelpIdString(HID_FTP_CANCEL), resources.resbtnCancel_value, "btnCancel", 113, 142, new Short((short) PushButtonType.CANCEL_value), new Short((short) 14), INTEGER_50
                });

        btnHelp = insertButton("btnHelp", null,
                PROPNAMES_BUTTON2,
                new Object[]
                {
                    INTEGER_14, PropertyNames.EMPTY_STRING, resources.resbtnHelp_value, "btnHelp", 57, 142, new Short((short) PushButtonType.HELP_value), new Short((short) 15), INTEGER_50
                });

    }

    /**
     * Make hostname, username and password text fields data aware.
     */
    private void configure()
    {
        dataAware.add(UnoDataAware.attachEditControl(this, "host", txtHost, null, true));
        dataAware.add(UnoDataAware.attachEditControl(this, "username", txtUsername, null, true));
        dataAware.add(UnoDataAware.attachEditControl(this, "password", txtPassword, null, true));
    }

    /**
     * Shows the dialog.
     * If the user clicks ok, changes the given CGPublish properties to the
     * user input.
     * @param parent a dialog to center this dialog to.
     * @return 0 for cancel, 1 for ok.
     * @throws Exception - well, if something goes wrong...
     */
    public short execute(UnoDialog parent) throws Exception
    {
        host = extractHost(publish.cp_URL);
        username = publish.cp_Username == null ? PropertyNames.EMPTY_STRING : publish.cp_Username;
        password = publish.password == null ? PropertyNames.EMPTY_STRING : publish.password;
        dir = extractDir(publish.cp_URL);
        setLabel(STATUS_UNKONWN);

        enableTestButton();
        updateUI();
        short result = executeDialog(parent);
        //change the CGPublish properties
        if (result == 1)
        {
            publish.cp_URL = "ftp://" + host() + getDir();
            publish.cp_Username = username;
            publish.password = password;
        }

        return result;
    }

    /**
     * updates the hostname, username, password and
     * directory text fields.
     * is called uppon initialization.
     */
    private void updateUI()
    {
        DataAware.updateUI(dataAware);
        setDir(dir);
    }

    /**
     * extract the hostname out of the url used by the
     * publisher. This url does not include the username:password string.
     * @param ftpUrl
     * @return
     */
    private String extractHost(String ftpUrl)
    {
        if (ftpUrl == null || ftpUrl.length() < 6)
        {
            return PropertyNames.EMPTY_STRING;
        }
        String url = ftpUrl.substring(6);
        int i = url.indexOf("/");
        if (i == -1)
        {
            return url;
        }
        else
        {
            return url.substring(0, i);
        }
    }

    /**
     * used to get data from the CGPublish object.
     * @param ftpUrl
     * @return the directory portion of the ftp-url
     */
    private String extractDir(String ftpUrl)
    {
        if (ftpUrl == null || ftpUrl.length() < 6)
        {
            return "/";
        }
        String url = ftpUrl.substring(6);
        int i = url.indexOf("/");
        if (i == -1)
        {
            return "/";
        }
        else
        {
            return url.substring(i);
        }
    }

    /**
     * enables/disables the "test" button
     * according to the status of the hostname, username, password text fields.
     * If one of these fields is empty, the button is disabled.
     */
    private void enableTestButton()
    {
        setEnabled(btnTestConnection, !(isEmpty(host) || isEmpty(username) || isEmpty(password)));

    }

    /**
     * @param s
     * @return true if the string is null or PropertyNames.EMPTY_STRING.
     */
    private final boolean isEmpty(String s)
    {
        return (s == null) || (s.equals(PropertyNames.EMPTY_STRING));
    }

    /**
     * @return the ftp url with username and password,
     * but without the directory portion.
     */
    public String getAcountUrl()
    {
        return "ftp://" + username + ":" + password + "@" + host();
    }

    /**
     * return the host name without the "ftp://"
     * @return
     */
    private String host()
    {
        return host(host);
    }

    private static String host(String s)
    {
        return (s.startsWith("ftp://") ? s.substring(6) : s);
    }

    /**
     * @return the full ftp url including username, password and directory portion.
     */
    private String getFullUrl()
    {
        return getAcountUrl() + dir;
    }

    /**
     * First I try to connect to the full url, including directory.
     * If an InteractiveAugmentedIOException accures, I try again,
     * this time without the dir spec. If this works, I change the dir
     * to "/", if not I say to the user its his problem...
     *
     */
    public void connect()
    {
        setEnabled(btnTestConnection, false);
        setLabel(STATUS_CONNECTING);
        boolean success = false;
        try
        {
            connect(getFullUrl());
            success = true;
        }
        catch (InteractiveAugmentedIOException iaioex)
        {
            try
            {
                connect(getAcountUrl());
                setDir("/");
                success = true;
            }
            catch (Exception ex)
            {
                setLabel(STATUS_NO_RIGHTS);
            }
        }
        catch (InteractiveNetworkResolveNameException inrne)
        {
            setLabel(STATUS_SERVER_NOT_FOUND);
        }
        catch (AuthenticationRequest ar)
        {
            setLabel(STATUS_USER_PWD_WRONG);
        }
        catch (InteractiveNetworkConnectException incx)
        {
            setLabel(STATUS_HOST_UNREACHABLE);
        }
        catch (Exception ex)
        {
            setLabel(-1);
            ex.printStackTrace();
        }


        if (success)
        {
            setLabel(STATUS_OK);
            setEnabled(btnDir, true);
            setEnabled(btnOK, true);
        }

        setEnabled(btnTestConnection, true);

    }

    /**
     * To try the conenction I do some actions that
     * seem logical to me: <br/>
     * I get a ucb content.
     * I list the files in this content.
     * I call the ucb "open" command.
     * I get the PropertyNames.PROPERTY_TITLE property of this content.
     * @param acountUrl
     * @throws Exception
     */
    private void connect(String acountUrl) throws Exception
    {
        Object content = ucb.getContent(acountUrl);

        //list files in the content.
        List l = ucb.listFiles(acountUrl, null);

        //open the content
        OpenCommandArgument2 aArg = new OpenCommandArgument2();
        aArg.Mode = OpenMode.FOLDERS; // FOLDER, DOCUMENTS -> simple filter
        aArg.Priority = 32768; // Ignored by most implementations

        ucb.executeCommand(content, "open", aArg);

        //get the title property of the content.
        Object obj = ucb.getContentProperty(content, PropertyNames.PROPERTY_TITLE, String.class);

    }

    /**
     * changes the ftp subdirectory, in both
     * the UI and the data.
     * @param s the directory.
     */
    public void setDir(String s)
    {
        dir = s;
        Helper.setUnoPropertyValue(getModel(txtDir), "Text", dir);
    }

    /**
     * @return the ftp subdirecrtory.
     */
    public String getDir()
    {
        return dir;
    }

    /**
     * changes the status label to disconnected status, and
     * disables the ok and choose-dir buttons.
     * This method is called also when the hostname, username
     * and passwordtext fields change.
     */
    public void disconnect()
    {
        enableTestButton();
        setEnabled(btnOK, false);
        setEnabled(btnDir, false);
        setLabel(STATUS_UNKONWN);
    }

    /**
     * used for debuging.
     * @param args
     */
    public static void main(String args[])
    {
        String ConnectStr = "uno:socket,host=localhost,port=8100;urp,negotiate=0,forcesynchronous=1;StarOffice.ServiceManager";
        try
        {
            XMultiServiceFactory xLocMSF = Desktop.connect(ConnectStr);
            CGPublish p = new CGPublish();
            p.cp_URL = "ftp://tv-1/Folder";
            p.cp_Username = "ronftp";
            p.password = "ronftp";

            FTPDialog dialog = new FTPDialog(xLocMSF, p);
            dialog.execute(null);
        }
        catch (Exception exception)
        {
            exception.printStackTrace();
        }
    }

    /**
     * changes the status label and icon, according to the
     * given status
     * @param status one opf the private status-constants.
     * if this param is not one of them, an "unknown error" status is displayed.
     */
    private void setLabel(int status)
    {
        switch (status)
        {
            //not connected yet
            case STATUS_UNKONWN:
                setLabel(resources.resFTPDisconnected, ICON_UNKNOWN);
                break;
            //connected!
            case STATUS_OK:
                setLabel(resources.resFTPConnected, ICON_OK);
                break;
            case STATUS_USER_PWD_WRONG:
                setLabel(resources.resFTPUserPwdWrong, ICON_ERROR);
                break;
            //problem resolving server name
            case STATUS_SERVER_NOT_FOUND:
                setLabel(resources.resFTPServerNotFound, ICON_ERROR);
                break;
            //rights problem
            case STATUS_NO_RIGHTS:
                setLabel(resources.resFTPRights, ICON_ERROR);
                break;
            //host unreachable (firewall?)
            case STATUS_HOST_UNREACHABLE:
                setLabel(resources.resFTPHostUnreachable, ICON_ERROR);
                break;
            case STATUS_CONNECTING:
                setLabel(resources.resConnecting, ICON_CONNECTING);
                break;
            default:
                setLabel(resources.resFTPUnknownError, ICON_ERROR);
        }
    }

    /**
     * changes the text of the status label and
     * (TODO) the status image.
     * @param label
     * @param color
     */
    private void setLabel(String label, String image)
    {
        Helper.setUnoPropertyValue(getModel(lblStatus), PropertyNames.PROPERTY_LABEL, label);
        Helper.setUnoPropertyValue(getModel(imgStatus), PropertyNames.PROPERTY_IMAGEURL, imageUrl(image));
    }

    private String imageUrl(String s)
    {
        return imagesDirectory + s;
    }

    /**
     * called when the user clicks
     * the choose-dir button. ("...")
     * Opens the pickFolder dialog.
     * checks if the returned folder is an ftp folder.
     * sets the textbox and the data to the new selected dir.
     */
    public void chooseDirectory()
    {
        SystemDialog sd = SystemDialog.createOfficeFolderDialog(xMSF);
        String newUrl = sd.callFolderDialog(resources.resFTPDirectory, PropertyNames.EMPTY_STRING, getFullUrl());
        if (newUrl != null)
        {
            /*  if the user chose a local directory,
             *  sI do not accept it.
             */
            if (newUrl.startsWith("ftp://"))
            {
                setDir(extractDir(newUrl));
            }
            else
            {
                AbstractErrorHandler.showMessage(xMSF, xControl.getPeer(), resources.resIllegalFolder, ErrorHandler.ERROR_PROCESS_FATAL);
            }
        }
    }

    /**
     * practical to have such a method...
     * @param p the publisher obejct that contains the ftp connection info.
     * @return the full ftp url with username password and everything one needs.
     */
    public static final String getFullURL(CGPublish p)
    {
        return "ftp://" + p.cp_Username + ":" + p.password + "@" + host(p.cp_URL);
    }
}
TOP

Related Classes of com.sun.star.wizards.web.FTPDialog

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.