void download() {
		if (des == null) {
			EventQueue.invokeLater(new Runnable() {
				public void run() {
					String s1 = Modeler.getInternationalText("NoDestinationSelected");
					String s2 = Modeler.getInternationalText("DownloadError");
					JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(page), s1 != null ? s1
							: "No destination directory is selected.", s2 != null ? s2 : "Download Aborted",
							JOptionPane.ERROR_MESSAGE);
				}
			});
			return;
		}
		if (src == null || !FileUtilities.isRemote(src)) {
			EventQueue.invokeLater(new Runnable() {
				public void run() {
					String s1 = Modeler.getInternationalText("DownloadAddressIsLocal");
					String s2 = Modeler.getInternationalText("DownloadError");
					JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(page), (s1 != null ? s1
							: "The download address is local:")
							+ "\n" + src, s2 != null ? s2 : "Download Error", JOptionPane.ERROR_MESSAGE);
				}
			});
			return;
		}
		new SwingWorker("Downloading thread") {
			public Object construct() {
				return unzip() ? Boolean.TRUE : Boolean.FALSE;
			}

			public void finished() {
				if (get() == Boolean.TRUE) {
					open();
				}
				else {
					JOptionPane.showMessageDialog(JOptionPane.getFrameForComponent(page), "Error in connecting to "
							+ src);
				}
			}
		}.start();
	}