001    /**
002     *
003     * Copyright 2003-2004 The Apache Software Foundation
004     *
005     *  Licensed under the Apache License, Version 2.0 (the "License");
006     *  you may not use this file except in compliance with the License.
007     *  You may obtain a copy of the License at
008     *
009     *     http://www.apache.org/licenses/LICENSE-2.0
010     *
011     *  Unless required by applicable law or agreed to in writing, software
012     *  distributed under the License is distributed on an "AS IS" BASIS,
013     *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     *  See the License for the specific language governing permissions and
015     *  limitations under the License.
016     */
017    
018    package javax.activation;
019    
020    import java.io.IOException;
021    import java.io.InputStream;
022    import java.io.OutputStream;
023    import java.net.URL;
024    import java.net.URLConnection;
025    
026    /**
027     * @version $Rev: 123385 $ $Date: 2004-12-26 19:54:49 -0800 (Sun, 26 Dec 2004) $
028     */
029    public class URLDataSource implements DataSource {
030        private final static String DEFAULT_CONTENT_TYPE = "application/octet-stream";
031    
032        private final URL url;
033    
034        /**
035         * Creates a URLDataSource from a URL object.
036         */
037        public URLDataSource(URL url) {
038            this.url = url;
039        }
040    
041        /**
042         * Returns the value of the URL content-type header field.
043         * This method calls URL.openConnection() to obtain a connection
044         * from which to obtain the content type. If this fails or
045         * a getContentType() returns null then "application/octet-stream"
046         * is returned.
047         */
048        public String getContentType() {
049            try {
050                URLConnection connection = url.openConnection();
051                String type = connection.getContentType();
052                return type == null ? DEFAULT_CONTENT_TYPE : type;
053            } catch (IOException e) {
054                return DEFAULT_CONTENT_TYPE;
055            }
056        }
057    
058        /**
059         * Returns the file name of the URL object.
060         * @return the name as returned by URL.getFile()
061         */
062        public String getName() {
063            return url.getFile();
064        }
065    
066        /**
067         * Returns an InputStream obtained from the URL.
068         * @return the InputStream from URL.openStream()
069         */
070        public InputStream getInputStream() throws IOException {
071            return url.openStream();
072        }
073    
074        /**
075         * Returns an OutputStream obtained from the URL.
076         */
077        public OutputStream getOutputStream() throws IOException {
078            URLConnection connection = url.openConnection();
079            connection.setDoOutput(true);
080            return connection.getOutputStream();
081        }
082    
083        /**
084         * Returns the URL of the data source.
085         */
086        public URL getURL() {
087            return url;
088        }
089    }