Package org.cloudfoundry.ide.eclipse.server.ui.internal

Source Code of org.cloudfoundry.ide.eclipse.server.ui.internal.CloudFoundryLaunchable

/*******************************************************************************
* Copyright (c) 2012, 2014 Pivotal Software, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of 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.
*  Contributors:
*     Pivotal Software, Inc. - initial API and implementation
********************************************************************************/
package org.cloudfoundry.ide.eclipse.server.ui.internal;

import java.net.HttpURLConnection;
import java.net.URL;

import org.eclipse.jst.server.core.Servlet;
import org.eclipse.swt.widgets.Display;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IModuleArtifact;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.model.IURLProvider;
import org.eclipse.wst.server.core.model.IURLProvider2;
import org.eclipse.wst.server.core.util.HttpLaunchable;
import org.eclipse.wst.server.core.util.WebResource;

/**
* @author Christian Dupuis
* @author Terry Denney
*/
public class CloudFoundryLaunchable extends HttpLaunchable {

    public CloudFoundryLaunchable(final IServer server, final IModuleArtifact moduleObject) {
        super(new IURLProvider2() {
            public URL getModuleRootURL(IModule module) {
                IURLProvider urlProvider = (IURLProvider) server.loadAdapter(IURLProvider.class, null);
                return urlProvider.getModuleRootURL(module);
            }

            public URL getLaunchableURL() {
                try {

                 
                    URL url = getModuleRootURL(moduleObject.getModule());
                   
                    if (url == null) {
                        return null;
                    }

                    if (moduleObject instanceof Servlet) {
                        Servlet servlet = (Servlet) moduleObject;
                        if (servlet.getAlias() != null) {
                            String path = servlet.getAlias();
                            if (path.startsWith("/")) //$NON-NLS-1$
                                path = path.substring(1);
                            url = new URL(url, path);
                        } else {
                            url = new URL(url, "servlet/" + servlet.getServletClassName()); //$NON-NLS-1$
                        }
                    } else if (moduleObject instanceof WebResource) {
                        WebResource resource = (WebResource) moduleObject;
                        String path = resource.getPath().toString();
                        if (path != null && path.startsWith("/") && path.length() > 0) { //$NON-NLS-1$
                            path = path.substring(1);
                        }
                        if (path != null && path.length() > 0) {
                            url = new URL(url, path);
                        }
                    }
                    final URL url2 = url;
                    Display.getDefault().syncExec(new Runnable() {
            public void run() {
              waitForUrlAvaiable(url2, 10000);
            }
                    });

                    return url;
                } catch (Exception e) {
                    return null;
                }
            }
           
            private boolean waitForUrlAvaiable(URL moduleUrl, long timeout) {
                HttpURLConnection conn = null;
                int code = -1;
                long interval = timeout/20;
                for (int i = 0; i < 20; i++) {
                    try {
                        conn = (HttpURLConnection) moduleUrl.openConnection();
                        conn.setUseCaches(false);
                        conn.setRequestMethod("GET"); //$NON-NLS-1$
                        conn.setReadTimeout(5000);
                        conn.connect();
                        code = conn.getResponseCode();
                        if (code != HttpURLConnection.HTTP_NOT_FOUND) {
                            return true;
                        }
                    } catch (Throwable e) {
                        // Do nothing
                    }
                    if (conn != null) {
                        conn.disconnect();
                        conn = null;
                    }
                    try {
                      Thread.sleep(interval);
                    } catch (Exception e) {
                      // Do nothing.
                    }
                }
                return false;
            }
        });
    }
}
TOP

Related Classes of org.cloudfoundry.ide.eclipse.server.ui.internal.CloudFoundryLaunchable

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.