de.zib.gndms.gndmc.test.gorfx.ESGFGet.java Source code

Java tutorial

Introduction

Here is the source code for de.zib.gndms.gndmc.test.gorfx.ESGFGet.java

Source

package de.zib.gndms.gndmc.test.gorfx;
/*
 * Copyright 2008-2011 Zuse Institute Berlin (ZIB)
 *
 *  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.
 */

import de.zib.gndms.common.kit.application.AbstractApplication;
import de.zib.gndms.common.kit.security.SetupSSL;
import de.zib.gndms.stuff.devel.StreamCopyNIO;
import org.kohsuke.args4j.Option;
import org.springframework.http.HttpMethod;
import org.springframework.http.client.ClientHttpRequest;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.RequestCallback;
import org.springframework.web.client.ResponseExtractor;
import org.springframework.web.client.RestTemplate;

import java.io.*;
import java.net.URLDecoder;

import java.io.FileInputStream;
import java.io.InputStream;
import java.security.cert.CertificateFactory;

/**
 * @author Maik Jorra
 * @email jorra@zib.de
 * @date 13.03.12  15:51
 * @brief
 */
public class ESGFGet extends AbstractApplication {

    @Option(name = "-keystorePasswd", required = true)
    protected String passwd;
    @Option(name = "-url", required = true)
    protected String url;
    @Option(name = "-out", required = true)
    protected String off;
    @Option(name = "-cred", required = true)
    protected String keyStoreLocation;

    @Option(name = "-dummy", required = false)
    protected String dummy;

    public static void main(String[] args) throws Exception {

        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        InputStream is = new FileInputStream("/var/tmp/gndms/keystore/x509_proxy.pem");
        System.out.println(cf.generateCertificate(is));
        System.out.println(" ------------------------------------------------- ");
        Thread.sleep(1000);
        System.out.println("AND: " + cf.generateCertificate(is));
        System.exit(0);

        ESGFGet cnt = new ESGFGet();
        cnt.run(args);
        System.exit(0);

    }

    @Override
    protected void run() throws Exception {

        SetupSSL setupSSL = new SetupSSL();
        setupSSL.setKeyStoreLocation(keyStoreLocation);
        setupSSL.prepareKeyStore(passwd, passwd);
        setupSSL.setupDefaultSSLContext(passwd);

        final RestTemplate rt = new RestTemplate();

        rt.execute(url, HttpMethod.GET, null, new ResponseExtractor<Object>() {
            @Override
            public Object extractData(final ClientHttpResponse response) throws IOException {

                String url = null;
                String cookieTmp = null;
                System.out.println(response.getStatusCode().toString());
                for (String s : response.getHeaders().keySet())
                    for (String v : response.getHeaders().get(s)) {
                        System.out.println(s + ":" + v);
                        if ("Location".equals(s))
                            url = v;
                        else if ("Set-Cookie".equals(s))
                            cookieTmp = v;
                    }
                final String cookie = cookieTmp.split(";")[0];

                if (url != null)
                    rt.execute(decodeUrl(url), HttpMethod.GET, new RequestCallback() {
                        @Override
                        public void doWithRequest(final ClientHttpRequest request) throws IOException {

                            System.out.println("setting cookie: " + cookie);
                            request.getHeaders().set("Cookie", cookie);
                        }
                    }, new ResponseExtractor<Object>() {
                        @Override
                        public Object extractData(final ClientHttpResponse response) throws IOException {

                            System.out.println(response.getStatusCode().toString());
                            System.out.println("Received data, copying");
                            InputStream is = response.getBody();
                            OutputStream os = new FileOutputStream(off);
                            StreamCopyNIO.copyStream(is, os);
                            System.out.println("Done");
                            return null;
                        }
                    });

                return null;
            }
        });
    }

    private String decodeUrl(final String url) {
        System.out.println("encoded url" + url);
        String durl;
        try {
            durl = URLDecoder.decode(url, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        System.out.println("decoded url" + durl);

        return durl;

    }
}