blob: 87888217e9211a30eeb246f43b5006559cd45995 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2013 EclipseSource and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Innoopract Informationssysteme GmbH - initial API and implementation
* EclipseSource - ongoing development
******************************************************************************/
package org.eclipse.rap.tools.launch.internal;
import java.text.MessageFormat;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.pde.launching.IPDELauncherConstants;
public final class RAPLaunchConfig {
public static final int MIN_PORT_NUMBER = 0;
public static final int MAX_PORT_NUMBER = 65535;
public static final int MIN_SESSION_TIMEOUT = 0;
public static final int MAX_SESSION_TIMEOUT = Integer.MAX_VALUE;
// Launch configuration attribute names
private static final String PREFIX = "org.eclipse.rap.launch."; //$NON-NLS-1$
public static final String SERVLET_PATH = PREFIX + "servletPath"; //$NON-NLS-1$
public static final String OPEN_BROWSER = PREFIX + "openBrowser"; //$NON-NLS-1$
public static final String BROWSER_MODE = PREFIX + "browserMode"; //$NON-NLS-1$
public static final String PORT = PREFIX + "port"; //$NON-NLS-1$
public static final String USE_MANUAL_PORT = PREFIX + "useManualPort"; //$NON-NLS-1$
public static final String CONTEXTPATH = PREFIX + "contextpath"; //$NON-NLS-1$
public static final String USE_MANUAL_CONTEXTPATH = PREFIX + "useManualContextPath"; //$NON-NLS-1$
public static final String SESSION_TIMEOUT = PREFIX + "sessionTimeout"; //$NON-NLS-1$
public static final String USE_SESSION_TIMEOUT = PREFIX + "useSessionTimeout"; //$NON-NLS-1$
public static final String DEVELOPMENT_MODE = PREFIX + "developmentMode"; //$NON-NLS-1$
public static final String USE_DEFAULT_DATA_LOCATION = PREFIX + "useDefaultDataLocation"; //$NON-NLS-1$
public static final String DATA_LOCATION = PREFIX + "dataLocation"; //$NON-NLS-1$
// Default values for launch configuration attribute names
private static final String DEFAULT_SERVLET_PATH = "/rap"; //$NON-NLS-1$
private static final BrowserMode DEFAULT_BROWSER_MODE = BrowserMode.INTERNAL;
private static final int DEFAULT_PORT = 10080;
private static final boolean DEFAULT_USE_MANUAL_PORT = false;
private static final String DEFAULT_CONTEXTPATH = "/";
private static final boolean DEFAULT_USE_MANUAL_CONTEXTPATH = false;
private static final int DEFAULT_SESSION_TIMEOUT = MIN_SESSION_TIMEOUT;
private static final boolean DEFAULT_USE_SESSION_TIMEOUT = false;
private static final boolean DEFAULT_DEVELOPMENT_MODE = true;
private static final String DEFAULT_DATA_LOCATION = "${workspace_loc}/.metadata/.plugins/"; //$NON-NLS-1$
public static void setDefaults( ILaunchConfigurationWorkingCopy config ) {
config.setAttribute( SERVLET_PATH, DEFAULT_SERVLET_PATH );
config.setAttribute( BROWSER_MODE, DEFAULT_BROWSER_MODE.getName() );
config.setAttribute( PORT, DEFAULT_PORT );
config.setAttribute( USE_MANUAL_PORT, DEFAULT_USE_MANUAL_PORT );
config.setAttribute( CONTEXTPATH, DEFAULT_CONTEXTPATH );
config.setAttribute( USE_MANUAL_CONTEXTPATH, DEFAULT_USE_MANUAL_CONTEXTPATH );
config.setAttribute( SESSION_TIMEOUT, DEFAULT_SESSION_TIMEOUT );
config.setAttribute( USE_SESSION_TIMEOUT, DEFAULT_USE_SESSION_TIMEOUT );
config.setAttribute( DEVELOPMENT_MODE, DEFAULT_DEVELOPMENT_MODE );
config.setAttribute( USE_DEFAULT_DATA_LOCATION, true );
config.setAttribute( IPDELauncherConstants.DOCLEAR, false );
config.setAttribute( IPDELauncherConstants.ASKCLEAR, false );
String defaultDataLocation = getDefaultDataLocation( config.getName() );
config.setAttribute( DATA_LOCATION, defaultDataLocation );
}
public static String getDefaultDataLocation( String name ) {
return DEFAULT_DATA_LOCATION + Activator.getPluginId() + "/"+ name.replaceAll( "\\s", "" );
}
private final ILaunchConfiguration config;
private final ILaunchConfigurationWorkingCopy workingCopy;
public RAPLaunchConfig( ILaunchConfiguration config ) {
this.config = config;
if( config instanceof ILaunchConfigurationWorkingCopy ) {
workingCopy = ( ILaunchConfigurationWorkingCopy )config;
} else {
workingCopy = null;
}
}
public String getName() {
return config.getName();
}
public ILaunchConfiguration getUnderlyingLaunchConfig() {
return config;
}
public RAPLaunchConfigValidator getValidator() {
return new RAPLaunchConfigValidator( this );
}
public boolean getAskClearDataLocation() throws CoreException {
return config.getAttribute( IPDELauncherConstants.ASKCLEAR, false );
}
public void setAskClearDataLocation( boolean askClear ) {
checkWorkingCopy();
workingCopy.setAttribute( IPDELauncherConstants.ASKCLEAR, askClear );
}
public boolean getDoClearDataLocation() throws CoreException {
return config.getAttribute( IPDELauncherConstants.DOCLEAR, false );
}
public void setDoClearDataLocation( boolean doClear ) {
checkWorkingCopy();
workingCopy.setAttribute( IPDELauncherConstants.DOCLEAR, doClear );
}
public boolean getUseDefaultDatatLocation() throws CoreException {
return config.getAttribute( USE_DEFAULT_DATA_LOCATION, true );
}
public void setUseDefaultDataLocation( boolean useDefaultDataLocation ) {
checkWorkingCopy();
workingCopy.setAttribute( USE_DEFAULT_DATA_LOCATION, useDefaultDataLocation );
}
public String getDataLocation() throws CoreException {
return config.getAttribute( DATA_LOCATION, getDefaultDataLocation( getName() ) );
}
public void setDataLocation( String dataLocation ) {
if( dataLocation == null ) {
throw new NullPointerException( "dataLocation" ); //$NON-NLS-1$
}
checkWorkingCopy();
workingCopy.setAttribute( DATA_LOCATION, dataLocation );
}
public String getServletPath() throws CoreException {
return config.getAttribute( SERVLET_PATH, DEFAULT_SERVLET_PATH );
}
public void setServletPath( String servletPath ) {
if( servletPath == null ) {
throw new NullPointerException( "servletPath" ); //$NON-NLS-1$
}
checkWorkingCopy();
workingCopy.setAttribute( SERVLET_PATH, servletPath );
}
public boolean getOpenBrowser() throws CoreException {
return config.getAttribute( OPEN_BROWSER, true );
}
public void setOpenBrowser( boolean openBrowser ) {
checkWorkingCopy();
workingCopy.setAttribute( OPEN_BROWSER, openBrowser );
}
public BrowserMode getBrowserMode() throws CoreException {
String value
= config.getAttribute( BROWSER_MODE, BrowserMode.INTERNAL.getName() );
return BrowserMode.parse( value );
}
public void setBrowserMode( BrowserMode browserMode ) {
checkWorkingCopy();
workingCopy.setAttribute( BROWSER_MODE, browserMode.getName() );
}
public boolean getUseManualPort() throws CoreException {
// If not specified, return false instead of the default value (true) to
// remain backwards compatible
return config.getAttribute( USE_MANUAL_PORT, DEFAULT_USE_MANUAL_PORT );
}
public void setUseManualPort( boolean useManualPort ) {
checkWorkingCopy();
workingCopy.setAttribute( USE_MANUAL_PORT, useManualPort );
}
public int getPort() throws CoreException {
return config.getAttribute( PORT, DEFAULT_PORT );
}
public void setPort( int port ) {
checkWorkingCopy();
workingCopy.setAttribute( PORT, port );
}
public boolean getUseManualContextPath() throws CoreException {
return config.getAttribute( USE_MANUAL_CONTEXTPATH, DEFAULT_USE_MANUAL_CONTEXTPATH );
}
public void setUseManualContextPath( boolean useManualContextPath ) {
checkWorkingCopy();
workingCopy.setAttribute( USE_MANUAL_CONTEXTPATH, useManualContextPath );
}
public String getContextPath() throws CoreException {
return config.getAttribute( CONTEXTPATH, DEFAULT_CONTEXTPATH );
}
public void setContextPath( String contextPath ) {
if( contextPath == null ) {
throw new NullPointerException( "contextPath" ); //$NON-NLS-1$
}
checkWorkingCopy();
workingCopy.setAttribute( CONTEXTPATH, contextPath );
}
public boolean getUseSessionTimeout() throws CoreException {
return config.getAttribute( USE_SESSION_TIMEOUT, DEFAULT_USE_SESSION_TIMEOUT );
}
public void setUseSessionTimeout( boolean useSessionTimeout ) {
checkWorkingCopy();
workingCopy.setAttribute( USE_SESSION_TIMEOUT, useSessionTimeout );
}
public int getSessionTimeout() throws CoreException {
return config.getAttribute( SESSION_TIMEOUT, DEFAULT_SESSION_TIMEOUT );
}
public void setSessionTimeout( int timeout ) {
checkWorkingCopy();
workingCopy.setAttribute( SESSION_TIMEOUT, timeout );
}
public boolean getDevelopmentMode() throws CoreException {
return config.getAttribute( DEVELOPMENT_MODE, DEFAULT_DEVELOPMENT_MODE );
}
public void setDevelopmentMode( boolean developmentMode ) {
checkWorkingCopy();
workingCopy.setAttribute( DEVELOPMENT_MODE, developmentMode );
}
private void checkWorkingCopy() {
if( workingCopy == null ) {
String msg
= "Launch configuration cannot be modified, no working copy available"; //$NON-NLS-1$
throw new IllegalStateException( msg );
}
}
public static final class BrowserMode {
public static final BrowserMode INTERNAL = new BrowserMode( "INTERNAL" ); //$NON-NLS-1$
public static final BrowserMode EXTERNAL = new BrowserMode( "EXTERNAL" ); //$NON-NLS-1$
private final String name;
private BrowserMode( String name ) {
this.name = name;
}
public String getName() {
return name;
}
public String toString() {
return name;
}
public static BrowserMode[] values() {
return new BrowserMode[] { INTERNAL, EXTERNAL };
}
public static BrowserMode parse( String name ) {
BrowserMode result = null;
BrowserMode[] knownValues = values();
for( int i = 0; result == null && i < knownValues.length; i++ ) {
if( knownValues[ i ].getName().equalsIgnoreCase( name ) ) {
result = knownValues[ i ];
}
}
if( result == null ) {
String text = "Unknown BrowserMode ''{0}''."; //$NON-NLS-1$
String msg = MessageFormat.format( text, new Object[] { name } );
throw new IllegalArgumentException( msg );
}
return result;
}
}
}