public void fillOutputData()

in wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java [222:286]


    public void fillOutputData(OutputData outputData) throws TransferFailedException {
        OutputStream os;

        Resource resource = outputData.getResource();

        RepositoryPermissions permissions = repository.getPermissions();

        try {
            if (!ftp.changeWorkingDirectory(getRepository().getBasedir())) {
                throw new TransferFailedException(
                        "Required directory: '" + getRepository().getBasedir() + "' " + "is missing");
            }

            String[] dirs = PathUtils.dirnames(resource.getName());

            for (String dir : dirs) {
                boolean dirChanged = ftp.changeWorkingDirectory(dir);

                if (!dirChanged) {
                    // first, try to create it
                    boolean success = ftp.makeDirectory(dir);

                    if (success) {
                        if (permissions != null && permissions.getGroup() != null) {
                            // ignore failures
                            ftp.sendSiteCommand("CHGRP " + permissions.getGroup() + " " + dir);
                        }

                        if (permissions != null && permissions.getDirectoryMode() != null) {
                            // ignore failures
                            ftp.sendSiteCommand("CHMOD " + permissions.getDirectoryMode() + " " + dir);
                        }

                        dirChanged = ftp.changeWorkingDirectory(dir);
                    }
                }

                if (!dirChanged) {
                    throw new TransferFailedException("Unable to create directory " + dir);
                }
            }

            // we come back to original basedir so
            // FTP wagon is ready for next requests
            if (!ftp.changeWorkingDirectory(getRepository().getBasedir())) {
                throw new TransferFailedException("Unable to return to the base directory");
            }

            os = ftp.storeFileStream(resource.getName());

            if (os == null) {
                String msg = "Cannot transfer resource:  '" + resource
                        + "'. Output stream is null. FTP Server response: " + ftp.getReplyString();

                throw new TransferFailedException(msg);
            }

            fireTransferDebug("resource = " + resource);

        } catch (IOException e) {
            throw new TransferFailedException("Error transferring over FTP", e);
        }

        outputData.setOutputStream(os);
    }