001/* 002 * Copyright (c) 2010-2011 The Regents of the University of California. 003 * All rights reserved. 004 * 005 * '$Author: crawl $' 006 * '$Date: 2012-11-26 22:22:04 +0000 (Mon, 26 Nov 2012) $' 007 * '$Revision: 31121 $' 008 * 009 * Permission is hereby granted, without written agreement and without 010 * license or royalty fees, to use, copy, modify, and distribute this 011 * software and its documentation for any purpose, provided that the above 012 * copyright notice and the following two paragraphs appear in all copies 013 * of this software. 014 * 015 * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY 016 * FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 017 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF 018 * THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF 019 * SUCH DAMAGE. 020 * 021 * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, 022 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 023 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE 024 * PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF 025 * CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, 026 * ENHANCEMENTS, OR MODIFICATIONS. 027 * 028 */ 029 030package org.kepler.objectmanager.repository; 031 032import java.awt.BorderLayout; 033import java.awt.Dimension; 034import java.awt.Frame; 035import java.io.File; 036 037import javax.swing.JDialog; 038import javax.swing.JLabel; 039import javax.swing.JPanel; 040import javax.swing.JProgressBar; 041 042import org.kepler.kar.karxml.KarXml; 043 044/** 045 * Created by IntelliJ IDEA. 046 * User: sean 047 * Date: Mar 24, 2010 048 * Time: 11:48:05 AM 049 */ 050 051public class KARDownloader { 052 053 private String karPath = null; 054 private String karName = null; 055 private static KARDownloader instance = null; 056 private JDialog dialog; 057 private JProgressBar progressBar; 058 private long downloadedByteTotal = 0; 059 private long karFileSize; 060 061 public static KARDownloader getInstance() { 062 if (instance == null) { 063 instance = new KARDownloader(); 064 } 065 return instance; 066 } 067 068 private KARDownloader() { 069 setupProgressBar(); 070 } 071 072 private void setupProgressBar() { 073 progressBar = new JProgressBar(0, 100); 074 progressBar.setPreferredSize(new Dimension(175, 20)); 075 progressBar.setString("Downloading"); 076 progressBar.setStringPainted(false); 077 progressBar.setValue(0); 078 079 JLabel label = new JLabel("Progress: "); 080 JPanel panel = new JPanel(); 081 082 panel.add(label); 083 panel.add(progressBar); 084 085 dialog = new JDialog((Frame) null, "Downloading...", false); 086 dialog.getContentPane().add(panel, BorderLayout.CENTER); 087 dialog.pack(); 088 } 089 090 public void updateDownloadProgress(int bytes) { 091 if (bytes == -1) { 092 // The stream is over 093 progressBar.setValue(100); 094 dialog.setVisible(false); 095// dialog.dispose(); 096 return; 097 } 098 099 // Update downloaded total 100 downloadedByteTotal += bytes; 101 progressBar.setValue((int) ((downloadedByteTotal * 100) / karFileSize)); 102 } 103 104 /** 105 * Download a KAR. 106 * @param karLSID 107 * @param karSize 108 * @param repositoryName 109 * @return downloaded File, or null. 110 */ 111 public File download(String karLSID, Long karSize, String repositoryName, boolean authenticate){ 112 113 karFileSize = karSize; 114 dialog.setLocationRelativeTo(null); 115 dialog.setVisible(true); 116 117 if (karLSID == null || karLSID.length()==0 || 118 repositoryName == null || repositoryName.length()==0){ 119 System.out.println("KARDownloader download(karLSID, karSize, repositoryName) got null or empty lsid " + 120 "or repositoryName!"); 121 return null; 122 } 123 124 try { 125 progressBar.setValue(0); 126 EcogridRepositoryResults result = new EcogridRepositoryResults(karLSID, repositoryName, authenticate); 127 result.setDownloader(this); 128 File local = result.cacheKAR(authenticate); 129 return local; 130 } 131 catch(RepositoryException ex) { 132 System.out.println("Caught repository exception!"); 133 dialog.setVisible(false); 134 ex.printStackTrace(); 135 } 136 137 return null; 138 } 139 140 /** 141 * Given karXML for a KAR, download KAR. 142 * @see download(String karLSID, Long karSize, String repositoryName) for alternative 143 * you may want to use to avoid having to download karXml. 144 * @param karXml 145 * @return kar File 146 */ 147 public File download(KarXml karXml, boolean authenticate) { 148 149 karFileSize = karXml.getSize(); 150 151 dialog.setLocationRelativeTo(null); 152 dialog.setVisible(true); 153 154 String lsid = karXml.getLsid(); 155 String repositoryName = karXml.getRepositoryName(); 156 157 if (lsid == null || lsid.length()==0 || 158 repositoryName == null || repositoryName.length()==0){ 159 System.out.println("KARDownloader download(karxml) got null or empty lsid " + 160 "or repositoryName from karXml!"); 161 return null; 162 } 163 164 try { 165 progressBar.setValue(0); 166 EcogridRepositoryResults result = 167 new EcogridRepositoryResults(lsid, repositoryName, authenticate); 168 result.setDownloader(this); 169 File local = result.cacheKAR(authenticate); 170 return local; 171 } 172 catch(RepositoryException ex) { 173 System.out.println("Caught repository exception!"); 174 ex.printStackTrace(); 175 } 176 177 return null; 178 } 179 180 public void setKarPath(String karPath) { 181 System.out.println("KARDownloader setKarPath() - " + karPath); 182 this.karPath = karPath; 183 } 184 185 public String getKarPath() { 186 return karPath; 187 } 188 189 public void setKarName(String karName) { 190 System.out.println("KARDownloader setKarName() - " + karName); 191 this.karName = karName; 192 } 193 194 public String getKarName() { 195 return karName; 196 } 197}