com.planet57.gshell.commands.shell.WgetAction.java Source code

Java tutorial

Introduction

Here is the source code for com.planet57.gshell.commands.shell.WgetAction.java

Source

/*
 * Copyright (c) 2009-present the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.planet57.gshell.commands.shell;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import com.google.common.io.ByteStreams;
import com.google.common.io.Flushables;
import com.planet57.gshell.command.Command;
import com.planet57.gshell.command.CommandContext;
import com.planet57.gshell.util.io.IO;
import com.planet57.gshell.command.CommandActionSupport;
import com.planet57.gshell.util.cli2.Argument;
import com.planet57.gshell.util.cli2.Option;
import com.planet57.gshell.util.io.Closeables;

import javax.annotation.Nonnull;
import javax.annotation.Nullable;

/**
 * Fetch a file from a URL.
 *
 * @since 2.3
 */
@Command(name = "wget", description = "Fetch a file from a URL")
public class WgetAction extends CommandActionSupport {
    @Option(name = "v", longName = "verbose")
    private boolean verbose;

    @Nullable
    @Option(name = "o", longName = "output-file", description = "Save to FILE", token = "FILE")
    private File outputFile;

    @Argument(required = true, description = "The URL to fetch", token = "URL")
    private URL source;

    @Override
    public Object execute(@Nonnull final CommandContext context) throws Exception {
        IO io = context.getIo();

        io.format("Downloading: %s%n", source);
        if (verbose) {
            io.format("Connecting to: %s:%s%n", source.getHost(),
                    source.getPort() != -1 ? source.getPort() : source.getDefaultPort());
        }

        URLConnection conn = source.openConnection();

        if (verbose) {
            io.format("Length: %s [%s]%n", conn.getContentLength(), conn.getContentType());
        }

        InputStream in = conn.getInputStream();

        OutputStream out;
        if (outputFile != null) {
            if (verbose) {
                io.format("Saving to file: %s%n", outputFile);
            }
            out = new BufferedOutputStream(new FileOutputStream(outputFile));
        } else {
            out = io.streams.out;
        }

        ByteStreams.copy(in, out);

        // if we write a file, close it then return the file
        if (outputFile != null) {
            Closeables.close(out);
            io.format("Saved %s [%s]%n", outputFile, outputFile.length());
            return outputFile;
        }

        // else flush the stream and say we did good
        Flushables.flushQuietly(out);
        return null;
    }
}