Package net.sourceforge.ganttproject.export

Source Code of net.sourceforge.ganttproject.export.WebPublisher

/*
* Created on 08.10.2005
*/
package net.sourceforge.ganttproject.export;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URL;

import net.sourceforge.ganttproject.GPLogger;
import net.sourceforge.ganttproject.document.DocumentManager;
import net.sourceforge.ganttproject.gui.UIFacade;

import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.IJobManager;
import org.eclipse.core.runtime.jobs.Job;

class WebPublisher {

    WebPublisher() {
    }

    public void run(final File[] exportFiles, final DocumentManager.FTPOptions options, UIFacade uiFacade) {
        IJobManager jobManager = Platform.getJobManager();
        IProgressMonitor monitor = jobManager.createProgressGroup();
          Job startingJob = new Job("starting") {
        protected IStatus run(IProgressMonitor monitor) {
          monitor.beginTask("Publishing files on FTP", exportFiles.length);
          try{
                final URL baseUrl = buildURL(options);
                if (baseUrl==null) {
                  throw new RuntimeException("Failed to discover your FTP settings. Please make sure that you specified server name and user name");
                }
                for (int i=0; i<exportFiles.length; i++) {
                    Job nextJob = createTransferJob(baseUrl, exportFiles[i]);
                    nextJob.setProgressGroup(monitor, 1);
                    nextJob.schedule();
                    nextJob.join();
                }
                Job finishingJob = new Job("finishing") {
            protected IStatus run(IProgressMonitor monitor) {
              monitor.done();
              return Status.OK_STATUS;
            }
                };
                finishingJob.setProgressGroup(monitor, 0);
                finishingJob.schedule();
                finishingJob.join();
          } catch (IOException e) {
            if (!GPLogger.log(e)) {
              e.printStackTrace(System.err);
            }
          } catch (InterruptedException e) {
            if (!GPLogger.log(e)) {
              e.printStackTrace(System.err);
            }
          }
              return Status.OK_STATUS;
        }
        private URL buildURL(DocumentManager.FTPOptions options) {
          if (options.getServerName().getValue()==null) {
            return null;
          }
          StringBuffer spec = new StringBuffer("ftp://");
          boolean hasUserSpec = false;
          if (options.getUserName().getValue()!=null) {
            spec.append(options.getUserName().getValue());
            hasUserSpec = true;
          }
          if (options.getPassword().getValue()!=null) {
            spec.append(':').append(options.getPassword().getValue());
          }
          if (hasUserSpec) {
            spec.append('@');
          }
          spec.append(options.getServerName().getValue()).append('/');
          if (options.getDirectoryName().getValue()!=null) {
            spec.append(options.getDirectoryName().getValue()).append('/');
          }
          try {
            URL result = new URL(spec.toString());
            return result;
          }
          catch(MalformedURLException e) {
            return null;
          }
        }
          };
          startingJob.setProgressGroup(monitor, 0);
          startingJob.schedule();
    }

    private Job createTransferJob(URL baseUrl, final File file) throws IOException {
        final URL outUrl = new URL(baseUrl, file.getName());
        Job result = new Job("transfer file "+file.getName()) {
            protected IStatus run(IProgressMonitor monitor) {
                byte[] buffer = new byte[(int) file.length()];
                FileInputStream inputStream = null;
                OutputStream outStream = null;
                try {
                    inputStream = new FileInputStream(file);
                    inputStream.read(buffer);
                    GPLogger.log("writing to file="+outUrl);
                    outStream = outUrl.openConnection().getOutputStream();
                    outStream.write(buffer);
                    outStream.flush();
                    monitor.worked(1);
                    return Status.OK_STATUS;
                } catch (IOException e) {
                  if (!GPLogger.log(e)) {
                    e.printStackTrace(System.err);
                  }
                    return Status.CANCEL_STATUS;
                }
                finally {
                    if (inputStream!=null) {
                        try {
                            inputStream.close();
                        } catch (IOException e) {
                          if (!GPLogger.log(e)) {
                            e.printStackTrace(System.err);
                          }
                        }
                    }
                    if (outStream!=null) {
                        try {
                            outStream.close();
                        } catch (IOException e) {
                          if (!GPLogger.log(e)) {
                            e.printStackTrace(System.err);
                          }
                        }
                    }
                }
            }
        };
        return result;
    }

}
TOP

Related Classes of net.sourceforge.ganttproject.export.WebPublisher

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.