source: 3thparty/jupload/src/main/java/wjhk/jupload2/upload/helper/HttpProtocolFinderThread.java @ 3951

Revision 3951, 6.4 KB checked in by alexandrecorreia, 13 years ago (diff)

Ticket #1709 - Adicao de codigo fonte java do componente jupload

Line 
1//
2// $Id: DefaultUploadPolicy.java 289 2007-06-19 10:04:46 +0000 (mar., 19 juin
3// 2007) etienne_sf $
4//
5// jupload - A file upload juploadContext.
6// Copyright 2007 The JUpload Team
7//
8// Created: 2006-05-04
9// Creator: etienne_sf
10// Last modified: $Date: 2010-01-23 18:39:37 +0100 (sam., 23 janv. 2010) $
11//
12// This program is free software; you can redistribute it and/or modify it under
13// the terms of the GNU General Public License as published by the Free Software
14// Foundation; either version 2 of the License, or (at your option) any later
15// version. This program is distributed in the hope that it will be useful, but
16// WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
18// details. You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software Foundation, Inc.,
20// 675 Mass Ave, Cambridge, MA 02139, USA.
21package wjhk.jupload2.upload.helper;
22
23import wjhk.jupload2.policies.UploadPolicy;
24
25/**
26 * This Thread executes a HEAD request to the server. From the server response,
27 * the exact HTTP protocol, and any possible redirection are checked and used
28 * (if any) to update the uploadURL.<BR>
29 * The entry point for this method is the static
30 * {@link #computeServerProtocol(UploadPolicy, String)} method.
31 *
32 * @author etienne_sf
33 */
34public class HttpProtocolFinderThread extends Thread {
35    /** The current upload policy */
36    UploadPolicy uploadPolicy;
37
38    /** The given which should be analysed, to find the server protocol */
39    String givenServerProtocol;
40
41    /**
42     * This static method is the entry point for this class. It creates a
43     * thread, and launch it, returning immediatly. The finding of the server
44     * protocol is then executed in a separated thread. So whenver long it is,
45     * the user won't see it. A default protocol is set immediatly, in the run
46     * method, to be sure that there will be no NullPointerException.
47     *
48     * @param uploadPolicy The current upload policy
49     * @param givenServerProtocol The protocol given as parameter. If valid it
50     *            will be used. If not, the serverProtocol will be computed from
51     *            the post URL (and from a HEAD request for HTTP URL).
52     */
53    static public void computeServerProtocol(UploadPolicy uploadPolicy,
54            String givenServerProtocol) {
55        new HttpProtocolFinderThread(uploadPolicy, givenServerProtocol).start();
56    }
57
58    /**
59     * @param uploadPolicy The current upload policy
60     * @param givenServerProtocol The protocol given as parameter. If valid it
61     *            will be used. If not, the serverProtocol will be computed from
62     *            the post URL (and from a HEAD request for HTTP URL).
63     */
64    public HttpProtocolFinderThread(UploadPolicy uploadPolicy,
65            String givenServerProtocol) {
66        //Let's name this thread. It's easier for debugging.
67        super("HttpProtocolFinderThread");
68       
69        this.uploadPolicy = uploadPolicy;
70        this.givenServerProtocol = givenServerProtocol;
71    }
72
73    /**
74     * The job itself. Will do a HEAD request if it's a HTTP URL. Will just note
75     * ftp if FTP. Otherwise: will throw an error.
76     */
77    public void run() {
78        String computedProtocol = null;
79        String postURL = this.uploadPolicy.getPostURL();
80
81        if (null == givenServerProtocol || givenServerProtocol.equals("")) {
82            if (null == postURL || postURL.equals("")) {
83                this.uploadPolicy.displayErr("postURL not set");
84                computedProtocol = UploadPolicy.DEFAULT_SERVER_PROTOCOL;
85            } else if (postURL.substring(0, 3).equals("ftp")) {
86                computedProtocol = "ftp";
87            } else {
88                try {
89                    this.uploadPolicy.displayDebug(
90                            "Getting serverProtocol from HEAD request", 30);
91
92                    // Let's set a default protocol immediatly. It should be
93                    // good, and avoid a NullPointerException if an upload
94                    // starts immediatly.
95                    this.uploadPolicy
96                            .setServerProtocol(UploadPolicy.DEFAULT_SERVER_PROTOCOL);
97                    // Then we do the head request to the server
98                    computedProtocol = new HttpConnect(this.uploadPolicy)
99                            .getProtocol();
100                } catch (Exception e) {
101                    // If we throw an error here, we prevent the applet
102                    // to
103                    // start. So we just log it, and try the default protocol
104                    this.uploadPolicy.displayErr(
105                            "Unable to access to the postURL: '" + postURL
106                                    + "'", e);
107                    // Let's try with default value.
108                    computedProtocol = UploadPolicy.DEFAULT_SERVER_PROTOCOL;
109                }
110            }
111        } else if (this.givenServerProtocol.startsWith("HTTP")) {
112            try {
113                // In HTTP mode, we always give a try to HTTPConnect, to check
114                // if the page has moved, and other stuff.
115                // But we keep the parameter given when calling this method.
116                this.uploadPolicy.displayDebug(
117                        "Checking any redirect, from HEAD request", 30);
118                // Let's set a default protocol immediatly. It should be
119                // good, and avoid a NullPointerException if an upload
120                // starts immediatly.
121                this.uploadPolicy
122                        .setServerProtocol(UploadPolicy.DEFAULT_SERVER_PROTOCOL);
123                // Then we do the head request to the server
124                computedProtocol = new HttpConnect(this.uploadPolicy)
125                        .getProtocol();
126            } catch (Exception e) {
127                // If we throw an error here, we prevent the applet to
128                // start. So we just log it, and try the default protocol
129                this.uploadPolicy.displayErr(
130                        "Unknown to get protocol in the given postURL ("
131                                + this.uploadPolicy.getPostURL()
132                                + "), due to error: " + e.getMessage(), e);
133            }
134        }
135        this.uploadPolicy.setServerProtocol(computedProtocol);
136    }
137}
Note: See TracBrowser for help on using the repository browser.