blob: 203ab51593a1e10bfb2139e46b7aaf3745c111e2 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.netbeans.modules.java.j2seembedded.wizard;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
/**
* Stores the JRE system properties into given properties file.
* @author Tomas Zezula
*/
public class JREProbe {
private static final String NB_PROP_PROFILE = "netbeans.java.profile"; //NOI18N
private static final String NB_PROP_EXTENSIONS = "netbeans.java.extensions"; //NOI18N
private static final String NB_PROP_VM = "netbeans.jvm.type"; //NOI18N
private static final String NB_PROP_DEBUG = "netbeans.jvm.debug"; //NOI18N
private static final String NB_PROP_TARGET = "netbeans.jvm.target"; //NOI18N
private static final String JAVA_HOME = "java.home"; //NOI18N
private static final String COMPACT_1 = "compact1"; //NOI18N
private static final String COMPACT_2 = "compact2"; //NOI18N
private static final String COMPACT_3 = "compact3"; //NOI18N
private static final String COMPACT_2_CLASS = "java.rmi.Remote"; //NOI18N
private static final String COMPACT_3_CLASS = "java.lang.instrument.Instrumentation"; //NOI18N
private static final String DEFAULT_CLASS = "java.awt.Toolkit"; //NOI18N
private static final String BOM_KEY_TARGET = "target"; //NOI18N
private static final String BOM_KEY_VM = "vm"; //NOI18N
private static final String BOM_KEY_EXTENSION = "extension"; //NOI18N
private static final String BOM_KEY_DEBUG = "debug"; //NOI18N
public static void main(String[] args) {
final Properties p = new Properties();
p.putAll(System.getProperties());
final String profile = getProfile();
if (profile != null) {
p.setProperty(NB_PROP_PROFILE, profile);
}
String installDir = p.getProperty(JAVA_HOME);
if (installDir != null) {
p.putAll(getBOMData(new File(installDir)));
}
File f = new File(args[0]);
try {
FileOutputStream fos = new FileOutputStream(f);
p.store(fos, null);
fos.close();
} catch (Exception exc) {
//PENDING
exc.printStackTrace();
}
}
private static String getProfile() {
String profile = COMPACT_1;
try {
Class.forName(COMPACT_2_CLASS);
} catch (ClassNotFoundException e) {
return profile;
}
profile = COMPACT_2;
try {
Class.forName(COMPACT_3_CLASS);
} catch (ClassNotFoundException e) {
return profile;
}
profile = COMPACT_3;
try {
Class.forName(DEFAULT_CLASS);
} catch (ClassNotFoundException e) {
return profile;
}
return null;
}
private static Map getBOMData(final File installDir) {
final Map props = new HashMap();
final File bomFile = new File (installDir, "bom"); //NOI18N
if (bomFile.canRead()) {
try {
final BufferedReader in = new BufferedReader(new InputStreamReader(
new FileInputStream(bomFile), StandardCharsets.UTF_8));
try {
String line;
while ((line = in.readLine()) != null) {
line = line.trim();
if (line.startsWith("#")) { //NOI18N
continue;
}
final StringTokenizer tk = new StringTokenizer(line,"="); //NOI18N
if (tk.countTokens() != 2) {
continue;
}
final String key = tk.nextToken().trim();
final String value = tk.nextToken().trim();
if (BOM_KEY_TARGET.equals(key)) {
props.put(NB_PROP_TARGET, value);
} else if (BOM_KEY_VM.equals(key)) {
props.put(NB_PROP_VM, value);
} else if (BOM_KEY_EXTENSION.equals(key)) {
props.put(NB_PROP_EXTENSIONS, parseExtensions(value));
} else if (BOM_KEY_DEBUG.equals(key)) {
props.put(NB_PROP_DEBUG, value);
}
}
} finally {
in.close();
}
} catch (IOException ioe) {
//pass - don't care returns {}
}
}
return props;
}
private static String parseExtensions(String value) {
int start = 0;
int end = value.length();
if (value.charAt(start) == '[') { //NOI18N
start++;
}
if (value.charAt(end-1) == ']') { //NOI18N
end--;
}
return value.substring(start, end);
}
}