blob: bf31d77adff2f86dad8611183583bf99a97a2262 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.core.runtime.adaptor;
import java.util.*;
import org.eclipse.osgi.service.environment.Constants;
public class EnvironmentInfo implements org.eclipse.osgi.service.environment.EnvironmentInfo {
private static EnvironmentInfo singleton;
private static String nl;
private static String os;
private static String ws;
private static String arch;
static String[] allArgs;
static String[] frameworkArgs;
static String[] appArgs;
// While we recognize the SunOS operating system, we change
// this internally to be Solaris.
private static final String INTERNAL_OS_SUNOS = "SunOS"; //$NON-NLS-1$
// While we recognize the i386 architecture, we change
// this internally to be x86.
private static final String INTERNAL_ARCH_I386 = "i386"; //$NON-NLS-1$
private EnvironmentInfo() {
super();
setupSystemContext();
}
public static EnvironmentInfo getDefault() {
if (singleton == null)
singleton = new EnvironmentInfo();
return singleton;
}
public boolean inDevelopmentMode() {
return System.getProperty("osgi.dev") != null;
}
public boolean inDebugMode() {
return System.getProperty("osgi.debug") != null;
}
public String[] getCommandLineArgs() {
return allArgs;
}
public String[] getFrameworkArgs() {
return frameworkArgs;
}
public String[] getNonFrameworkArgs() {
return appArgs;
}
public String getOSArch() {
return arch;
}
public String getNL() {
return nl;
}
public String getOS() {
return os;
}
public String getWS() {
return ws;
}
/**
* Initializes the execution context for this run of the platform. The context
* includes information about the locale, operating system and window system.
*
* NOTE: The OS, WS, and ARCH values should never be null. The executable should
* be setting these values and therefore this code path is obsolete for Eclipse
* when run from the executable.
*/
private void setupSystemContext() {
// if the user didn't set the locale with a command line argument then
// use the default.
nl = System.getProperty("osgi.nl");
if (nl != null) {
StringTokenizer tokenizer = new StringTokenizer(nl, "_"); //$NON-NLS-1$
int segments = tokenizer.countTokens();
try {
switch (segments) {
case 2 :
Locale userLocale = new Locale(tokenizer.nextToken(), tokenizer.nextToken());
Locale.setDefault(userLocale);
break;
case 3 :
userLocale = new Locale(tokenizer.nextToken(), tokenizer.nextToken(), tokenizer.nextToken());
Locale.setDefault(userLocale);
break;
}
} catch (NoSuchElementException e) {
// fall through and use the default
}
}
nl = Locale.getDefault().toString();
System.getProperties().put("osgi.nl", nl);
// if the user didn't set the operating system with a command line
// argument then use the default.
os = System.getProperty("osgi.os");
if (os == null) {
String name = System.getProperty("os.name");//$NON-NLS-1$
// check to see if the VM returned "Windows 98" or some other
// flavour which should be converted to win32.
if (name.regionMatches(true, 0, Constants.OS_WIN32, 0, 3))
os = Constants.OS_WIN32;
// EXCEPTION: All mappings of SunOS convert to Solaris
if (os == null)
os = name.equalsIgnoreCase(INTERNAL_OS_SUNOS) ? Constants.OS_SOLARIS : Constants.OS_UNKNOWN;
}
System.getProperties().put("osgi.os", os);
// if the user didn't set the window system with a command line
// argument then use the default.
ws = System.getProperty("osgi.ws");
if (ws == null) {
// setup default values for known OSes if nothing was specified
if (os.equals(Constants.OS_WIN32))
ws = Constants.WS_WIN32;
else if (os.equals(Constants.OS_LINUX))
ws = Constants.WS_MOTIF;
else if (os.equals(Constants.OS_MACOSX))
ws = Constants.WS_CARBON;
else if (os.equals(Constants.OS_HPUX))
ws = Constants.WS_MOTIF;
else if (os.equals(Constants.OS_AIX))
ws = Constants.WS_MOTIF;
else if (os.equals(Constants.OS_SOLARIS))
ws = Constants.WS_MOTIF;
else
ws = Constants.WS_UNKNOWN;
}
System.getProperties().put("osgi.ws", ws);
// if the user didn't set the system architecture with a command line
// argument then use the default.
arch = System.getProperty("osgi.arch");
if (arch == null) {
String name = System.getProperty("os.arch");//$NON-NLS-1$
// Map i386 architecture to x86
arch = name.equalsIgnoreCase(INTERNAL_ARCH_I386) ? Constants.ARCH_X86 : name;
}
System.getProperties().put("osgi.arch", arch);
}
}